gluster fs多hdfs系统数据副本恢复卷怎样恢复

使用 Gluster-swift 整合 Swift API-docker-about云开发
后使用快捷导航没有帐号?
只需一步,快速开始
扫一扫,访问微社区
查看: 7573|回复: 0
使用 Gluster-swift 整合 Swift API
主题帖子积分
金牌会员, 积分 6962, 距离下一级还需 3038 积分
金牌会员, 积分 6962, 距离下一级还需 3038 积分
1、什么是gluster-swift ,扮演的是什么角色?
2、如何安装部署gluster-swift 环境?
3、Swift如何集成 Keystone 用户验证?
GLUSTER-SWIFT
gluster-swift 是由 Gluster 社区发起的一个项目,针对 Swift 的一个工具,可以让 Swift 后端使用 GlusterFS,可以通过 Swift API 和 GlusterFS 挂载方式访问。在 OpenStack 里实现了统一存储。
同时支持最新版本的 Swift。
项目地址:
快速入门:
管理员手册:
如何去整合:
前面提到 gluster-swift 只是一个工具而已,它的源码里并没有包含 swift 的代码。gluster-swift 做的一件事情就是生成 ring 文件、启动一个守护进程来检查 Swift 节点是否挂载 GlusterFS 的 Volume、转换数据格式。当 Swift 的数据放在 GlusterFS 上后,利用了GlusterFS 的副本机制实现冗余,无须使用 swift 的副本功能,所以 gluster-swift 在给 Swift 生成&&Ring 时候默认只有一个副本。而 Swift 以前可以用多&&Proxy、Account、Container、Object 集群方式来横向扩展,现在完全被 gluster-swift 整合到一起,即一个节点上只运行 Proxy、Account、Container、Object 四个主要服务,Swfit 副本只有一个也不需要运行 Replicator、Updates、Auditors 进程。
gluster-swift 依赖 GlusterFS 和 swift 环境,首先要做的是配置 GlusterFS 和 swift.
172.16.0.201&&GlusterFS、swift、gluster-swift
172.16.0.202&&GlusterFS
在 201 和 202 上安装 GlusterFS
先安装一些包,编译、git、xfs等 apt-get -y install gcc python-dev python-setuptools libffi-dev git xfsprogs复制代码
下载 GlusterFS 源码包 git clone /gluster/glusterfs.git复制代码
安装 GlusterFS 编译所依赖的包: apt-get install flex bison attr libssl-dev openssl复制代码
编译 GlusterFS: cd glusterfs ./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc make make install复制代码
启动服务: /etc/init.d/glusterd start复制代码
两台节点都做完上面步骤后,在 172.16.0.201 上添加另外一个 GlusterFS 节点: gluster peer probe 172.16.0.202 gluster peer status Number of Peers: 1
Hostname: 172.16.0.202 Port: 24007 Uuid: 43db-45d6-b71c-0 State: Peer in Cluster (Connected)复制代码
创建一个 GlusterFS Volume 副本为 2,给 Swift 提供后端存储支撑: gluster volume create replica 2 swift-volumes 172.16.0.201:/opt/gluster_storage/swift-volumes 172.16.0.202:/opt/gluster_storage/swift-volumes volume create: swift-volumes: success: please start the volume to access data复制代码
启动 swift-volumes : gluster volume start swift-volumes volume stop: swift-volumes: success复制代码
查看 volume 的信息: gluster volume info swift-volumes
Volume Name: swift-volumes Type: Replicate Volume ID: 3db2-417c-b564-f8e Status: Started Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: 172.16.0.201:/opt/gluster_storage/swift-volumes Brick2: 172.16.0.202:/opt/gluster_storage/swift-volumes复制代码
在 172.16.0.201 上安装 Swift
下载源码包: git clone /openstack/swift.git复制代码
解决 swift 依赖: apt-get install python-xattr memcached复制代码
切换 swift 的分支到 grizzly 或 havana,需要和 gluster-swift 版本一致: cd swift git branch -a * master &&remotes/origin/HEAD -& origin/master &&remotes/origin/feature/ec &&remotes/origin/master &&remotes/origin/stable/folsom &&remotes/origin/stable/grizzly &&remotes/origin/stable/havana git checkout stable/grizzly git branch &&master * stable/grizzl复制代码
用 pip 解决依赖, 并安装: python setup.py egg_info pip install -r swift.egg-info/requires.txt python setup.py develop复制代码
在 172.16.0.201 上安装 gluster-swift
下载 gluster-swift 源码包: git clone /gluster/gluster-swift.git复制代码
切换和 swift 版本一样的分支: cd gluster-swift git branch -a * master &&remotes/origin/HEAD -& origin/master &&remotes/origin/grizzly &&remotes/origin/havana &&remotes/origin/master &&remotes/origin/release-1.8.0 git checkout havana git branch * havana &&master复制代码
直接安装: python setup.py develop复制代码
装完后会有 /usr/local/bin/gluster-swift-gen-builders 这个文件,主要用来自动生成 Ring 到 /etc/swift 目录下。
创建 swift 运行时需要的目录: mkdir /etc/swift/ mkdir /var/log/swift mkdir /var/cache/swift复制代码
下面的配置文件都是参考在 gluster-swift 中 etc/ 目录下有相关配置文件的范例.
拷贝 gluster-swift/etc/swift.conf-gluster 到 /etc/swift 下: cp gluster-swift/etc/swift.conf-gluster /etc/swift/swift.conf复制代码
拷贝 gluster-swift/etc/fs.conf-gluster 到 /etc/swift 下,并修改内容 mount_ip 的值: cp gluster-swift/etc/fs.conf-gluster /etc/swift/fs.conf sed -i 's/^mount_ip.*$/mount_ip = 172.16.0.201/g' /etc/swift/fs.conf复制代码
mount_ip 的值就是一个 GlusterFS 集群节点的 IP 地址,这里可以写 172.16.0.201 或 172.16.0.202
配置 swift proxy-server.conf 文件:
(配置文件中红色被注释的部分是集成了 Keystone 验证) cat & /etc/swift/proxy-server.conf && _GEEK_ [DEFAULT] bind_port = 8080 user = root # Consider using 1 worker per CPU workers = 1
[pipeline:main] #pipeline = catch_errors healthcheck proxy-logging cache authtoken keystoneauth proxy-logging proxy-server pipeline = catch_errors healthcheck proxy-logging cache proxy-logging proxy-server
[app:proxy-server] use = egg:swift#proxy log_facility = LOG_LOCAL0 log_level = DEBUG # The API allows for account creation and deletion, but since Gluster/Swift # automounts a Gluster volume for a given account, there is no way to create # or delete an account. So leave this off.
#[filter:keystoneauth] #use = egg:swift#keystoneauth #operator_roles = Member,admin
#[filter:authtoken] #paste.filter_factory = keystone.middleware.auth_token:filter_factory #service_protocol = http #service_port = 5000 #service_host =
#auth_port = 35357 #auth_host =
#auth_protocol = http #admin_tenant_name = service #admin_user = swift #admin_password = password #signing_dir = /etc/swift
allow_account_management = false account_autocreate = true # Ensure the proxy server uses fast-POSTs since we don't need to make a copy # of the entire object given that all metadata is stored in the object # extended attributes (no .meta file used after creation) and no container # sync feature to present. object_post_as_copy = false # Only need to recheck the account exists once a day recheck_account_existence = 86400 # May want to consider bumping this up if containers are created and destroyed # infrequently. recheck_container_existence = 60 # Timeout clients that don't read or write to the proxy server after 5 # seconds. client_timeout = 5 # Give more time to connect to the object, container or account servers in # cases of high load. conn_timeout = 5 # For high load situations, once connected to an object, container or account # server, allow for delays communicating with them. node_timeout = 60 # May want to consider bumping up this value to 1 - 4 MB depending on how much # traffic is for multi-megabyte
perhaps matching the # stripe width (not stripe element size) of your storage volume is a good # starting point. See below for sizing information. object_chunk_size = 65536 # If you do decide to increase the object_chunk_size, then consider lowering # this value to one. Up to &put_queue_length& object_chunk_size'd buffers can # be queued to the object server for processing. Given one proxy server worker # can handle up to 1,024 connections, by default, it will consume 10 * 65,536 # * 1,024 bytes of memory in the worse case (default values). Be sure the # amount of memory available on the system can accommodate increased values # for object_chunk_size. put_queue_depth = 10
[filter:catch_errors] use = egg:swift#catch_errors
[filter:proxy-logging] use = egg:swift#proxy_logging access_log_level = WARN
[filter:healthcheck] use = egg:swift#healthcheck
[filter:cache] use = egg:swift#memcache # Update this line to contain a comma separated list of memcache servers # shared by all nodes running the proxy-server service. memcache_servers = localhost:11211 _GEEK_复制代码
配置 account-server.conf : cat & /etc/swift/account-server.conf && _GEEK_ [DEFAULT] devices = /mnt/gluster_storage/swift_data # # Once you are confident that your startup processes will always have your # gluster volumes properly mounted *before* the account-server workers start, # you can *consider* setting this value to &false& to reduce the per-request # overhead it can incur. mount_check = true bind_ip = 0.0.0.0 bind_port = 6012 # # Override swift's default behaviour for fallocate. disable_fallocate = true # # One or two workers should be sufficient for almost any installation of # Gluster. workers = 1
[pipeline:main] pipeline = account-server
[app:account-server] use = egg:gluster_swift#account user = root log_facility = LOG_LOCAL1 log_level = DEBUG # # After ensuring things are running in a stable manner, you can turn off # normal request logging for the account server to unclutter the log # files. Warnings and errors will still be logged. log_requests = off _GEEK_复制代码
配置 container-server.conf: [DEFAULT] devices = /mnt/gluster_storage/swift_data # # Once you are confident that your startup processes will always have your # gluster volumes properly mounted *before* the container-server workers # start, you can *consider* setting this value to &false& to reduce the # per-request overhead it can incur. mount_check = true bind_ip = 0.0.0.0 bind_port = 6011 # # Override swift's default behaviour for fallocate. disable_fallocate = true # # One or two workers should be sufficient for almost any installation of # Gluster. workers = 1 [pipeline:main] pipeline = container-server [app:container-server] use = egg:gluster_swift#container user = root log_facility = LOG_LOCAL2 log_level = DEBUG # # After ensuring things are running in a stable manner, you can turn off # normal request logging for the container server to unclutter the log # files. Warnings and errors will still be logged. log_requests = off _GEEK_复制代码
配置 object-server.conf: [DEFAULT] devices = /mnt/gluster_storage/swift_data # # Once you are confident that your startup processes will always have your # gluster volumes properly mounted *before* the object-server workers start, # you can *consider* setting this value to &false& to reduce the per-request # overhead it can incur. mount_check = true bind_ip = 0.0.0.0 bind_port = 6010 # # Maximum number of clients one worker can process simultaneously (it will # actually accept N + 1). Setting this to one (1) will only handle one request # at a time, without accepting another request concurrently. By increasing the # number of workers to a much higher value, one can prevent slow file system # operations for one request from starving other requests. max_clients = 1024 # # If not doing the above, setting this value initially to match the number of # CPUs is a good starting point for determining the right value. workers = 1 # Override swift's default behaviour for fallocate. disable_fallocate = true [pipeline:main] pipeline = object-server [app:object-server] use = egg:gluster_swift#object user = root log_facility = LOG_LOCAL3 log_level = DEBUG # # For performance, after ensuring things are running in a stable manner, you # can turn off normal request logging for the object server to reduce the # per-request overhead and unclutter the log files. Warnings and errors will # still be logged. log_requests = off # # Adjust this value to match the stripe width of the underlying storage array # (not the stripe element size). This will provide a reasonable starting point # for tuning this value. disk_chunk_size = 65536 # # Adjust this value match whatever is set for the disk_chunk_size initially. # This will provide a reasonable starting point for tuning this value. network_chunk_size = 65536 _GEEK_复制代码
使用 rsyslog 记录四个服务的日志: echo -e & local0.*& & /var/log/swift/proxy-server.log local1.*& & /var/log/swift/account.log local2.*& & /var/log/swift/container.log local3.*& & /var/log/swift/object.log& && /etc/rsyslog.conf复制代码
重启 rsyslog 服务: /etc/init.d/rsyslog restart复制代码
利用 gluster-swift 安装完的命令加 GlusterFS Volume 名字生成 Ring:
(在创建 Volume 时候,Volume 名字不要包含下划线,否则运行 gluster-swift-gen-builders example_volumes 会出现奇怪的现象) gluster-swift-gen-builders swift-volumes复制代码
命令执行完会在 /etc/swift/ 下生成 *.builder *.ring.gz 文件。
启动 swift 四个服务: swift-init main restart复制代码
安装 curl 命令: apt-get install curl复制代码
使用 curl 访问 swift: curl -v -X PUT http://172.16.0.201:8080/v1/AUTH_swift-volumes/mycontainer复制代码
上面命令如果返回 201 则创建容器成功. 同时会自动挂载 GlusterFS 的 swift-volumes 到 /mnt/gluster_storage/swift_data/ 目录下。
测试上传文件: echo &Hello World& & mytestfile curl -v -X PUT -T mytestfile http://172.16.0.201:8080/v1/AUTH_swift-volumes/mycontainer/mytestfile复制代码
下载文件: curl -v -X GET -o newfile http://172.16.0.201:8080/v1/AUTH_swift-volumes/mycontainer/mytestfile cat newfile复制代码
集成 Keystone 用户验证
如果需要使用 Keystone 来进行身份验证的话,只需要修改 /etc/swift/proxy-server.conf 中前面红色标记行注释打开,蓝色一行注释掉,保存,重启服务 swift-init main restart 后就集成进去了。 swift -V 2 -A http://172.16.0.201: -U admin:admin -K password stat swift -V 2 -A http://172.16.0.201: -U admin:admin -K password post test-container swift -V 2 -A http://172.16.0.201: -U admin:admin -K password upload test-container mytestfile cd /tmp swift -V 2 -A http://172.16.0.201: -U admin:admin -K password download test-container mytestfile复制代码
欢迎加入about云群 、 ,云计算爱好者群,关注
积极上进,爱好学习
经常参与各类话题的讨论,发帖内容较有主见
长期对论坛的繁荣而不断努力,或多次提出建设性意见
为论坛做出突出贡献的会员
站长推荐 /4
云计算hadoop视频大全(新增 yarn、flume|storm、hadoop一套视频
等待验证会员请验证邮箱
新手获取积分方法
技术类问答,解决学习openstack,hadoop生态系统中遇到的问题
Powered by社会化媒体
了解更多>>
桂ICP备 号
桂公网安备 36号
阅读下一篇
自媒体运营攻略
行业经验交流
Hi,在你登录以后,就可以永久免费的收藏任何您感兴趣的内容,关注感兴趣的作者!
请输入正确的邮箱
已有帐号请点击
帐号创建成功!
我们刚刚给你发送了一封验证邮件
请在48小时内查收邮件,并按照提示验证邮箱
感谢你对微口网的信任与支持
如果你没有收到邮件,请留意垃圾箱 或 重新发送
你输入的邮箱还未注册
还没有帐号请点击
你输入的邮箱还未注册
又想起来了?
邮件发送成功!
我们刚刚给你发送了一封邮件
请在5分钟内查收邮件,并按照提示重置密码
感谢你对微口网的信任与支持
如果你没有收到邮件,请留意垃圾箱 或 重新发送
对不起,你的帐号尚未验证
如果你没有收到邮件,请留意垃圾箱 或
意见与建议
请留下您的联系方式
* 留下您正确的联系方式,以便工作人员尽快与你取得联系
转藏至我的藏点GlusterFS 分布式存储部署使用_服务器应用_Linux公社-Linux系统门户网站
你好,游客
GlusterFS 分布式存储部署使用
来源:Linux社区&
作者:wzqhbd
GlusterFS是一款非常易于使用的分布式文件存储系统,实现了全部标准POSIX接口,并用fuse实现虚拟化,让用户看起来就像是本地磁盘一样。因此程序想从本地磁盘切换到GlusterFS时是不用修改任何代码的,做到了无缝切换。并且让多台电脑的程序看起来在使用同一块硬盘,简化了很多逻辑。如果您的应用单机磁盘不够放时,不妨考虑下GlusterFS。
一、& & GlusterFS源码安装
1. glusterfs 依赖安装
a. 下yum安装
yum install -y flex bison openssl-devel libacl-devel sqlite-devel libxml2-devel libtool automake autoconf gcc attr
liburcu-bp需源码安装,yum源里面没有
先执行常规命令安装,进入源码目录后
./bootstrap
./configure
sudo make install
执行完常规安装命令后需要执行下面两个命令,才可以让系统找到urcu.
sudo ldconfig
sudo pkg-config --libs --cflags liburcu-bp liburcu
b. 下 apt-get安装
sudo apt-get install flex bison libssl-dev libacl1-dev& libsqlite3-dev libxml2-dev liburcu-dev automake autoconf gcc attr
d. 可选安装
此外如果要geo 复制功能,需要额外安装,并开启ssh服务:
yum install -y passwd openssh-client openssh-server
e. docker下安装额外操作
如果机器只有一台,又想测试集群,可以考虑用docker,然而docker对应用有些功能限制,所以不能直接使用,需要多操作一些。
①需要安装attr
yum install attr -y
②没有fuse的时候需要手动建一个
mknod /dev/fuse c 10 229
③运行容器的时候需要提升权限
docker run --privileged=true
sudo docker run --privileged=true -it -h glfs0 -v /dk/d0:/d --name=glfs0& gfs7:2& /bin/bash
sudo docker run --privileged=true -it --rm -v /dk/rm0:/d gfs7:2 /bin/bash
④. 需要加载一个本地卷,将数据文件放在本地卷的目录中,否则磁盘的额外属性不能使用。
2. glusterfs编译安装
安装完以上依赖后,我们从官网
下载源码,再编译glusterfs,gluserfs编译命令为常规命令,配置时加上--enable-debug表示编译为带debug信息的调试版本
./configure --prefix=/usr
sudo make install
二、& & GlusterFS服务启停
glusterfs的大部分命令都需要在root权限下运行,没有root权限会出现各种错误,因此我这里的命令前面都加了sudo,如果您直接用root登录,需免去sudo。
1. 启动命令
sudo service glusterd start
sudo /etc/init.d/glusterd start
sudo glusterd
2. 停止命令
sudo service glusterd stop
sudo /etc/init.d/glusterd stop
ps aux|grep glusterd
sudo kill xxxxxx-pid
或ubuntu下
sudo killall glusterd
直接kill需要先停止各volume才比较安全。
三、& & 集群关联
1. 准备机器(或虚拟机、docker)若干台,我这里启动了4个docker,IP为172.17.0.2 ~ 172.17.0.5
2. 在每台机器上启动glusterFS服务,如上一节。
3. 得到每一台机器的ip或hostname
4. 在第一台机器(172.17.0.2)上执行关联命令,
sudo gluster peer probe 172.17.0.3
sudo gluster peer probe 172.17.0.4
sudo gluster peer probe 172.17.0.5
这样所有机器已经连在一起,注意该命令的意思相当于集群邀请某人加入自己的组织。
四、& & 卷/volume操作
1.创建volume
a. 单磁盘,调试环境推荐
sudo gluster volume create vol_name 172.17.0.2:/d/disk0
b. 多磁盘,无raid,试验、测试环境推荐。
sudo gluster volume create vol_name 172.17.0.2:/d/disk0 172.17.0.3:/d/disk0 172.17.0.4:/d/disk0 172.17.0.5:/d/disk0
c. 多磁盘,有raid1。线上高并发环境推荐。
sudo gluster volume create vol_name replica 2 172.17.0.2:/d/disk0 172.17.0.3:/d/disk0 172.17.0.4:/d/disk0 172.17.0.5:/d/disk0
注意:以上命令中,磁盘数量必须为复制份数的整数倍。
此外有raid0,raid10,raid5,raid6等方法,但是在线上小文件集群不推荐使用。
2.启动volume
刚创建好的volume还没有运行,需要执行运行命令方可使用。
sudo gluster volume start vol_name
3.挂载volume
sudo mkdir /local_mount_dir
sudo mount -t glusterfs -o acl 172.17.0.2:/vol_name /local_mount_dir
4.使用GlusterFS
a. 挂载了GlusterFS的某个卷后,就可以将其当做本地文件访问,代码中只需使用原生的文件api即可。这种方式使用不一定需要root权限,只要拥有对应目录或文件的权限即可。
b. 直接API方式,这种方式需要root权限才能使用,并且java、python、ruby的api包装目前都不够完整,一般情况不推荐使用。
5.卸载volume
卸载与挂载操作是一对。虽然没有卸载也可以停止volume,但是这样做是会出问题,如果集群较大,可能导致后面volume启动失败。
sudo umount /local_mount_dir
6.停止volume
停止与启动操作是一对。停止前最好先卸载所有客户端。
sudo gluster volume stop vol_name
7.删除volume
删除与创建操作是一对。删除前需要先停止volume。在生产上一般不会删除volume
sudo gluster volume delete vol_name
8.在线修复
当某块磁盘损坏后,需要换一块新的磁盘回去,这时集群中恰好还预留了备用磁盘,因此用备用磁盘替换损坏的磁盘,命令如下两条命令
sudo gluster volume replace-brick vol_name 172.17.0.3:/d/damaged_disk 172.17.0.16:/d/new_disk commit
sudo gluster volume heal vol_name full
9.在线扩容
随着业务的增长,集群容量不够时,需要添加更多的机器和磁盘到集群中来。
a. 普通情况只需要增加分布的广度就可以,增加的磁盘数量必须为最小扩容单元的整数倍,即replica&stripe,或disperse数的整数倍:
sudo gluster volume add-brick vol_name 172.17.0.11:/d/disk0 172.17.0.12:/d/disk0& 172.17.0.13:/d/disk0& 172.17.0.14:/d/disk0
该方法执行完后,需要新增的磁盘可能还没有被实际使用,这时需要平衡数据:
sudo gluster volume rebalance vol_name start
b. 当集群达到一定规模,希望增加备份数时,增加的磁盘数量必须为原分布数量的整数倍。gluster volume info中看到的第一个值,这时需要增加一个参数让系统知道是修改了数据的备份数。假设原先的replica是2,想要改为3,命令如下:
sudo gluster volume add-brick vol_name replica 3 172.17.0.11:/d/disk0 172.17.0.12:/d/disk0& 172.17.0.13:/d/disk0& 172.17.0.14:/d/disk0
执行完add-brick命令后,新增的磁盘还没有被实际使用,且系统不会自动复制,这时需要修复数据,让系统达到新指定的备份数
sudo gluster volume heal vol_name full
注意:一次只增加一个备份,如果一次增加多个备份,目前版本可能出错。
10.在线收缩
可能原先配置比例不合理,打算将部分存储机器用于其他用途时,跟扩容一样,也分两种情况。
a. 降低分布广度,移除的磁盘必须是一整个或多个存储单元,在volume info的结果列表中是连续的多块磁盘。该命令会自动均衡数据。
sudo gluster volume remove-brick vol_name 172.17.0.11:/d/disk0 172.17.0.12:/d/disk0& 172.17.0.13:/d/disk0& 172.17.0.14:/d/disk0 start
启动后需要查看删除的状态,实际是自动均衡的状态,直到状态从in progress变为completed。
sudo gluster volume remove-brick vol_name 172.17.0.11:/d/disk0 172.17.0.12:/d/disk0& 172.17.0.13:/d/disk0& 172.17.0.14:/d/disk0 status
状态显示执行完成后,提交该移除操作。
sudo gluster volume remove-brick vol_name commit
b. 降低备份数,移除磁盘必须是符合要求(好难表达)。在volume info的结果列表中一般是零散的多块磁盘(ip可能是连续的)。该命令不需要均衡数据。
sudo gluster volume remove-brick vol_name replica 2 172.17.0.11:/d/disk0 172.17.0.12:/d/disk0& 172.17.0.13:/d/disk0& 172.17.0.14:/d/disk0 force
降低备份数时,只是简单删除,而且命令最后用的也是force参数,如果原先系统数据没有复制好,那么也就会出现部分丢失。因此该操作需要极其谨慎。必须先保证数据完整,执行sudo gluster volume heal vol_name full命令修复,并执行sudo gluster volume heal vol_name info,和 sudo gluster volume status检查,确保数据正常情况下再进行。
11.配额设定
a. 一个volume经常会让多个系统去同时使用,这时为了方便管理,可以为一级或二级目录加上磁盘配额,避免因某个系统的过量使用,而影响其他系统的正常使用。
sudo gluster volume quota vol_name enable
sudo gluster volume quota vol_name limit-usage /srv_a 10GB
sudo gluster volume quota vol_name limit-usage /srv_b 200MB
b. 查看当前配额使用量,会以相当直观的列表展示。
sudo gluster volume quota vol_name list
c. 去掉某个目录的配额,
sudo gluster volume quota vol_name remove /srv_a
d. 停止配额,该方法慎用,否则会全部清除,往往不是自己想要的结果,因为重新enable后,原先设定的配额都已消失。当然,如果打算重新配置所有目录时则比较合适。
sudo gluster volume quota vol_name disable
e. 如果系统不打算将所有磁盘都用于GlusterFS,那么可以在根目录上设置配额。考虑到glusterFS不能充分利用所有的磁盘空间,因此最好将大小设置的比实际空间稍小。
sudo gluster volume quota vol_name limit-usage / 100TB
f. 并且想将这个配额当做磁盘的大小使用,需要执行如下命令,这样df时显示的磁盘大小就是配额了。配额使用的是1024进制的,而非磁盘的1000进制。当配额量超过磁盘量时,df也会显示配额量,因此一定不能这样设置。
gluster volume set vol_name quota-deem-statfs on
以上配额是针对磁盘使用量,另外glusterFS提供文件数量的配额,limit-objects,list-object。可以根据场景使用。
磁盘配额功能gluster volume quota 目录容量达到目标大小时,不是马上生效,而是有一定的时间窗口,(若干秒),在这个时间内,数据还可以写入。这样的特性在配额比较大的时候并不影响,一般不会在短时间内超???太多。
12.raid选型
raid1:适合线上中小文件场景,创建命令如前文。
单磁盘,无raid,raid0三种方式只适合于实验环境,允许数据的丢失,一旦数据丢失,基本上需要从头来过。
raid0:适合大文件实验环境。
sudo gluster volume create vol_name stripe 3 172.17.0.2:/d/disk0 172.17.0.3:/d/disk0 172.17.0.4:/d/disk0 172.17.0.5:/d/disk0 172.17.0.6:/d/disk0 172.17.0.7:/d/disk0
raid10:适合大文件场景。
sudo gluster volume create vol_name replica 2 stripe 3 172.17.0.2:/d/disk0 172.17.0.3:/d/disk0 172.17.0.4:/d/disk0 172.17.0.5:/d/disk0 172.17.0.6:/d/disk0 172.17.0.7:/d/disk0
raid5,raid6等,一般不适合线上环境,但适合geo备份环境,因为是用软件的方式实现raid5等功能,因此cpu开销较大,而且一旦有磁盘损坏,计算的cpu开销更加大,如果在压力较大的线上环境跑,容易造成较大延迟。如果线上的读写压力很小,也可以考虑使用。
raid5:不很推荐,因为不够平衡,容错性太低,而且开销比较大。
sudo gluster volume create vol_name disperse 6 redundancy 1 172.17.0.2:/d/disk0 172.17.0.3:/d/disk0 172.17.0.4:/d/disk0 172.17.0.5:/d/disk0 172.17.0.6:/d/disk0 172.17.0.7:/d/disk0
raid6:可以使用,比raid5平衡,容错性比raid5高很多,开销只是稍大。
sudo gluster volume create vol_name disperse 7 redundancy 2 172.17.0.2:/d/disk0 172.17.0.3:/d/disk0 172.17.0.4:/d/disk0 172.17.0.5:/d/disk0 172.17.0.6:/d/disk0 172.17.0.7:/d/disk0 172.17.0.8:/d/disk0
更为安全的离线geo备份集群raid推荐:(最大可以允许一半的磁盘损坏,具有极高容错性,数据可用性可达10个9)
sudo gluster volume create vol_name disperse 10 redundancy 5 172.17.0.2:/d/disk0 172.17.0.3:/d/disk0 172.17.0.4:/d/disk0 172.17.0.5:/d/disk0 172.17.0.6:/d/disk0 172.17.0.7:/d/disk0 172.17.0.8:/d/disk0 172.17.0.9:/d/disk0 172.17.0.10:/d/disk0 172.17.0.11:/d/disk0
五、& & 系统特性
1.cache、数据一致性
客户端带有cache,但是该cache并不具备数据一致性,cache的更新是定时更新,默认间隔1秒,也就是说,某个客户端修改或删除一个文件后,需要1秒钟以后,整个集群才能全部感知到,这一秒钟内会存在数据的不一致。因此GlusterFS不适用于数据一致性要求强的数据。对于图片、语音等文件,在应用中做限定,不修改图片,只增加图片,这样数据的一致性问题就不会出现。
客户端的cache会带来性能的提升,因此当集群有一定规模时,合理的规划客户端访问的文件也是有必要的,能够增强cache的利用率。
2.用户、权限
GlusterFS所用的用户是linux自身的用户,linux用户有两个属性,一个是用户名,一个是用户号,linux在文件系统总标识一个文件的权限是用用户号的,而这个用户号可以在GlusterFS之间传递。比如某用户名user1,用户号1001,user1用户创建了文件A,权限是0600。
这时另外一台电脑,有用户名user1,用户号1002,这时该用户不能访问A文件。
但是该电脑有一个用户user3,用户号是1001,该用户号与前面的user1用户号相同,可以访问A文件。
为了让用户名和用户号不冲突,在创建系统用户时,指定一个用户号,并且是不容易被系统自动分配到的区间,这样在集群之间能使用一致的用户权限。
六、& & 集群规模
客户端或mount进程会跟所有brick连接,并且端口是小于1024的,因此brick数量一定不能超过1024,
在replica模式下,每个服务器有个glusterfs进程会以客户端形式连接每个brick,如果再在这些服务器上要进行mount,那么最大brick数小于500.
由于端口是使用有限的小于1024的端口,因此要注意保留部分常用的端口,如21,22,80,443端口。避免由于端口被占用导致重要服务无法启动。
修改 /etc/sysctl.conf 文件,添加一行,具体端口更据需要设定。
net.ipv4.ip_local_reserved_ports=0-25,80,443
然后执行 sysctl 命令使其生效:
sudo sysctl -p
线上集群,不同规模下,集群配置如下表。假设表中的每台机器拥有12块磁盘,平均可用于存储的磁盘10块。另外2块用于安装系统、记录日志、备用等功能。
系统根据不同时期,不断进行扩容,最大规模可达500台。
系统需要准备一定的备用磁盘或备用机器,以备磁盘或机器损坏时可以及时修复数据。当规模在2-15台时,准备1-3块磁盘作为备用;当规模在15-500台时,准备1-3台电脑作为备用。
系统集群较大时,要保证让数据的多个备份在不同的机器上,这样才可以在系统的某台机器宕机的情况,整个系统还是处于可用状态。
CentOS 7 搭建GlusterFS&
使用GlusterFS作为KVM后端存储
分布式存储系统GlusterFS初体验
GlusterFS全局统一命名空间
设计新Xlator扩展GlusterFS
GlusterFS Rebalance简析
CentOS 6.0-x86_64下体验Glusterfs&
GlusterFS 的详细介绍:GlusterFS 的下载地址:
本文永久更新链接地址:
相关资讯 & & &
& (10/21/:28)
& (01/03/:56)
& (10/20/:10)
& (09/15/:57)
& (08/02/:14)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款

我要回帖

更多关于 hdfs副本恢复 的文章

 

随机推荐