这次专门整理下多节点共享文件系统
背景
之前曾经安装过 Oracle RAC, 申请了多余的共享磁盘,配置了一下 OCFS2 系统, 挂载到所有节点,用于存放数据库备份, 这样的话, 备份的内容所有节点都可见。 当然了使用 Oracle ASM 的ACFS也行(以前做过,没记录,有空了再整理)。
这次呢,又一个新地方部署了同一个版本的RAC, 也想用相同方式,但在配置 OCFS2 的步骤 o2cb.init configure 步骤竟然报错,卡住了,时间比较紧, 最后,换 xfs 格式,只挂载在其中一个节点用于备份。
离开之后, 复盘了下原因, 是因为之前成功的 OCFS2 配置是在Oracle Linux 7 操作系统上,默认是 uek 内核启动, 默认是支持 OCFS2 文件系统的。 而我们这次呢,是 Redhat7 , 默认是不支持 OCFS2 文件系统的。
今天,主要分享DRBD使用本地磁盘同步来配置OCFS2共享文件系统
DRBD是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。这就不多说了,出现很多年了,没钱买高大上硬件存储之前,一种廉价的高可用磁盘同步方案,但用起来真的不错。
日期: 2023-05-23
1 测试环境
oracle linux 7.9 (uek)测试组: 2台 使用 本地磁盘 无共享磁盘
2 准备工作
创建逻辑卷 /dev/vg1/lv1 和 /dev/vg1/lv2
#2个节点都是本地磁盘,创建lvm逻辑卷
pvcreate /dev/sdb
vgcreate vg1 /dev/sdb
lvcreate -n lv1 -l 40%VG vg1
lvcreate -n lv2 -l 40%VG vg1
ll /dev/vg1
3 主机配置 未特别指明,则所有节点都要执行
hostnamectl set-hostname db01 #主机1执行,设置主机名称
hostnamectl set-hostname db02 #主机2执行,设置主机名称
#关闭seliux, 防火墙允许drbd和ocfs端口
firewall-cmd --permanent --add-port=7788/tcp --add-port=7789/tcp --add-port=7777/tcp && firewall-cmd --reload && firewall-cmd --permanent --list-all
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config ; sed -i "s/SELINUX=permissive/SELINUX=disabled/g" /etc/selinux/config
setenforce 0
#安装软件包
yum -y install http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum -y install drbd90-utils kmod-drbd90
systemctl enable drbd --now
lsmod |grep drbd
#配置drbd
cat > /etc/drbd.d/global_common.conf << eof global usage-count no common net protocol c eof drbd1 cat> /etc/drbd.d/drbd1.res << eof resource drbd1 disk devvg1lv1 device devdrbd1 meta-disk internal db01 address 192.168.55.144:7788 db02 address 192.168.55.185:7788 eof drbd2 cat> /etc/drbd.d/drbd2.res << eof resource drbd2 net allow-two-primaries disk devvg1lv2 device devdrbd2 meta-disk internal db01 address 192.168.55.144:7789 db02 address 192.168.55.185:7789 eof drbdadm create-md drbd1 drbdadm up drbd1 drbdadm primary drbd1 --force 1 drbdadm role drbd1 drbdadm status drbd1 drbdsetup status drbd1 --verbose --statistics drbdadm create-md drbd2 drbdadm up drbd2 drbdadm primary drbd2 --force 1 drbdadm primary drbd2 2 drbdadm role drbd2 drbdadm status drbd2 drbdsetup status drbd2 --verbose --statistics drbd1 ocfs2 1 parted devdrbd1 mklabel gpt parted devdrbd1 mkpart p1 ext4 1 100 mkfs.xfs devdrbd1 -f mkdir u01 mount devdrbd1 u01 date> /u01/test ; cat /u01/test
umount /u01
drbdadm secondary drbd1
echo '[ "$(drbdadm role drbd1)" = "Secondary/Secondary" ] && drbdadm primary drbd1 ; sleep 10 ; [ "$(drbdadm role drbd1)" = "Primary/Secondary" ] && mount /dev/drbd1 /u01' >> /etc/rc.local #持久化磁盘挂载
#节点2执行
drbdadm primary drbd1
mkdir /u01 && mount /dev/drbd1 /u01
cat /u01/test
echo '[ "$(drbdadm role drbd1)" = "Primary/Secondary" ] && mount /dev/drbd1 /u01' >> /etc/rc.local #持久化磁盘挂载
#测试结果: 主从同步没问题,主可以挂载,任何修改会同步到从,可以角色切换,将从升为主,挂载
4 ocfs2配置
注意 name 要和机器 hostname 一致
yum -y install ocfs2-tools
yum -y install ocfs2-tools-devel #linux 7 only
[ -d /etc/ocfs2 ] || mkdir -p /etc/ocfs2
cat >/etc/ocfs2/cluster.conf <> /etc/rc.local
测试
#在crontab job中添加如下内容
* * * * * echo ${HOSTNAME} $(date) >> /u02/test.log
结论
可以同时挂载,2节点都可以写入数据并互相可见
关机, 重启均按照指令执行,没有问题
5 其他 drbd 命令
#查看同步
drbdadm status drbd1
drbdsetup status drbd1 --verbose --statistics
#查看和切换资源角色
drbdadm role drbd1
drbdadm primary drbd1
drbdadm secondary drbd1
#查看资源状态
drbdadm dstate drbd1
drbdadm cstate drbd1
#脑裂
1. 从节点
drbdadm secondary drbd1
drbdadm -- --discard-my-data connect drbd1
2. 主节点
drbdadm connect drbd1