安装包下载链接: https://pan.baidu.com/s/1-HLP6AbAdsy5-v82CBZNIQ 提取码: pkde 本文部署glusterfs集群在四台机器 192.168.117.129 gfs129 192.168.117.130 gfs130 192.168.117.131 gfs131 192.168.117.132 gfs132
GlusterFs离线安装(需在四台机器上操作) 1 2 3 4 5 6 rpm -Uvh xz-libs-5.2.2-1.el7.x86_64.rpm xz-5.2.2-1.el7.x86_64.rpm xz-libs-5.2.2-1.el7.i686.rpm --force --nodeps rpm -ihv glusterfs-4.0.2-1.el7.x86_64.rpm glusterfs-libs-4.0.2-1.el7.x86_64.rpm --force --nodeps rpm -ihv glusterfs-fuse-4.0.2-1.el7.x86_64.rpm glusterfs-client-xlators-4.0.2-1.el7.x86_64.rpm glusterfs-cli-4.0.2-1.el7.x86_64.rpm --force --nodeps rpm -ihv userspace-rcu-0.10.0-3.el7.x86_64.rpm --force --nodeps rpm -ivh rpcbind-0.2.0-44.el7.x86_64.rpm libtirpc-0.2.4-0.10.el7.x86_64.rpm --force --nodeps rpm -ihv glusterfs-server-4.0.2-1.el7.x86_64.rpm glusterfs-api-4.0.2-1.el7.x86_64.rpm --force --nodeps
启动 Glusterfs 1 2 systemctl start glusterd.service systemctl enable glusterd.service
添加hosts文件 1 2 3 4 5 [root@localhost ~] 192.168.117.129 gfs129 192.168.117.130 gfs130 192.168.117.131 gfs131 192.168.117.132 gfs132
【说明】添加hosts文件这一步不是必需。如果使用IP地址,之后添加节点时也必需使用IP地址。如果使用hosts文件,则4个节点都必需要添加相同的hosts文件
添加GlusterFS集群节点 【说明】本小节操作在任意节点操作即可,且进行操作前要先检查每台机器的防火墙是否关闭。
1 2 3 4 5 6 7 8 [root@gfs129 ~] peer probe: success. Probe on localhost not needed [root@gfs129 ~] peer probe: success. [root@gfs129 ~] peer probe: success. [root@gfs129 ~] peer probe: success.
【说明】移除节点gluster peer detach gfs132
查看GlusterFS集群状态(任意节点) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [root@gfs129 ~] Number of Peers: 3 Hostname: gfs130 Uuid: f5af69ef-545a-4e34-be4a-4b3ab10b7caa State: Peer in Cluster (Connected) Hostname: gfs131 Uuid: 239e6236-ec2f-4b75-a39e-57eb8bd7144e State: Peer in Cluster (Connected) Hostname: gfs132 Uuid: 631f8255-06d7-45f3-ade3-da6eef88c908 State: Peer in Cluster (Connected)
查看GlusterFS volume 1 2 [root@gfs129 ~] No volumes present
创建Glusterfs所需磁盘 (1)查看磁盘情况 fdisk -l (2)添加sdb磁盘 关机,菜单栏找到虚拟机—设置,点击硬盘—添加,按步骤走,重新开机就有sdb了 (3)新建分区
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 [root@gfs129 ~] Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command . Device does not contain a recognized partition table Building a new DOS disklabel with disk identifier 0x51a8f067. Command (m for help ): Partition type : p primary (0 primary, 0 extended, 4 free) e extended Select (default p): Using default response p Partition number (1-4, default 1): First sector (2048-8388607, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-8388607, default 8388607): Using default value 8388607 Partition 1 of type Linux and of size 4 GiB is set Command (m for help ): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
执行完后,效果如下图: (4)格式化分区为XFS
1 mkfs.xfs -i size=512 /dev/sdb1
(5)挂载:
1 2 3 4 5 mkdir -p /glusterfs-data/data01/ mount /dev/sdb1 /glusterfs-data/data01/ vim /etc/fstab /dev/sdb1 /glusterfs-data/data01 xfs defaults 0 0
注意:所有节点都需创建Glusterfs所需磁盘及glusterfs-data数据目录
创建GlusterFS volume(master节点) 分布式复制模式(组合型), 最少需要4台服务器才能创建。创建分布式复制卷需指定卷类型为replica(复制卷)(否则默认为分布式卷),卷类型后边参数是副本数量。Transport指定传输类型为tcp。传输类型后的brick server数量需是副本数量的倍数,且>=2倍。当副本数量与brick server数量不等且符合倍数关系时,即是分布式复制卷
1 2 [root@gfs129 glusterfs-data] volume create: devops-volume: success: please start the volume to access data
查看GlusterFS volume(任意节点) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [root@gfs130 ~] Volume Name: devops-volume Type: Distributed-Replicate Volume ID: 14573cf5-bd1d-4ce0-82b9-b44f13db60b3 Status: Created Snapshot Count: 0 Number of Bricks: 2 x 2 = 4 Transport-type : tcp Bricks: Brick1: gfs129:/glusterfs-data/data01 Brick2: gfs130:/glusterfs-data/data01 Brick3: gfs131:/glusterfs-data/data01 Brick4: gfs132:/glusterfs-data/data01 Options Reconfigured: transport.address-family: inet nfs.disable: on performance.client-io-threads: off
启动GlusterFS volume 1 2 [root@gfs129 glusterfs-data] volume start: devops-volume: success
再次查看GlusterFS volume(任意节点) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [root@gfs130 /] Volume Name: devops-volume Type: Distributed-Replicate Volume ID: 14573cf5-bd1d-4ce0-82b9-b44f13db60b3 Status: Started Snapshot Count: 0 Number of Bricks: 2 x 2 = 4 Transport-type : tcp Bricks: Brick1: gfs129:/glusterfs-data/data01 Brick2: gfs130:/glusterfs-data/data01 Brick3: gfs131:/glusterfs-data/data01 Brick4: gfs132:/glusterfs-data/data01 Options Reconfigured: transport.address-family: inet nfs.disable: on performance.client-io-threads: off
客户端挂载GlusterFS 如果GlusterFS集群初始化使用了主机/etc/hosts中的信息,请在客户端也添加对应的信息。否则挂载过程会报错。这里就是需要在harbor所在的服务器上把hosts文件添加成跟glusterfs上一致,并且也需要在这台服务器上装一个glusterfs的客户端。安装方式同1中Glusterfs离线安装。
1 2 3 [root@localhost /] [root@localhost /] 注意:gfs130:devops-volume中也可为129,131,132
挂载成功后,效果如下:
设置开机自动挂载 1 2 [root@localhost harbor] gfs129:devops-volume /gfsdata01volume glusterfs defaults 0 0
Glusterfs的常用命令 参考自 https://blog.csdn.net/lincoln_2012/article/details/52201227
服务器节点 1 2 3 gluster peer status //查看所有节点信息,显示时不包括本节点 gluster peer probe NODE-NAME //添加节点 gluster peer detach NODE-NAME //移除节点,需要提前将该节点上的brick移除
glusterd服务 1 2 3 /etc/init.d/glusterd start //启动glusterd服务 /etc/init.d/glusterd stop //关闭glusterd服务 /etc/init.d/glusterd status //查看glusterd服务
创建卷 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 <1>复制卷 语法: gluster volume create NEW-VOLNAME [replica COUNT] [transport tcp | rdma | tcp, rdma] NEW-BRICK 示例1:gluster volume create test-volume replica 2 transport tcp server1:/exp1/brick server2:/exp2/brick <2>条带卷 语法:gluster volume create NEW-VOLNAME [stripe COUNT] [transport tcp | rdma | tcp, rdma] NEW-BRICK... 示例:gluster volume create test-volume stripe 2 transport tcp server1:/exp1/brick server2:/exp2/brick <3>分布式卷 语法: gluster volume create NEW-VOLNAME [transport tcp | rdma | tcp, rdma] NEW-BRICK 示例1:gluster volume create test-volume server1:/exp1/brick server2:/exp2/brick 示例2:gluster volume create test-volume transport rdma server1:/exp1/brick server2:/exp2/brick server3:/exp3/brick server4:/exp4/brick <4>分布式复制卷 语法: gluster volume create NEW-VOLNAME [replica COUNT] [transport tcp | rdma | tcp, rdma] NEW-BRICK... 示例: gluster volume create test-volume replica 2 transport tcp server1:/exp1/brick server2:/exp2/brick server3:/exp3/brick server4:/exp4/brick <5>分布式条带卷 语法:gluster volume create NEW-VOLNAME [stripe COUNT] [transport tcp | rdma | tcp, rdma] NEW-BRICK... 示例:gluster volume create test-volume stripe 2 transport tcp server1:/exp1/brick server2:/exp2/brick server3:/exp3/brick server4:/exp4/brick <6>条带复制卷 语法:gluster volume create NEW-VOLNAME [stripe COUNT] [replica COUNT] [transport tcp | rdma | tcp, rdma] NEW-BRICK... 示例:gluster volume create test-volume stripe 2 replica 2 transport tcp server1:/exp1/brick server2:/exp2/brick server3:/exp3/brick server4:/exp4/brick
启动卷 1 gluster volume start test-volume
停止卷 1 gluster volume stop test-volume
删除卷 1 gluster volume delete test-volume //先停止卷后才能删除
查看卷 1 2 3 4 gluster volume list /*列出集群中的所有卷*/ gluster volume info [all] /*查看集群中的卷信息*/ gluster volume status [all] /*查看集群中的卷状态*/ gluster volume status [detail| clients | mem | inode | fd]
配置卷 1 gluster volume set <VOLNAME> <OPTION> <PARAMETER>
扩展卷 1 gluster volume add-brick <VOLNAME> <NEW-BRICK>
注意,如果是复制卷或者条带卷,则每次添加的Brick数必须是replica或者stripe的整数倍。
收缩卷 1 2 3 4 5 6 先将数据迁移到其它可用的Brick,迁移结束后才将该Brick移除: 在执行了start之后,可以使用status命令查看移除进度: 不进行数据迁移,直接删除该Brick:
注意,如果是复制卷或者条带卷,则每次移除的Brick数必须是replica或者stripe的整数倍。
迁移卷 1 2 3 4 5 6 7 8 9 10 使用start命令开始进行迁移: 在数据迁移过程中,可以使用pause命令暂停迁移: 在数据迁移过程中,可以使用abort命令终止迁移: 在数据迁移过程中,可以使用status命令查看迁移进度: 在数据迁移结束后,执行commit命令来进行Brick替换:
重新均衡卷
添加Brick
删除Brick 1 2 3 4 5 6 7 若是副本卷,则移除的Bricks数是replica的整数倍 在执行开始移除之后,可以使用status命令进行移除状态查看。 使用commit命令执行Brick移除,则不会进行数据迁移而直接删除Brick,符合不需要数据迁移的用户需求。
替换Brick 任务:把192.168.1.151:/mnt/brick0 替换为192.168.1.151:/mnt/brick2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <1>开始替换 异常信息:volume replace-brick: failed: /data/share2 or a prefix of it is already part of a volume 说明 /mnt/brick2 曾经是一个Brick。具体解决方法 //如上,执行replcace-brick卷替换启动命令,使用start启动命令后,开始将原始Brick的数据迁移到即将需要替换的Brick上。 <2>查看是否替换完 <3>在数据迁移的过程中,可以执行abort命令终止Brick替换。 <4>在数据迁移结束之后,执行commit命令结束任务,则进行Brick替换。使用volume info命令可以查看到Brick已经被替换。 192.168.1.151:/mnt/brick0 上。
文件系统扩展属性 获取文件扩展属性
1 2 getfattr -d -m . -e hex filename getfattr -d -m "trusted.afr.*" -e hex filename
日志文件路径 相关日志,在客户端机器的/var/log/glusterfs/目录下,可根据需要查看; 如/var/log/glusterfs/brick/下是各brick创建的日志; 如/var/log/glusterfs/cmd_history.log是命令执行记录日志; 如/var/log/glusterfs/glusterd.log是glusterd守护进程日志。
Glusterfs容灾能力研究 glusterfs集群节点关机重启(单节点) 关机的机器没有设置开机自动挂载,关机重启后,挂载点消失 需手动重新挂载
1 mount /dev/sdb1 /glusterfs-data/data01/
若重新挂载后,出现关机重启后的机器的brick不正常,则在glusterfs集群节点重启数据卷即可:
1 2 gluster volume stop devops-volume gluster volume start devops-volume
然后重新进入glusterfs目录,发现在关机期间,客户端新建的文件也同步过来了,但是和同一个副本集下的另一个副本的文件扩展属性有差别,如下(关机重启的是gfs131机器): 如果属性值如上,则可用gfs132的bcv2.txt文件去恢复gfs131的bcv2.txt文件。
【说明】 如果gfs131和gfs132都正常的情况下,客户端新往这两台机器写入数据(bcv3.txt),那么bcv3.txt的扩展属性都与上图1类似,没有trusted.afr.dirty属性值,两台机器重启时扩展属性值不变。证明此种情况下,两台机器的bcv3.txt数据是正常的。
如果gfs131正常,gfs132离线,客户端新往这两台机器写入数据(bcv4.txt),那么,重启gfs132后,该文件的扩展属性与上图1类似,没有trusted.afr.dirty属性值。bcv4.txt的扩展属性在gfs131中与上图2类似,有trusted.afr.dirty属性值且为0x000000000000。 证明此种情况下,gfs131机器的bcv4.txt数据是正常的,gfs132机器的bcv4.txt数据可能是不可靠的。
glusterfs集群节点关机重启(一个副本集下的双节点) 测试关闭了gfs131和gfs132,然后在客户端创建文件
1 touch distributed-replica{1..6}.txt
出现下述问题: 此时,数据就会丢失且无法恢复,应尽量避免此情况发生。
glusterfs集群状态检查 可以通过下述命令,对glusterfs集群进行健康状态的检查: gluster volume status devops-volume gluster volume info 下图即为正常