(使用gfs2和corosync)配置iscsi磁盘能够同时被两台客户端挂载,并且他们之间的数据可以进行同步.note
一、配置 corosync 集群 + DLM,使用 gfs2文件格式:
1、正常配置 iscsi:
apt install -y tgt
vim /etc/tgt/targets.conf
systemctl restart tgt
2、配置 客户端1:
(1)安装软件包:
apt install -y open-iscsi gfs2-utils dlm-controld # corosync //安装dlm-controld会自动安装corosync
# open-iscsi //用于连接iscsi磁盘
# gfs2-utils //提供gfs2格式的格式化与挂载
# dlm-controld //提供锁机制,类似提供一个锁文件,机器必须抢锁才能写,避免同时写入导致冲突
# corosync //用于创建集群,负责节点之间的通信和成员状态管理
# pacemaker //提供VIP,用于资源调度(2)配置 corosync:
vim /etc/corosync/corosync.conf不用改多余配置,只需要复制然后增加 node即可

systemctl restart corosync
(3)连接iscsi:
# 先启动 iscsi发现服务:
systemctl restart iscsid
systemctl enable iscsid //这条无所谓,因为这个服务只是用于iscsi磁盘发现
# 获取 iscsi磁盘:
iscsi_discovery 172.16.1.103 //输入iscsi服务器的地址
或:
iscsiadm -m discovery -t sendtargets -p 172.16.1.103
systemctl restart open-iscsi
# 最后还要进行登陆(有模板:man iscsiadm):
iscsiadm -m node -T iqn.shanghai.org:iscsi -p 172.16.1.103:3260 --login3、配置 客户端2:
(1)安装软件包:
apt install -y open-iscsi gfs2-utils dlm-controld # corosync //安装dlm-controld会自动安装corosync
# open-iscsi //用于连接iscsi磁盘
# gfs2-utils //提供gfs2格式的格式化与挂载
# dlm-controld //提供锁机制,类似提供一个锁文件,机器必须抢锁才能写,避免同时写入导致冲突
# corosync //用于创建集群,负责节点之间的通信和成员状态管理
# pacemaker //提供VIP,用于资源调度(2)配置 corosync:
# 直接复制配置文件过来即可,一模一样的配置:
scp root@192.168.1.6:/etc/corosync/corosync /etc/corosync
systemctl restart corosync(3)连接iscsi:
# 先启动 iscsi发现服务:
systemctl restart iscsid
systemctl enable iscsid //这条无所谓,因为这个服务只是用于iscsi磁盘发现
# 获取 iscsi磁盘:
iscsi_discovery 172.16.1.103 //输入iscsi服务器的地址
或:
iscsiadm -m discovery -t sendtargets -p 172.16.1.103
systemctl restart open-iscsi
# 最后还要进行登陆(有模板:man iscsiadm):
iscsiadm -m node -T iqn.shanghai.org:iscsi -p 172.16.1.103:3260 --login4、将 iscsi磁盘格式化为 gfs2格式,:
格式化操作仅在任意一个节点执行,只需要执行一次
挂载操作所有节点都可执行
# 将iSCSI磁盘格式化为gfs2格式:
## 有时 dlm服务没启动,无法格式化:systemctl restart dlm
mkfs.gfs2 -p lock_dlm -t debian:data -j 2 /dev/sdb
# -p lock_dlm //使用dlm + 锁机制
# -t debian:data //定义 集群名称:标签,集群名称默认为 debian,题目没有要求可以不用修改,后面的标签自定义即可,但是必须有
# -j 2 //定义要生成几份日志blkid /dev/sdb

可以在 man mkfs.gfs2 中查看 example:

# 进行挂载:
vim /etc/fstab
mount -a
df -h

·测试:
此时在一个节点创建的文件,就会被自动同步到另外一个节点,并且不会再出现问题


二、在前面的基础上加上 pacemaker进行调度:
·拓扑:
Server1:192.168.100.1
Server2:192.168.100.21、存储服务器1配置:
连接iSCSI磁盘的操作不赘述
(1)安装软件包:
apt install -y open-iscsi gfs2-utils dlm-controld pacemaker crmsh csync2 # sbd软件可以不装(因为用不上)(2)(新增)配置 pacemaker 创建集群:
apt install -y pacemaker crmsh csync2 # sbd软件可以不装(因为用不上)# 临时停止所有集群,使用 pacemaker 来创建集群:
systemctl stop pacemaker
systemctl stop corosync
# 初始化集群:
crm cluster init -n cluster -y //指定-y,这样就能直接跳过 sbd那些可选操作,否则就要手动输入 n跳过,会浪费时间
# 修改 corosync.conf ,复制node,添加另一台机器的信息:
vim /etc/corosync/corosync.conf
systemctl restart corosync
2、存储服务器2配置:
连接iSCSI磁盘的操作不赘述
(1)安装软件包:
apt install -y open-iscsi gfs2-utils dlm-controld pacemaker crmsh csync2 # sbd软件可以不装(因为用不上)(2)(新增)配置 pacemaker 创建集群:
apt install -y pacemaker crmsh csync2 # sbd软件可以不装(因为用不上)# 复制 corosync的配置过来,并重启服务,就能够直接加入集群了:
## 注意 authkey 也需要复制,所以我们直接scp * 过来
scp root@192.168.100.1:/etc/corosync/* /etc/corosync
systemctl restart corosync等待 3、4秒,查看集群状态:

3、(可选)在 pacemaker 上定义一个 VIP:
# crm configure primitive [资源名称] ocf:heartbeat:IPaddr2 params ip=[VIP地址] cidr_netmask=[VIP掩码] nic=[VIP网卡] op monitor interval=[检测间隔]s
crm configure primitive vip ocf:heartbeat:IPaddr2 params ip=192.168.100.200 cidr_netmask=24 nic=ens33 op monitor interval=5s
## 参数解释:
primitive vip //定义一个资源,名为:vip
ocf:heartbeat:IPaddr2 //官方 OCF 资源代理(标准)
ip=... //定义VIP地址
cidr_netmask=... //定义VIP掩码
nic=... //定义VIP绑定的物理网卡
op monitor interval=... //定义多久检测一次
# 只要 dlm、corosync、pacemaker 任何一个服务出现问题都会瞬间切换 VIP到另外一台机器
# dlm、corosync、pacemaker 这三个服务一旦任何一个服务停止,另外的服务也会停止
## 默认不会抢占,当服务恢复后VIP不会恢复
### 如果要开启抢占:
crm configure rsc_defaults resource-stickiness=0 //设置所有资源的“默认粘性”为 0(让资源能够根据机器优先级进行切换)
crm configure location vip_prefer_server1 vip 100: server1 //给Server1更高的功能4、将磁盘格式化为 gfs2 格式:
格式化操作仅在任意一个节点执行,只需要执行一次
挂载操作所有节点都可执行
连接 iscsi磁盘的方式不赘述,上面有写
# 格式化磁盘:
## 有时 dlm服务没启动,无法格式化:systemctl restart dlm
mkfs.gfs2 -t cluster:data -p lock_dlm -j 2 /dev/sdb
# -p lock_dlm //使用dlm + 锁机制
# -t cluster:data //定义 集群名称:标签,集群名称我们前面初始化的时候设置为了 cluster,题目没有要求可以不用修改,后面的标签自定义即可,但是必须有
# -j 2 //定义要生成几份日志
可以在 man mkfs.gfs2 中查看 example:

# 本地挂载:
mkdir /gfs
vim /etc/fstab
systemctl daemon-reload
mount -a
这样就可以使用这个目录进行其他操作了,例如nfs
·可选操作
这个可以不配置
# 创建一个1M的分区,给 sbd使用(防止集群脑裂):
fdisk /dev/sdb
g //创建GPT分区表
n //创建新分区
[回车] //设置分区号(默认是1,会自动往后推)
[回车] //指定从哪个扇区开始,不用管
2048(或者:+1M) //指定分区大小
# 将剩余空间全部创建为另一个分区:
n //创建新分区
[回车] //设置分区号,这里会自动使用 2
[回车] //指定从哪个扇区开始,不用管
[回车] //指定分区大小(默认使用所有剩余空间)
p //查看当然分区
w //保存并写入分区(会自动退出)
