- 测试环境
- 配置ISCSI
- 部署集群服务
- 配置集群服务
- 配置STONITH(Shoot The Other Node In The Head)
- 部署DLM
- 创建集群存储
- 配置集群存储
- 集群控制
- note
测试环境
DSM 7.2.2 update4
Oracle Linux9.5
配置ISCSI
创建ISCSI LUN
在NAS创建一个新的target:

如果已有LUN可以直接映射,这边选择创建一个新的LUN:

这边创建的是带空间回收功能的thin LUN:

由于是集群使用,这边需要编辑target,启用多重联机功能:

配置iscsi客户端
以下命令需要在所有节点运行
安装iscsi客户端:
yum -y install iscsi-initiator-utils
修改配置文件/etc/iscsi/iscsid.conf
vi /etc/iscsi/iscsid.conf
修改以下配置,禁止自动发现的iqn自动连接,防止错误挂载其他target导致数据异常。
node.startup = manual

使用以下命令发现server的所有target(慎用,操作后会吧本地已有的连接配置清空):
iscsiadm -m discovery -t st -p 10.61.21.202
搜索需要挂载的target:
iscsiadm -m node | grep Target-8

使用以下命令挂载:
iscsiadm -m node -T iqn.2000-01.com.synology:DS1621bk.Target-8.2e42fdcccaf -p 10.61.21.202 -l
修改配置为开机自动连接:
iscsiadm -m node -T iqn.2000-01.com.synology:DS1621bk.Target-8.2e42fdcccaf -p 10.61.21.202 -o update -n node.startup -v automatic

绑定udev
以下命令需要在所有节点运行
查看当前装载的卷位置:
iscsiadm -m session -P 3
查看设备ID:
/lib/udev/scsi_id -g -u -d /dev/sdb

添加配置文件(RESULT需要填写设备ID):
vi /etc/udev/rules.d/scsi.rules
KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/lib/udev/scsi_id -g -u -d /dev/$name",RESULT=="360014058343f9badfd81d40ceda7f6d7",SYMLINK+="GFSdata1",OWNER="root",GROUP="root",MODE="0660"
加载配置:
/sbin/udevadm trigger --type=devices --action=change
udevadm control --reload-rules

部署集群服务
以下命令需要在所有节点运行
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
修改hostname
hostnamectl set-hostname cnnode1.synohyperv.local
修改hosts
vi /etc/hosts
10.61.20.230 cnnode1.synohyperv.local cnnode1
10.61.20.225 cnnode2.synohyperv.local cnnode2
10.61.21.45 cnnode3.synohyperv.local cnnode3
安装NTP服务
yum install chrony -y
启用NTP服务
systemctl enable chronyd
修改NTP对时服务器
vi /etc/chrony.conf
重启NTP服务
systemctl restart chronyd
检查同步状态
chronyc sources -v
启用addons 源
dnf config-manager --enable ol9_addons
安装集群服务
yum install -y pcs pacemaker corosync fence-agents-all
启用集群服务
systemctl start pcsd
systemctl enable pcsd
设置集群用户密码
passwd hacluster
配置集群服务
以下命令只要在一台节点运行
验证集群
pcs host auth cnnode1 cnnode2 cnnode3 -u hacluster -p synology

启用集群
pcs cluster setup cluster0 cnnode1 cnnode2 cnnode3

pcs cluster start --all
pcs cluster enable --all

查看集群状态
pcs cluster status

调整集群策略:
活跃节点数小于一半时,保持当前资源运行状态,不进行资源迁移或停止。
pcs property set no-quorum-policy=freeze
当节点重启时,保留资源分配记录,节点回来后资源会回到原来的地方。
pcs property set shutdown-lock=true
多个节点同时出现问题时,允许并行 fencing,加快恢复速度。
pcs property set concurrent-fencing=true
检查策略:
pcs property

配置STONITH(Shoot The Other Node In The Head)
以下命令只要在一台节点运行
这边使用fence_scsi,3个节点都需要:
pcs stonith create fence_cnnode1 fence_scsi pcmk_host_list=cnnode1 devices="/dev/GFSdata1" meta provides="stonith" op monitor interval=60s
pcs stonith create fence_cnnode2 fence_scsi pcmk_host_list=cnnode2 devices="/dev/GFSdata1" meta provides="stonith" op monitor interval=60s
pcs stonith create fence_cnnode3 fence_scsi pcmk_host_list=cnnode3 devices="/dev/GFSdata1" meta provides="stonith" op monitor interval=60s
查询状态:
pcs stonith status

部署DLM
以下命令需要在所有节点运行
安装dlm-lib组件:
yum install -y dlm-lib
还需要安装对应的DLM服务
https://pkgs.org/search/?q=dlm

下载对应的RPM安装包:
https://centos.pkgs.org/9-stream/centos-resilientstorage-x86_64/dlm-4.3.0-1.el9.x86_64.rpm.html
手动安装:
rpm -ivh dlm-4.3.0-1.el9.x86_64.rpm
手动重启DLM进程以加载配置:
systemctl start dlm
systemctl stop dlm
查看是否有启动
lsmod | grep dlm
手动启动
modprobe dlm
检查文件是否存在
ll /dev/misc/dlm-control
如果不存在可能是注册错地方了,手动部署服务
mkdir /dev/misc/
ln -s /dev/dlm-control /dev/misc/dlm-control
ln -s /dev/dlm-monitor /dev/misc/dlm-monitor
ln -s /dev/dlm_plock /dev/misc/dlm_plock
创建集群存储
以下命令需要在所有节点运行
安装GFS2组件:
yum install -y gfs2-utils
配置集群存储
以下命令只要在一台节点运行
分区表在多节点共享时有同步风险,这边就不切分区了,创建3节点的集群文件系统
mkfs.gfs2 -p lock_dlm -t cluster0:gfsdata1 -j 3 /dev/GFSdata1

查看分区信息:
blkid /dev/GFSdata1

配置服务:
pcs resource create dlm ocf:pacemaker:controld op monitor interval=30s meta allow-multiple=true
pcs resource create data1 ocf:heartbeat:Filesystem device="/dev/GFSdata1" directory="/data" fstype="gfs2" options="defaults,lockproto=lock_dlm,locktable=cluster0:gfsdata1,_netdev" op monitor interval=10s meta allow-multiple=true
pcs constraint order start dlm then data1
pcs constraint colocation add data1 with dlm
检查集群状态
pcs status

确认正常后克隆配置让其他节点运行:
pcs resource clone dlm meta clone-max=3 clone-node-max=1
pcs resource clone data1 meta clone-max=3 clone-node-max=1
如果发生只有一个节点可以挂载其他节点挂载异常,可以尝试重启异常节点查看是否可以正常恢复:

重启cnnode2、cnnode3后:

集群控制
开启集群
以下命令只要在一台节点运行
开机后集群会自动启动:
pcs status

关闭维护模式
pcs property set maintenance-mode=false
启动所有服务
pcs resource enable dlm
pcs resource enable data1

关闭集群
以下命令只要在一台节点运行
停止服务
pcs resource disable data1
pcs resource disable dlm
确认服务是否都已经停止:
pcs status

进入维护模式
pcs property set maintenance-mode=true
关闭集群
pcs cluster stop --all
添加新设备到集群
需要先参考之前教程,配置iscsi客户端、绑定udev、部署集群服务。
启动集群服务
systemctl start pcsd
systemctl enable pcsd
设置集群用户密码
passwd hacluster
先部署部署DLM:
yum install -y dlm-lib
手动安装:
rpm -ivh dlm-4.3.0-1.el9.x86_64.rpm
手动重启DLM进程以加载配置:
systemctl start dlm
systemctl stop dlm

在已经加入集群的linux中执行后续操作:
pcs host auth cnnode1 cnnode2 cnnode3 cnnode4 -u hacluster -p synology
添加新节点到集群:
pcs cluster node add cnnode4
pcs cluster start cnnode4

查看集群状态
pcs status

配置STONITH
pcs stonith create fence_cnnode4 fence_scsi pcmk_host_list=cnnode4 devices="/dev/GFSdata1" meta provides="stonith" op monitor interval=60s
查看当前GFS2的journals数量:
gfs2_edit -p journals /dev/GFSdata1

增加journals数量并验证:
gfs2_jadd -j 1 /data/

调整集群配置:
pcs resource meta dlm-clone clone-max=4
pcs resource meta data1-clone clone-max=4

移除集群中设备
停止节点的服务:
pcs resource ban dlm cnnode4
pcs resource ban data1-clone cnnode4
查看集群状态
pcs status

配置为维护模式:
pcs node maintenance cnnode4
并关闭集群服务:
pcs cluster stop
pcs cluster disable
停用集群服务组件:
systemctl disable pacemaker corosync

在已经加入集群的linux中执行后续操作:
从集群中删除节点:
pcs cluster node remove cnnode4
删除对应节点的STONITH:
pcs stonith delete fence_cnnode4

note
关闭集群
pcs cluster stop --all
开启集群
pcs cluster start --all
删除服务
pcs stonith remove dlm
清理孤立资源
pcs resource cleanup dlm
取消clone
pcs resource unclone dlm
测试启动服务
pcs resource enable data1
pcs resource debug-start data1
重启stonith节点
pcs stonith enable fence_cnnode1
pcs stonith disable fence_cnnode1
清理日志
pcs resource cleanup
更新clone
pcs resource update dlm clone-max=4
临时禁止
停止节点的部分服务
pcs resource ban data1-clone cnnode3
恢复节点的部分服务
pcs resource clear data1-clone cnnode3
永久禁止
加禁止约束:
pcs constraint location data1-clone avoids cnnode3=INFINITY
查看约束:
pcs constraint config --full
删除约束:
pcs constraint remove <约束ID>
pcs constraint remove location-data1-clone-cnnode3--INFINITY
强行停止集群
pcs cluster stop --all --force