1. 到阿里云取epel源,和官方的yum源才能安装。(本次把几个个yum源放到附件)
yuminstall glusterfs-server装完即可
启动glusterd
[[email protected]]# systemctl start glusterd
[[email protected]]# ps -ef | grep gluster
root 4732 1 0 16:22 ? 00:00:00 /usr/sbin/glusterd -p/var/run/glusterd.pid
root 4791 3789 0 16:25 pts/1 00:00:00 grep --color=auto gluster
可以看到glusterfs已经启动。
查看gluster的状态
[[email protected]]# gluster peer status
Connectionfailed. Please check if gluster daemon is operational.
可以看到以上报错了。可以用一下方法来解决此错误
[[email protected]]# rm /var/run/glusterd.socket
rm:是否删除套接字 "/var/run/glusterd.socket"?y
[[email protected]]# systemctl start glusterd
[[email protected]]# gluster peer status
Numberof Peers: 0
可以看到此时已经恢复正常
在server1上重新执行上面的步骤。(步骤略)
同样配置好阿里云的yum源,和官方提供的源。安装glusterfs-cli-3.6.0.29-2.el6.x86_64 glusterfs-libs-3.6.0.29-2.el6.x86_64 glusterfs-fuse-3.6.0.29-2.el6.x86_64
glusterfs-3.6.0.29-2.el6.x86_64这四个安装包就行
首先要为两个服务端挂载额外的磁盘并且分区挂载到一个特定位置,本次挂载到/data下
[root@server1 data]# df -HT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 21G 4.3G 16G 22% /
devtmpfs devtmpfs 509M 0 509M 0% /dev
tmpfs tmpfs 518M 0 518M 0% /dev/shm
tmpfs tmpfs 518M 14M 504M 3% /run
tmpfs tmpfs 518M 0 518M 0% /sys/fs/cgroup
/dev/sda1 xfs 312M 114M 198M 37% /boot
/dev/sdb1 xfs 5.4G 62M 5.3G 2% /data
[root@localhost data]# df -HT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 21G 4.0G 17G 20% /
devtmpfs devtmpfs 509M 0 509M 0% /dev
tmpfs tmpfs 518M 0 518M 0% /dev/shm
tmpfs tmpfs 518M 7.3M 511M 2% /run
tmpfs tmpfs 518M 0 518M 0% /sys/fs/cgroup
/dev/sda1 xfs 312M 114M 198M 37% /boot
/dev/sdb1 xfs 5.4G 61M 5.3G 2% /data
下面来让我们把两台glusterfs服务器做成一个群集
[root@server1 data]# gluster peer probe server2
查看当前状态,可以看到当前有两个节点了
[root@server1 data]# gluster peer status
Number of Peers: 1
Hostname: 192.168.2.29
Uuid: 60e180d4-dc68-4fac-a09e-225977c91340
State: Peer in Cluster (Connected)
Other names:
server2
下面创建几种类型的卷来实验一下效果
哈希卷:(不提供冗余,根据一种特殊的算法访问服务端)
[root@server1 data]# gluster volume create haxi server1:/data/haxi_b1server2:/haxi_b2
复制卷 (可以提供冗余,相当于raid1)
[root@server1 data]#gluster volume create fuzhi replica 2server1:/data/fuzhi_b1 server2:/data/fuzhi_b2
哈希复制卷
gluster volume create hxfz server1:/data/hxfz_b1server2:/data/hxfz_b1 server1:/data/hxfz_b2 server2:/data/hxfz_b2 force
条带卷
gluster volume create tiaodai stripe 2server1:/data/tiaodai_b1 server2:/data/tiaodai_b2
查看卷的信息
[root@server1 data]# gluster volume info
复制卷
Volume Name: fuzhi
Type: Replicate
Volume ID: 0bc17a47-c255-403e-b407-8ed6cdde136e
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: server1:/data/fuzhi_b1
Brick2: server2:/data/fuzhi_b2
Options Reconfigured:
performance.readdir-ahead: on
哈希卷
Volume Name: haxi
Type: Distribute
Volume ID: 02700557-aabf-46ce-b04f-94349e448d84
Status: Started
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: server1:/data/haxi_b1
Brick2: server2:/data/haxi_b2
Options Reconfigured:
performance.readdir-ahead: on
哈希复制卷
Volume Name: hxfz
Type: Distribute
Volume ID: 91647ca1-d8dc-4f9b-89f1-8bff7b5761f6
Status: Started
Number of Bricks: 4
Transport-type: tcp
Bricks:
Brick1: server1:/data/hxfz_b1
Brick2: server2:/data/hxfz_b1
Brick3: server1:/data/hxfz_b2
Brick4: server2:/data/hxfz_b2
Options Reconfigured:
performance.readdir-ahead: on
条带卷
Volume Name: tiaodai
Type: Stripe
Volume ID: faba8182-be90-4fa6-8a56-dea887f94024
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: server1:/data/tiaodai_b1
Brick2: server2:/data/tiaodai_b2
Options Reconfigured:
performance.readdir-ahead: on
首先在客户端创建挂载点
# mkdir haxi fuzhi hxfz tiaodai
进行挂载
挂载格式 mount -t (类型) servername:卷的名字 本机挂载点
mount -t glusterfs server1:/haxi haxi
mount �Ct glusterfs server1:/hxfz hxfz
mount �Ct glusterfs server1:/fuzhi fuzhi
mount �Ct glusterfs server1:/tiaodai tiaodai
使用df命令查看挂载情况
[root@server1 fuzhi]# df -HT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg_erick-lv_root ext4 20G 1.9G 17G 11% /
tmpfs tmpfs 389M 0 389M 0% /dev/shm
/dev/sda1 ext4 508M 35M 448M 8% /boot
server1:/fuzhi fuse.glusterfs 5.4G 62M 5.3G 2% /root/fuzhi
server2:/fuzhi fuse.glusterfs 5.4G 62M 5.3G 2% /root/fuzhi
server1:hxfz fuse.glusterfs 51G 8.0G 43G 16% /root/hxfz
server1:/haxi fuse.glusterfs 26G 4.0G 22G 16% /root/haxi
server1:/tiaodai fuse.glusterfs 26G 4.0G 22G 16% /root/fuzhi/tiaodai
现在可以查看当前客户端的进程
[root@server1 fuzhi]# ps -ef | grep glusterfs
root 2461 1 0Mar06 ? 00:00:02/usr/sbin/glusterfs --volfile-server=server1 --volfile-id=/fuzhi fuzhi/
root 2580 1 0Mar06 ? 00:00:02/usr/sbin/glusterfs --volfile-server=server2 --volfile-id=/fuzhi fuzhi/
root 2700 1 0Mar06 ? 00:00:02/usr/sbin/glusterfs --volfile-server=server1 --volfile-id=hxfz hxfz/
root 4672 1 006:39 ? 00:00:00/usr/sbin/glusterfs --volfile-server=server1 --volfile-id=/haxi haxi/
root 4752 1 006:45 ? 00:00:00/usr/sbin/glusterfs --volfile-server=server1 --volfile-id=/tiaodai tiaodai/
可以看到一个挂载对应这个一个进程。
测试复制卷
复制卷就相当于raid0,可以做冗余,在写文件时,把流量写成2份到不同的server端。
首先在client端创建测试文件
[root@client fuzhi]# touch {1..10}
[root@client fuzhi]# ls
1 10 2 3 4 5 6 7 8 9
分别在Server端查看文件是否产生
[root@server1 fuzhi_b1]# ls
1 10 2 3 4 5 6 7 8 9
[root@server2 fuzhi_b2]# ls
1 10 2 3 4 5 6 7 8 9
已经产生了文件。
测试更改文件内容
[root@client fuzhi]# echo"test">1
[root@client fuzhi]# cat 1
Test
[root@server2 fuzhi_b2]# cat 1
Test
[root@server1 fuzhi_b1]# cat 1
Test
测试删除
[root@client fuzhi]# rm * -f
[root@client fuzhi]# ll
total 0
[root@server1 fuzhi_b1]# ll
总用量 0
[root@server2 fuzhi_b2]# ll
总用量 0
可以看到现在两个server端已经没有数据
下面模拟一下当其中一个server宕机后的是怎么恢复的
[root@client fuzhi]# touch{1..10}
[root@client fuzhi]# ls
10 2 3 4 5 6 7 8 9
现在server1和server2应该已经同步了数据
现在模拟server1的网络突然断开的情况
[root@server1fuzhi_b1]# systemctl stop network
现在我们继续用客户端进行写和删除操作
[root@client fuzhi]# touch{10..20}
[root@client fuzhi]# rm -f{1..10}
[root@client fuzhi]# ls
11 12 13 14 15 16 17 18 19 20
现在我们到server2上查看数据
[root@server2 fuzhi_b2]# ls
11 12 13 14 15 16 17 18 19 20
此时我们能看到server2 已经同步数据了,由于server1网络已经物理断开了,所以数据应该不会同步
下面我们对server1进行恢复
[root@server1 fuzhi_b1]# glustervolume heal fuzhi
下面在查看我们的数据
[root@server1 fuzhi_b1]# ls
11 12 13 14 15 16 17 18 19 20
发现我们的数据已经同步回来了!
模拟磁盘损坏并由server3顶替server1的位置
查看当前server1 server2 和client的数据
[root@server1 fuzhi_b1]# ls
11 12 13 14 15 16 17 18 19 20
[root@server2 fuzhi_b2]# ls
11 12 13 14 15 16 17 18 19 20
[root@client fuzhi]# ls
11 12 13 14 15 16 17 18 19 20
查看当前复制分区的信息
[root@server2 fuzhi_b2]# gluster volume info fuzhi
Volume Name: fuzhi
Type: Replicate
Volume ID: 0bc17a47-c255-403e-b407-8ed6cdde136e
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: server1:/data/fuzhi_b1
Brick2: server2:/data/fuzhi_b2
Options Reconfigured:
features.inode-quota: on
features.quota: on
performance.readdir-ahead: on
可以看到此时的数据是一样的,现在我们把server1的sdb盘卸载掉,然后用server3来顶替server1工作。
移除server1的sdb后,现在可以看到server1的/data目录以及损坏
[root@server1 data]# ls
ls: 无法打开目录.: 输入/输出错误
此时我们到客户端更新目录的内容
[root@client fuzhi]# touch {100..110}
[root@client fuzhi]# ls
100 101 102 103 104 105 106 107 108 109 11 110 12 13 14 15 16 17 18 19 20
[root@server2 fuzhi_b2]# ls
100 102 104 106 108 11 12 14 16 18 20
101 103 105 107 109 110 13 15 17 19
替换步骤:
1. 把server1的brick移除
[root@server2fuzhi_b2]# gluster volume remove-brick fuzhi replica 1 server1:/data/fuzhi_b1force
查看当前fuzhi卷的信息,现在可以看到只有server2的卷了
Removingbrick(s) can result in data loss. Do you want to Continue? (y/n) y
volume remove-brick commitforce: success
[root@server2 fuzhi_b2]#gluster volume info fuzhi
Volume Name: fuzhi
Type: Distribute
Volume ID:0bc17a47-c255-403e-b407-8ed6cdde136e
Status: Started
Number ofBricks: 1
Transport-type: tcp
Bricks:
Brick1:server2:/data/fuzhi_b2
Options Reconfigured:
features.inode-quota: on
features.quota: on
performance.readdir-ahead:on
2. 把server3的brick添加到复制卷
[root@server2 fuzhi_b2]# gluster volume add-brickfuzhi replica 2 server3:/data/fuzhi_b3force
volume add-brick: success
注意现在这个replica后面跟的数量一定是大于1的
查看当前fuzhi卷的信息,可以发现已经把
[root@server2 fuzhi_b2]# gluster volume info fuzhi
Volume Name: fuzhi
Type: Replicate
Volume ID: 0bc17a47-c255-403e-b407-8ed6cdde136e
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: server2:/data/fuzhi_b2
Brick2: server3:/data/fuzhi_b3
Options Reconfigured:
features.inode-quota: on
features.quota: on
performance.readdir-ahead: on
现在执行节点健康检查
[root@server2 fuzhi_b2]# gluster volume heal fuzhi
现在可以看到server3上的数据已经同步过来了
[root@server3 fuzhi_b3]# ls
0 101 103 105 107 109 110 13 15 17 19
100 102 104 106 108 11 12 14 16 18 20
但是这样恢复有个问题,那就是server3不会自动同步数据必须执行
gluster volume heal fuzhi才会同步
(注:替换磁盘的方法是本人自己想法,可能不正确,欢迎大家纠正!)
glusterfs的常用命令
gluster peer
帮助 gluster volume create help
本次把sdb1挂在到了/date/下
卷的类型
哈希卷 gluster volume create haxi server1:/data/haxi_b1 server2:/data/haxi_b2 force
复制卷 gluster volume create fuzhi replica 2 server1:/data/fuzhi_b1 server2:/data/fuzhi_b2
条带卷 gluster volume create tiaodai stripe 2 server1:/data/tiaodai_b1 server2:/data/tiaodai_b2
哈希条带复制卷 gluster volume create hxfz server1:/data/hxfz_b1 server2:/data/hxfz_b1 server1:/data/hxfz_b2 server2:/data/hxfz_b2 force
增加节点
gluster peer probe ip/主机名
删除节点
gluster peer detach ip/主机名
查看节点状态
gluster peer status
为哈希卷扩容
gluste volume add-brick 卷的名字 servername:/brick的位置
为哈希卷缩小空间
gluster volume remove-brick 卷的名字 servername:/brik的位置 start
gluster volume remove-brick 卷的名字 servername:/brick的位置 commit -->此时会丢失数据
为复制卷扩容
gluster volume add=brick 卷的名字 replica 2 servername:/brick的位置 servername:/brick的位置 start
为复制卷缩小空间
gluster volume remove-brick 卷的名字 replica 2 servername:/brick的位置 servername:/brick的位置 start
gluster volume remove-brick 卷的名字 servername:/brick的位置 servername:/brick的位置 commit
负载均衡
命令格式
volume rebalance 卷的名字 fix-layout start
数据监控检测以及修复
gluster volume heal 卷的名称
磁盘配额
gluster volume quota 卷的名字 limit-usage 路径 限额大小