如何配置和挂载OCFS2文件系统

这次专门整理下多节点共享文件系统

背景

之前曾经安装过 Oracle RAC, 申请了多余的共享磁盘,配置了一下 OCFS2 系统, 挂载到所有节点,用于存放数据库备份, 这样的话, 备份的内容所有节点都可见。 当然了使用 Oracle ASM 的ACFS也行(以前做过,没记录,有空了再整理)。

这次呢,又一个新地方部署了同一个版本的RAC, 也想用相同方式,但在配置 OCFS2 的步骤 o2cb.init configure 步骤竟然报错,卡住了,时间比较紧, 最后,换 xfs 格式,只挂载在其中一个节点用于备份。

离开之后, 复盘了下原因, 是因为之前成功的 OCFS2 配置是在Oracle Linux 7 操作系统上,默认是 uek 内核启动, 默认是支持 OCFS2 文件系统的。 而我们这次呢,是 Redhat7 , 默认是不支持 OCFS2 文件系统的。

今天,主要分享共享储存的节点如何配置 OCFS2。 共享磁盘使用openfiler的iscsi服务提供,这个就不单独讲了,一共配置了4个lun。用于共享磁盘。

后面再讲vmware workstation共享磁盘和 DRBD 的方式实现共享磁盘。

日期: 2023-05-19

1 测试环境

openfiler : 192.168.55.201 提供共享磁盘

oracle linux 7.9 (uek)测试组: 2台 使用 ocfs2 挂载共享磁盘

oracle linux 8.7 (uek)测试组: 2台 使用 ocfs2 挂载共享磁盘

oracle linux 9.2 (uek)测试组: 2台 使用 ocfs2 挂载共享磁盘

almaliux 9.2 + rockylinux 9.2 测试组: 2台, 操作系统 分别为 almaliux 9.2 和 rockylinux 9.2 使用 xfs 挂载共享磁盘

2 openfiler 配置共享磁盘

3 主机配置 未特别指明,则所有节点都要执行

hostnamectl set-hostname db01 #主机1执行,设置主机名称
hostnamectl set-hostname db02 #主机2执行,设置主机名称

#防火墙和selinux关闭
systemctl disable firewalld --now
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config ; sed -i "s/SELINUX=permissive/SELINUX=disabled/g" /etc/selinux/config
setenforce 0

#安装iscsi工具包
yum -y install iscsi-initiator-utils
iscsiadm -m discovery -t st -p 192.168.55.201
iscsiadm -m node -T iqn.db -p 192.168.55.201 --login
systemctl enable iscsi --now
#再看看, 多了4个磁盘
ls /dev/sd* 

#使用udev固定磁盘
/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sdb #查看设备id,其他类推
cat >/etc/udev/rules.d/99-oracle-ocfs2.rules<<EOF
KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/\$name", RESULT=="14f504e46494c4552627138374e762d69364c532d6b305565", SYMLINK+="sharedisk/disks/data1", OWNER="root", GROUP="root", MODE="0660"
KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/\$name", RESULT=="14f504e46494c45523267733435572d4b68496b2d63745147", SYMLINK+="sharedisk/disks/data2", OWNER="root", GROUP="root", MODE="0660"
KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/\$name", RESULT=="14f504e46494c455261453050486e2d727567582d72525474", SYMLINK+="sharedisk/disks/data3", OWNER="root", GROUP="root", MODE="0660"
KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/\$name", RESULT=="14f504e46494c4552463164374d712d6857417a2d52473474", SYMLINK+="sharedisk/disks/data4", OWNER="root", GROUP="root", MODE="0660"
EOF

#linux7之前重启udev
/usr/sbin/udevadm control --reload-rules
systemctl restart systemd-udev-trigger.service ; systemctl status systemd-udev-trigger.service ; systemctl enable systemd-udev-trigger.service
systemctl restart systemd-udevd.service ; systemctl status systemd-udevd.service ; systemctl enable systemd-udevd.service


#linux7之后不能手动启停udev,而是采用重新加载的方式
/sbin/udevadm control --reload-rules
udevadm trigger --action=add
/sbin/udevadm trigger --type=devices --action=change
sleep 3

#可以看到4个设备了
ll /dev/sharedisk/disks/

4 ocfs2配置

注意 name 要和机器 hostname 一致, ip要和实际的ip一致, 我这边4个测试组, 我随机贴了一组。

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 <<EOF
cluster:
node_count = 2
name = ocfs2
node:
ip_port = 7777
ip_address = 192.168.55.180
number = 0
name = db01
cluster = ocfs2
node:
ip_port = 7777
ip_address = 192.168.55.181
number = 1
name = db02
cluster = ocfs2
EOF
#初始化ocfs2配置 第一项选yes,第三项集群名称填上面配置文件里的,默认是ocfs2,其他默认, 配置结果存入配置文件 /etc/sysconfig/o2cb
o2cb.init configure
#确保o2cb ocfs2服务启动并设置为开机自启
systemctl enable o2cb --now
systemctl enable ocfs2 --now
#任选一个主机 分区并格式化分区 注意:不同的测试组使用不同的设备
parted /dev/sharedisk/disks/data1 mklabel gpt
parted /dev/sharedisk/disks/data1 mkpart p1 ext4 1 100%
mkfs.ocfs2 /dev/sharedisk/disks/data1
#另一个主机 探测分区变化 注意:不同的测试组使用不同的设备
partprobe /dev/sharedisk/disks/data1
#所有主机 持久化磁盘挂载 注意:不同的测试组使用不同的设备
[ -d /u02 ] || mkdir /u02 ; mount /dev/sharedisk/disks/data1 /u02
echo 'sleep 10 ; partprobe /dev/sharedisk/disks/data1 ; sleep 10 ; mount /dev/sharedisk/disks/data1 /u02' >> /etc/rc.local

#以下方法SAN共享磁盘测试可以,但iscsi共享磁盘开机没有自动挂载,应该是启动顺序原因,因此 iscsi 共享磁盘最好是手动挂载或延迟设置在 /etc/rc.local, 不要使用 /etc/fstab
echo "#/dev/sharedisk/disks/data1 /u02 ocfs2 _netdev,defaults 0 0" >> /etc/fstab ; mount -a #_netdev: 表示当系统联网后再进行挂载操作,以免系统开机时间过长或开机失败

测试

#在crontab job中添加如下内容
* * * * * echo ${HOSTNAME} $(date) >> /u02/test.log

然后节点 查看 /u02/test.log 可以看到,各个节点都在往相同文件写入数据,并不会互相覆盖。

测试出现的问题

发布 reboot 命令后 7.9组 有时会启动失败,需vmware干预。

发布 poweroff 命令后会重启,但有时会启动失败。需vmware干预。( 7.9组 和 8.7组 发生过失败)

发布 poweroff -f 立刻关机 重启曾经有一台 8.7 已经识别分区,但没有自动挂载

8.7 组启动后发生过: 1 识别分区失败,无法挂载,需手动识别分区并挂载。2. 发生识别到分区,但无法挂载,需手动挂载

启动脚本中 刚开始设置 sleep 30 上面杰哥问题发生率较多, 设置为 sleep 10 后上面几个问题发生率较少。

结论

可以同时挂载,2节点都可以写入数据并互相可见.

iscsi 共享磁盘测试出的问题比较多, 生产环境不要使用 iscsi 共享磁盘。

5 普通挂载配置

前面发表了几篇 CentOS 的替代品 AlmaLinux 和 RockyLinux , 所以这边顺便测试了一下, 没有使用 OCFS2 文件系统。

这是 almaliux 9.2 + rockylinux 9.2 测试组

#任选一个主机 使用格式化分区
parted /dev/sharedisk/disks/data4 mklabel gpt
parted /dev/sharedisk/disks/data4 mkpart p1 ext4 1 100%
mkfs.xfs /dev/sharedisk/disks/data4
#其余主机 探测分区变化
partprobe /dev/sharedisk/disks/data2
#只能一个主机 持久化磁盘挂载
[ -d /u02 ] || mkdir /u02 ; mount /dev/sharedisk/disks/data4 /u02

测试结果

同一时刻, 2个节点虽然都可以挂载,但写入的内容互相看不见(即使其中一个以只读挂载,也看不到另一个节点写入的数据)。 全部卸载并重新挂载后,其中一个节点的写入数据丢失。

结论

必须保证同一时刻,只能有1个节点挂载

补充测试 Redhat7.9 和 CentOS7.9

2023-05-20, 在自行编译支持 OCFS2 的linux内核后, 也测试了一下 Redhat 和 CentOS 的 OCFS 配置,跟 Oracle Linux 一样。故简述一下:

测试组

Redhat 7.9 + CentOS 7.9 测试组1: 自行编译内核
kernel-3.10.0-1160.90.1.el7.x86_64.rpm 并安装使用

Redhat 7.9 + CentOS 7.9 测试组2: 安装自行编译内核后复制出来的
kernel-3.10.0-1160.90.1.el7.x86_64.rpm

Redhat 7.9 + CentOS 7.9 测试组3: 安装 Orace Linux 中的包
linux-firmware-20200902-999.5.gitd5f9eea5.el7.noarch.rpm 和 kernel-uek-5.4.17-2011.6.2.el7uek.x86_64.rpm

以上三种重启后均支持 ocfs2 文件系统,再安装 Oracle Linux 安装介质中的
ocfs2-tools-1.8.6-14.el7.x86_64.rpm 和 ocfs2-tools-devel-1.8.6-14.el7.x86_64.rpm 即可以支持 ocfs2 共享文件系统

测试结果和 oracle linux 7.9 (uek)测试组 相同

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贺浦力特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值