在Gluster上使用CTDB和Samba
单独的使用Samba挂载gluster volume并不能实现High Availability,有了CTDB就可以解决这个问题了.
1 准备环境
我已经提前准备好了一个gluster环境,创建好了一个volume repvol,并且此volume已经配置为可使用samba client挂载,有关详细配置请参考我前面的博文。
[root@node02 /]# gluster pool listUUID Hostname Statee967c77f-ff39-4927-9645-606294d42751 node01.lab.example.com Connected 98ef6fd9-9fa1-4005-b8ec-5480d6c04f46 localhost Connected
[root@node02 /]# gluster volume listrepvol
[root@node02 ~]# smbclient -L node01.lab.example.com -U%
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.4.4]
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
gluster-repvol Disk For samba share of volume repvol
IPC$ IPC IPC Service (Samba 4.4.4)
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.4.4]
Server Comment
--------- -------
Workgroup Master
--------- -------
[root@node02 mnt]# mount -t cifs -o username=smbuser,password=redhat //node01.lab.example.com/gluster-repvol /mnt/samba-test/
[root@node02 /]# df -h | grep samba//node01.lab.example.com/gluster-repvol 2.0G 33M 2.0G 2% /mnt/samba-test
从上面可以看到,我这里有两个gluster server,依次为
192.168.133.144 node01.lab.example.com
192.168.133.149 node02.lab.example.com
而挂载的时候,我使用的是//node01.lab.example.com/gluster-repvol,这样有一个问题,虽然我这里的gluster volume repvol是一个2副本的复制卷,但一旦node01.lab.example.com出现故障,虽然node02.lab.example.com上还保留一份数据在,但是却不能直接被client使用,不能够实现自动切换。
2 在两台gluster server上安装配置ctdb
2.1使用yum安装ctdb
[root@node01 ~]# yum install -y ctdb
为ctdb放开防火墙限制
[root@node01 ~]# firewall-cmd --add-port=4379/tcp
2.2更新volume设置
[root@node01 ~]# gluster volume stop repvol[root@node01 post]# cd /var/lib/glusterd/hooks/1/start/post[root@node01 post]# vi S29CTDBsetup.sh
META="all" 修改前
META="ctdbmeta" 修改后
2.3更新Samba配置
编辑/etc/samba/smb.conf文件,并在[global]选项下添加 clustering=yes
[root@node01 post]# cat /etc/samba/smb.conf...[global] clustering = yes....
2.4start volume,此时会发现volume 会自动挂载到server的/gluster/lock 下
[root@node01 post]# gluster volume start repvolvolume start: repvol: success
[root@node01 post]# df -h | grep repvolnode01.lab.example.com:/repvol.tcp 2.0G 33M 2.0G 2% /gluster/lock
2.5添加/etc/ctdb/nodes 和 /etc/ctdb/public_address文件
[root@node01 post]# vi /etc/ctdb/nodes 192.168.133.144192.168.133.149
###这里的ip为gluster server节点的ip
[root@node01 post]# vi /etc/ctdb/public_addresses 192.168.133.100/24 ens33
###这里的ip是浮动ip, ens33为interface name
2.6启动并验证ctdb service
[root@node01 post]# systemctl start ctdb
[root@node01 post]# ctdb pnnPNN:0
[root@node01 post]# ctdb ping -n allresponse from 0 time=0.000049 sec (2 clients)response from 1 time=0.008014 sec (1 clients)
[root@node01 post]# ctdb statusNumber of nodes:2pnn:0 192.168.133.144 OK (THIS NODE)pnn:1 192.168.133.149 OKGeneration:2009096591Size:2hash:0 lmaster:0hash:1 lmaster:1Recovery mode:RECOVERY (1)Recovery master:1[root@node01 post]# ctdb ipPublic IPs on node 0192.168.133.100 0
[root@node01 post]# ctdb ip info 192.168.133.100Public IPs on node 0192.168.133.100 0
2.7使用浮动ip挂载gluster volume
[root@node02 post]# mount -t cifs -o username=smbuser,password=redhat //192.168.133.100/gluster-repvol /mnt/samba-test/