glusterfs高可用--IP Failover
IP Failover原理类似于双网卡的bond、应用的负载IP。
1)通过ctdb实现vip访问卷
2)vip访问卷的方式:不适合分布式,只适用于复制式
3)在分布式环境中测试,同时创建多个文件时,
由于glusterfs volume中故障节点的目录未删除,依然会往故障节点分布数据,
然而节点已经故障无法写入,这时会报错,数据丢失。
上草图~
这里我们使用CTDB(cluster trivial database)实现---属于samba里面的东西
1、安装CTDB包(node1、node2都安装)
# yum -y install ctdb
2、配置CTDB(指定给哪个卷配置CTDB)
# cd /var/lib/glusterd/hooks/1/start/post/
# vim S29CTDBsetup.sh
META="v1" #也可以写all,所有的卷
# cd /var/lib/glusterd/hooks/1/stop/pre
# vim S29CTDB-teardown.sh
META="v1" #也可以写all,所有的卷
3、在/etc/ctdb目录下创建配置文件
nodes:组成卷的所有节点IP地址
public_addresses:设置VIP地址,指定关联节点的网卡
# cd /etc/ctdb
# echo 192.168.122.101 > nodes
# echo 192.168.122.102 >> nodes
# echo "192.168.122.210/24 eth0" > public_addresses #指定VIP地址;关联节点上的哪个网卡
# systemctl start ctdb
# systemctl enable ctdb
日志文件:/var/log/log.ctdb
节点1上查看VIP信息
# ctdb -v ip
Public IPs on node 0
192.168.122.210 node[0] active[eth0] available[eth0] configured[eth0]
节点2上查看VIP信息
# ctdb -v ip
Public IPs on node 1
192.168.122.210 node[0] active[] available[eth0] configured[eth0]
4、安装samba包
# yum -y install samba
# vim /etc/samba/smb.conf
workgroup = MYGROUP
server string = Samba Server Version %v
clustering = yes #增加这行
5、停止卷
# gluster volume stop v1
6、关闭stat-prefetch预取功能
# gluster volume set v1 stat-prefetch off
7、开启非安全访问模式
# gluster volume set v1 server.allow-insecure on
8、启动samba、设置开机自启
# systemctl restart smb
# systemctl enable smb
9、启动卷
# gluster volume start v1
# gluster volume info v1
Volume Name: v1
Type: Distribute
Status: Started
Brick1: node1:/xx/data
Brick2: node2:/yy/data
Options Reconfigured:
server.allow-insecure: on
performance.stat-prefetch: off
performance.readdir-ahead: on
10、客户端挂载测试
# showmount -e 192.168.122.210
Export list for 192.168.122.210:
/v1 *
# mount 192.168.122.210:/v1 /mnt
# touch /mnt/aa{1..10}
节点1上查看
# ls /xx/data/
aa1 aa3 aa4 aa8
节点2上查看
# ls /yy/data/
aa10 aa2 aa5 aa6 aa7 aa9 lockfile
11、模拟node1故障
# shutdown -h now
注意:节点故障时,会有个切换过程,会出现闪断
节点2上查看VIP信息
# ctdb -v ip
Public IPs on node 1
192.168.122.210 node[1] active[eth0] available[eth0] configured[eth0]
节点2上查看数据(node1中的数据不会迁移,数据丢失)
# ls /yy/data/
aa10 aa2 aa5 aa6 aa7 aa9 lockfile
客户端测试:继续写入(创建单个文件时正常,同时创建多个文件时报错)
# touch /mnt/bb
# touch /mnt/cc
# touch /mnt/dd{1..10} #部分文件写入报错,丢失
touch: 无法创建"/mnt/dd3": 输入/输出错误
touch: 无法创建"/mnt/dd5": 输入/输出错误
touch: 无法创建"/mnt/dd6": 输入/输出错误
touch: 无法创建"/mnt/dd7": 输入/输出错误
结论:
由于gluster volume未删除故障节点的目录,
在多个文件同时写入时,依然会使用分布的方式,
而此时故障节点的目录已经不能访问了,所以分配给故障节点的文件报错,丢失。
这种vip访问卷的方式,不适用于分布式环境,只适用于复制式。