金鱼哥RHCA回忆录:RH236配置IP故障转移--CTDB
本章节介绍如何配置IP故障转移。本章节学习CTDB,主要是为了解决NFS和Samba的高可用问题。
🎹 个人简介:大家好,我是 金鱼哥,CSDN运维领域新星创作者,华为云·云享专家,阿里云社区·专家博主
📚个人资质:CCNA、HCNP、CSNA(网络分析师),软考初级、中级网络工程师、RHCSA、RHCE、RHCA、RHCI、ITIL😜
💬格言:努力不一定成功,但要想成功就必须努力🔥
高可用集群NAS(此小节摘自刘爱贵教授文章)
诸如Glusterfs、Lustre、Ceph等集群文件系统,提供了统一命名空间、高性能、高可用、高扩展的非结构化数据解决方案。出于性能方面考虑,集群文件系统都设计了私有协议的客户端,通常是基于VFS或FUSE接口实现的与POSIX标准兼容的接口,但往往仅提供Linux/Unix系统客户端软件。对于Linux/Unix系统来说,只需要安装集群文件系统客户端内核模块或软件即可;而对于Windows/Mac等系统而言,因为没有客户端软件可用,就没法访问集群文件系统了。另外,一些特殊场合下,用户不希望在Linux/Unix/Windows/Mac系统上安装客户端软件,而是希望通过标准协议访问集群文件系统。因此,我们需要以集群文件系统为底层基础核心,构建使用标准协议访问的存储服务,目前主要就是使用NFS/CIFS标准协议的NAS。传统NAS系统具有单点性能瓶颈、扩展性差、应用规模和高负载支持有限等不足,无法满足大数据应用需求。集群NAS是一种横向扩展(Scale-out)存储架构,它协同多个节点(即通常所称的NAS机头)提供高性能、高可用或高负载均衡的NAS(NFS/CIFS)服务,具有容量和性能线性扩展的优势。
这里我们基于CTDB实现高可用集群NAS。CTDB是一种轻量级的集群数据库实现,基于它可以实现很多应用集群,目前CTDB支持Samba, NFS, HTTPD, VSFTPD, ISCSI, WINBIND应用,集群共享数据存储支持GPFS,GFS(2),Glusterfs, Luster, OCFS(2)。CTDB本身不是HA解决方案,但与集群文件系统相结合,它可以提供一种简便高效的HA集群解决方案。集群配置两组IP,Private IP用于heartbeat和集群内部通信,Public IP用于提供外部服务访问。Public IP动态在所有集群节点上分配,当有节点发生故障,CTDB将调度其他可用节点接管其原先分配的Public IP,故障节点恢复后,漂移的Public IP会重新被接管。这个过程对客户端是透明的,保证应用不会中断,也就是我们这里所说的高可用HA。
CTDB
cluster trivial database
针对客户端nfs、samba挂载时,实现IP failover,比如:挂载时指定的主机宕机了,实现自动切换。
glusterfs自身已经实现,所以不需要CTDB,CTDB是为了解决NFS和Samba的高可用问题。
注意:CTDB,要求所有节点的的主机名必须能解析
IP Failover原理类似于双网卡的bond、应用的负载IP。
1)通过ctdb实现vip访问卷
2)vip访问卷的方式:不适合分布式,只适用于复制式
3)在分布式环境中测试,同时创建多个文件时,由于glusterfs volume中故障节点的目录未删除,依然会往故障节点分布数据,然而节点已经故障无法写入,这时会报错,数据丢失。
配置ctdb
1. 装包
# yum install -y ctdb
#在所有节点安装ctdb
#装完包,配置文件在:/etc/ctdb/
2. 新建一个复制卷
作用:配置一个100M左右的小型复制卷,在卷内会生成一个0字节的锁文件,对虚拟IP进行锁定
# gluster volume create ctdb replica 3 \
node1:/brick/brick8/brick \
node2:/brick/brick8/brick \
node3:/brick/brick8/brick
#注意:这里先不要启动这个volume
3. 修改脚本
在这个volume启动之前,关闭之后,需要分别执行以下两个脚本:
/var/lib/glusterd/hooks/1/start/post/S29CTDBsetup.sh
/var/lib/glusterd/hooks/1/stop/pre/S29CTDB-teardown.sh
需要在所有节点作以下更改:
# vim /var/lib/glusterd/hooks/1/start/post/S29CTDBsetup.sh
META=ctdb # 根据情况也可以写all,所有的卷
#默认,这个脚本,会在所有volume启动之前执行,这里指定只有ctdb这个volume启动的之前才执行
脚本执行的操作:
1)先挂载META这个变量指定的volume到本地的/gluster/lock(默认)目录
2)再在/etc/fstab写自动挂载条目
3)最后设置开机自启ctdb
# vim /var/lib/glusterd/hooks/1/stop/pre/S29CTDB-teardown.sh
META=ctdb # 根据情况也可以写all,所有的卷
4. 启动volume
# gluster volume start ctdb
#启动volume
5. 确认挂载
启动之后,在所有相关节点,确认上面start脚本所执行的动作已完成
# df -Th
node1:ctdb fuse.glusterfs 1021M 33M 988M 4% /gluster/lock
cat /etc/fstab
node1:/ctdb /gluster/lock glusterfs _netdev,defaults,transport=tcp,xlator-option=*client*.ping-timeout=10 0 0
注意:
1.必须所有相关节点都已经挂载,才可实现ip failover
2.如果没有挂载,在有问题节点检查上面的配置,然后先stop volume,再start volume
6. 配置虚拟IP
在所有使用NFS服务的节点创建/etc/ctdb/nodes文件,并在里面添加这些节点的IP到这个文件
# vim /etc/ctdb/nodes
192.168.1.100
192.168.1.101
192.168.1.102
192.168.1.103
# scp /etc/ctdb/nodes root@node2:/etc/ctdb/
# scp /etc/ctdb/nodes root@node3:/etc/ctdb/
# scp /etc/ctdb/nodes root@node4:/etc/ctdb/
在所有需要做IP failover的NFS节点,创建/etc/ctdb/public_addresses这个文件,并在里面添加虚拟IP到这个文件,并指定这个IP附加到哪个网卡
# vim /etc/ctdb/public_addresses
192.168.1.20/24 eth0
# scp /etc/ctdb/public_addresses root@node2:/etc/ctdb
# scp /etc/ctdb/public_addresses root@node3:/etc/ctdb
# scp /etc/ctdb/public_addresses root@node4:/etc/ctdb
7. 配置Samba
CTDB会管理samba服务,所以需要提前配置samba的配置文档,亦无需启动samba,此操作需要配置在所有节点中配置(若是先启动了ctdb,则创建密码的操作只需要在一个节点上执行,因为ctdb将此更改传播到所有节点),配置过程如下:
# useradd samba
# pdbedit -a -u samba
或者 smbpasswd -a samba
# vim /etc/samba/smb.conf
[global]
clustering=yes
idmap backend = tdb2
private dir = /gluster/lock
# systemctl restart smb
8. 配置glusterfs
修改卷属性:
# gluster volume set ctdb stat-prefetch off
# gluster volume set ctdb server.allow-insecure on
# gluster volume set ctdb storage.batch-fsync-delay-usec 0
修改glusterfs服务属性:
# vim /etc/glusterfs/glusterd.vol
option rpc-auth-allow-insecure on
修改完后重启服务:
# systemctl restart glusterd
9. 配置ctdb(需要时)
在/etc/sysconfig/ctdb增加如下配置:
# vim /etc/sysconfig/ctdb
CTDB_RECOVERY_LOCK=/gluster/lock/lockfile
CTDB_PUBLIC_INTERFACE=eth0
CTDB_PUBLIC_ADDRESSES=/etc/ctdb/public_addresses
CTDB_MANAGES_SAMBA=yes
CTDB_SAMBA_SKIP_SHARE_CHECK=yes
CTDB_MANAGES_NFS=no
CTDB_MANAGES_WINBIND=no
CTDB_NODES=/etc/ctdb/nodes
CTDB_DEBUGLEVEL=ERR
若需要开通NFS服务,设置CTDB_MANAGES_NFS=yes即可
10. 启动ctdb服务
在所有节点启动ctdb服务
# systemctl start ctdb
客户端访问
注意:这时应该用虚拟IP挂载
NFS:
# mount -t nfs 192.168.1.20:/vol1 /mnt/vol1
Samba:
# yum install -y samba-client cifs-utils
# smbclient -L 192.168.1.20 -U samba
# mount -t cifs -o username=samba,password=redhat //192.168.1.20/gluster-vol1 /mnt/vol1
查看ctdb状态
可以使用命令查看CTDB集群的状态:
# ctdb status
# ctdb ip
# ctdb ping -n all
课本练习
[root@workstation ~]# lab ctdb setup
Setting up for lab exercise work:
• Testing if all hosts are reachable.......................... SUCCESS
• Adding glusterfs to runtime firewall on servera............. SUCCESS
• Adding glusterfs to permanent firewall on servera........... SUCCESS
• Adding glusterfs to runtime firewall on serverb............. SUCCESS
• Adding glusterfs to permanent firewall on serverb........... SUCCESS
• Adding servera to trusted storage pool...................... SUCCESS
• Adding serverb to trusted storage pool...................... SUCCESS
• Ensuring thin LVM pool vg_bricks/thinpool exists on servera. SUCCESS
…………
1. 在servera和serverb上安装所需的软件,并在这些机器上的防火墙上打开此设置所需的任何端口。
# yum -y install samba ctdb
# firewall-cmd --add-service=samba --permanent
# firewall-cmd --add-port=4379/tcp --permanent
# firewall-cmd --reload
2. 停止ctdbmeta卷,然后在servera和serverb上设置相关的启动和停止触发,以便为CTDB使用ctdbmeta卷。还为两个节点上的Samba启用集群。
[root@servera ~]# gluster volume stop ctdbmeta
Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y
volume stop: ctdbmeta: success
vim /var/lib/glusterd/hooks/1/start/post/S29CTDBsetup.sh
# $META is the volume that will be used by CTDB as a shared filesystem.
# It is not desirable to use this volume for storing 'data' as well.
# META is set to 'all' (viz. a keyword and hence not a legal volume name)
# to prevent the script from running for volumes it was not intended.
# User needs to set META to the volume that serves CTDB lockfile.
META=ctdbmeta
vim /var/lib/glusterd/hooks/1/stop/pre/S29CTDB-teardown.sh
# $META is the volume that will be used by CTDB as a shared filesystem.
# It is not desirable to use this volume for storing 'data' as well.
# META is set to 'all' (viz. a keyword and hence not a legal volume name)
# to prevent the script from running for volumes it was not intended.
# User needs to set META to the volume that serves CTDB lockfile.
META=ctdbmeta
添加clustering = yes 配置
# grep clustering -C 2 /etc/samba/smb.conf
[global]
clustering=yes
#------------------------ AIO Settings ------------------------
#
3. 启动ctdbmeta卷,然后配置CTDB以使用servera和serverb系统进行IP故障转移,使用172.25.250.15/24作为浮动IP地址。
[root@servera ~]# gluster volume start ctdbmeta
volume start: ctdbmeta: success
# vim /etc/ctdb/nodes
# cat /etc/ctdb/nodes
172.25.250.10
172.25.250.11
# vim /etc/ctdb/public_addresses
# cat /etc/ctdb/public_addresses
172.25.250.15/24 eth0
# systemctl enable ctdb
# systemctl start ctdb
4. 确保使用Samba导出custdata卷。记住为smbuser用户设置一个redhat Samba密码。
将smbuser的samba密码设置为redhat。因为ctdb将此更改传播到所有节点,所以此步骤只需要在单个主机上执行。
# smbpasswd -a smbuser
New SMB password: redhat
Retype new SMB password: redhat
Added user smbuser.
# gluster volume set custdata stat-prefetch off
# gluster volume set custdata server.allow-insecure on
# gluster volume set custdata storage.batch-fsync-delay-usec 0
servera和serverb都需要更改:
# vim /etc/glusterfs/glusterd.vol
option rpc-auth-allow-insecure on
# systemctl restart glusterd
[root@servera ~]# gluster volume stop custdata
Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y
volume stop: custdata: success
[root@servera ~]# gluster volume start custdata
volume start: custdata: success
5. 在您的workstation系统上,使用Samba通过浮动IP地址在/mnt/custdata上持久地挂载custdata卷。
[root@workstation ~]# mkdir /mnt/custdata
[root@workstation ~]# echo "//172.25.250.15/gluster-custdata /mnt/custdata cifs user=smbuser,pass=redhat 0 0" >> /etc/fstab
[root@workstation ~]# mount -a
[root@workstation ~]# df -TH
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 xfs 11G 3.3G 7.6G 31% /
devtmpfs devtmpfs 946M 0 946M 0% /dev
tmpfs tmpfs 965M 87k 965M 1% /dev/shm
tmpfs tmpfs 965M 18M 948M 2% /run
tmpfs tmpfs 965M 0 965M 0% /sys/fs/cgroup
tmpfs tmpfs 193M 17k 193M 1% /run/user/42
tmpfs tmpfs 193M 0 193M 0% /run/user/0
//172.25.250.15/gluster-custdata cifs 2.2G 35M 2.2G 2% /mnt/custdata
6. 模拟故障。
通过在/mnt/custdata中创建一些文件来测试你的IP故障转移,关闭当前分配了浮动IP的主机,然后在/mnt/custdata中创建更多的文件。不要忘记启动你关闭电源的机器。
[root@workstation ~]# touch /mnt/custdata/file{00..49}
[root@servera ~]# ctdb ip -n all
Public IPs on ALL nodes
172.25.250.15 1
[root@servera ~]# ctdb status
Number of nodes:2
pnn:0 172.25.250.10 OK (THIS NODE)
pnn:1 172.25.250.11 OK
Generation:1156537640
Size:2
hash:0 lmaster:0
hash:1 lmaster:1
Recovery mode:NORMAL (0)
Recovery master:0
[root@serverb ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:00:fa:0b brd ff:ff:ff:ff:ff:ff
inet 172.25.250.11/24 brd 172.25.250.255 scope global eth0
valid_lft forever preferred_lft forever
inet 172.25.250.15/24 brd 172.25.250.255 scope global secondary eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe00:fa0b/64 scope link
valid_lft forever preferred_lft forever
3: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN
link/ether f2:1a:f8:73:6d:cf brd ff:ff:ff:ff:ff:ff
[root@serverb ~]# init 0
Connection to serverb closed by remote host.
Connection to serverb closed.
[root@workstation ~]# touch /mnt/custdata/file{50..99}
[root@foundation0 ~]# rht-vmctl start serverb
Starting serverb.
7. 查看日志。
# tail -f /var/log/log.ctdb -n 1000
…………
2020/12/05 21:19:36.151950 [recoverd: 3641]: Resetting ban count to 0 for all nodes
2020/12/05 21:19:49.906734 [ 3491]: 50.samba: Redirecting to /bin/systemctl start smb.service
2020/12/05 21:19:50.179897 [recoverd: 3641]: Trigger takeoverrun
2020/12/05 21:19:52.352823 [ 3491]: Node became HEALTHY. Ask recovery master 0 to perform ip reallocation
2020/12/05 21:37:51.497398 [recoverd: 3641]: ../ctdb/server/ctdb_recoverd.c:3973 The vnnmap count is different from the number of active lmaster nodes: 2 vs 1
2020/12/05 21:37:51.497495 [recoverd: 3641]: Taking out recovery lock from recovery daemon
2020/12/05 21:37:51.497500 [recoverd: 3641]: Take the recovery lock
2020/12/05 21:38:06.547795 [ 3491]: High RECLOCK latency 15.050065s for operation recd reclock
2020/12/05 21:38:06.551899 [ 3491]: Freeze priority 1
…………
8. 脚本评分
[root@workstation ~]# lab ctdb grade
总结
-
介绍如何配置CTDB。
-
介绍如何对NFS和Samba进行客户端配置。
RHCA认证需要经历5门的学习与考试,还是需要花不少时间去学习与备考的,好好加油,可以噶🤪。
以上就是【金鱼哥】对 第八章 配置IP故障转移–CTDB 的简述和讲解。希望能对看到此文章的小伙伴有所帮助。
💾红帽认证专栏系列:
RHCSA专栏:戏说 RHCSA 认证
RHCE专栏:戏说 RHCE 认证
此文章收录在RHCA专栏:RHCA 回忆录
如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点。
如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!
- 点赞
- 收藏
- 关注作者
评论(0)