金鱼哥RHCA回忆录:RH236配置IP故障转移--CTDB

举报
金鱼哥 发表于 2022/05/27 09:37:47 2022/05/27
【摘要】 第八章 配置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 回忆录

如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点。

如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。