这次专门整理下多节点共享文件系统
背景
之前曾经安装过 Oracle RAC, 申请了多余的共享磁盘,配置了一下 OCFS2 系统, 挂载到所有节点,用于存放数据库备份, 这样的话, 备份的内容所有节点都可见。 当然了使用 Oracle ASM 的ACFS也行(以前做过,没记录,有空了再整理)。
这次呢,又一个新地方部署了同一个版本的RAC, 也想用相同方式,但在配置 OCFS2 的步骤 o2cb.init configure 步骤竟然报错,卡住了,时间比较紧, 最后,换 xfs 格式,只挂载在其中一个节点用于备份。
离开之后, 复盘了下原因, 是因为之前成功的 OCFS2 配置是在Oracle Linux 7 操作系统上,默认是 uek 内核启动, 默认是支持 OCFS2 文件系统的。 而我们这次呢,是 Redhat7 , 默认是不支持 OCFS2 文件系统的。
今天,主要分享vmware workstation共享磁盘配置OCFS2共享文件系统
后面再讲DRBD 的方式实现共享磁盘
日期: 2023-05-24
1 测试环境
oracle linux 8.7 (uek)测试组: 2台 使用vmware设置的共享磁盘
2 虚拟机共享磁盘配置
1. 主机1 添加SCSI磁盘(新建), 立即分配所有空间, 虚拟设备节点: SCSI 1:0 模式: 独立,永久 其他: 不允许写缓存
2. 主机2 添加SCSI磁盘(使用前面新建的磁盘) 虚拟设备节点使用 SCSI 1:0 模式: 独立,永久 其他: 不允许写缓存
3. 打开2个虚拟机安装目录 编辑 .vmx 文件 结尾添加以下内容:
scsi1.sharedBus = "virtual"
disk.locking = "false"
diskLib.dataCacheMaxSize = "0"
diskLib.dataCacheMaxReadAheadSize = "0"
diskLib.dataCacheMinReadAheadSize = "0"
diskLib.dataCachePageSize = "4096"
diskLib.maxUnsyncedWrites = "0"
disk.EnableUUID = "TRUE"
3 主机配置 未特别指明,则所有节点都要执行
hostnamectl set-hostname db01 #主机1执行,设置主机名称
hostnamectl set-hostname db02 #主机2执行,设置主机名称
#关闭seliux和防火墙
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
ls /dev/sd* #多了几个磁盘
#使用udev固定磁盘
/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sda #查看设备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=="36000c296495293d994b9a5df27c752cb", SYMLINK+="sharedisk/disks/data1", OWNER="root", GROUP="root", MODE="0660"
EOF
#linux7之后不能手动启停udev,而是采用重新加载的方式
/sbin/udevadm control --reload-rules
udevadm trigger --action=add
/sbin/udevadm trigger --type=devices --action=change
#可以看到设备了
ll /dev/sharedisk/disks/
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 <<EOF
cluster:
node_count = 2
name = ocfs2
node:
ip_port = 7777
ip_address = 192.168.55.187
number = 0
name = db01
cluster = ocfs2
node:
ip_port = 7777
ip_address = 192.168.55.188
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
测试
#在crontab job中添加如下内容
* * * * * echo ${HOSTNAME} $(date) >> /u02/test.log
结论
可以同时挂载,2节点都可以写入数据并互相可见. 重启/关闭都可以按照指令完成