管理两节点集群
重新搭建一个两节点集群。
这个参数是默认开启的。
因为是两节点集群,不是用50%+1 的方式仲裁的,1 票就能存活,waitforall 参数默认开启。
为避免fence loop 现象,可以设置延迟fence,时间应略大于节点启动时间。
RHEL8.3 及之后的版本:
配置和管理仲裁设备
这是写磁盘的方式,在共享存储上划分一片空间,自定义一个试探程序,把节点的状态写入到磁盘,先写入的节点为优胜的一方,节点本身一票,仲裁节点也算作一票,共两票,另外一台节点则被fence。
还有一种方式是,不需要仲裁节点,NodeID 较低的优先存活。
两节点同时down 集群网络,彼此认为对方故障:
现在nodea 工作,nodeb 被隔离,因为nodea 的NodeID 更小,得到了仲裁节点的一票。
锁机制
nfs 是共享型文件系统,自带锁机制,如果是ext4、xfs 这种本地型文件系统,你在一台节点上进行写操作,另外一台节点是没有感知的。
RHEL 6 上,在启动nfs 服务的时候,一同将nfslock 服务启动了:
现在把nodea 连接到nfs 存储的网络down 掉,df 已经查询不到这个挂载点了,但是集群没有感知,业务仍然运行在nodea 上。
集群不会检测节点到存储的网络,只会检测节点之间的网络,如果要实现节点到存储的高可用,就需要用到多路径技术。
iscsi
但是这个文件系统是ext4,属于单机型文件系统,不带锁机制,虽然可以读取到文件名,但是多个节点同时读写一个文件时数据状态不同步。
这是通过集群控制文件系统的挂载,集群正常的时候可以保证文件系统只在其中一个节点上挂载,如果集群脑裂,文件系统又不带锁机制,轻则文件损坏,重则文件系统故障,数据的完整性得不到保障。
iscsi 客户端如果设置了服务自启动,只要连接过一次,重启以后会自动连接。
target 端的信息保存在这个文件夹。
有些时候我们不希望它自动连接,比如存储端发生故障的时候:
这样可以logout,但是这是临时的。
只要服务一重启,它甚至自动把多路径自动连接了。
这样就是永久删除。
客户端这个配置文件的这些参数需要注意一下。
连接了第二条链路。
这两块磁盘是一样的。
这条命令可以查看磁盘的序列号。
那么这样集群就存在问题,创建文件系统资源的时候该指定哪一块磁盘呢?如果指定其中一块磁盘,在读写数据的时候,只走其中一条路径吗?那另外一条链路的带宽岂不是浪费掉了!
要解决上面的问题,需要安装多路径软件。
有些厂商的多路径软件要付费使用,而且是对节点授权。
能用厂商的多路径尽量用厂商提供的,它更了解自家的存储产品。
如果无法使用厂商的,就用开源版本的通用型多路径软件。
默认用的是第二种算法——最少服务时间,走延迟最低的链路;
轮循算法的优势在于不怎么消耗cpu 资源;
最少队列数算法是比较折中的方案。
multipath 默认是没有配置文件的,当你执行enable 以后,它自动生成了一个配置文件:
具体怎么写这个配置文件,查看帮助:
使用下面这条命令查看默认配置:
multipath -t
你会发现这条命令的执行结果比配置文件多得多,很多默认的配置没有写进配置文件而已。
你可以这样来修改。
这一段是黑名单列表,多路径软件不会合并这些设备。
这一段空白,是黑名单列表中的例外。
针对不同的设备,给它不同的算法。
这些段落有优先级,multipaths 优先级最高。
man multipath.conf
这个参数的意思是,路径检测的方式是从这个路径读一个io,如果读取不到,就判断这个路径出现了故障。
当路径出现故障时,切换到另外的路径上。
我们经常看到设备名是/dev/mapper/xxx
其实是用到的device mapper 的技术,这个设备并不真实存在,是通过某种规则把它合成的,常见的典型的例子就是逻辑卷。
下面来演示一下安装厂商的多路径软件: