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訪問卷的方式,不適用於分佈式環境,只適用於複製式。