数据库管理-第三十三期 多路径改造——完结篇(20220901)

第三十三期 多路径改造——完结篇

新的一期也是新的一个月,在成都也是新的一轮疫情来袭,喜提3天静态管理,这几天经历了核酸采集系统挂了、“热带雨林”购物节、“摆渡人”购物节,虽略有调侃但也是疫情汹汹。本期内容对应第二十九期,经过多般坎坷,上周四晚上完成了多路径改造,昨晚存储割接并未出现异常。

1 AFD/ACFS & Kernel

首先AFD/ACFS这些组件,对操作系统类型和操作系统内核是有一定要求的(详见MOS Doc ID 1369107.1)。然而根据第二十九期,我在OracleLinux 7.4+原生内核的基础上,使用12.2做AFD相关操作是可以的,但是在生产环境中,则出现了以下问题:

asmcmd afd_dsset '/dev/mapper/DISK*,/dev/ASMDISK*'
ASMCMD-9520: AFD is not 'Supported'

根据MOS文档,12.2确实不支持OracleLinux 7.4原生内核4.1.12-94.3.9.el7uek.x86_64,但是从“历史角度来看”,测试环境又没问题,两边唯一的区别就是生产环境打了2021OCTPSU,测试环境没有,经过与后台沟通,在打过PSU会对AFD/ACFS的操作系统兼容性造成一些改变。
根据这件事情,我也建议还是少用AFD来识别磁盘,太容易出现异常了。
但是我手上这套数据库又需要处理,这就让人很纠结了。

2 multipath

Multipath是一个多路径聚合软件,它根据磁盘的WWID(scsi_id)将操作系统多条链路上磁盘进行聚合,再映射到/dev/mapper下。其实很多存储厂家带的软件都是基于multipath改的,大多映射地址不在/dev/mapper下。
按照一般的4链路来看,相当于是把有相同wwid的4块磁盘聚合成一个磁盘并放在/dev/dm-N,在这里已经做好了链路聚合,4条链路只要有一条存活就没有问题,然后再将/dev/dm-N通过软连接映射到/dev/mapper。在这里插入图片描述

3 没法变更AFD搜索路径怎么解决多路径?

其实从multipath的讲解来看,在/dev/dm-N阶段链路聚合就做好了,最早想的是用udev将multipath映射在/dev/mapper下的磁盘再映射到/dev/下,但是AFD无法识别二次映射的磁盘。因此我思考只能通过multipath软连接一样的方式把/dev/dm-N软连接到/dev/下。但是怎么保证识别顺序是正确的呢?其实做两个列表就行,以上面那张图为例:

multipathdmASMDISKWWID
/dev/mapper/DISK01p1dm-7/dev/ASMDISK0136000c2984049a81497b13e64733c7220
/dev/mapper/DISK02p1dm-10/dev/ASMDISK0236000c29354429fb943dd8b48e52711c0
/dev/mapper/DISK03p1dm-9/dev/ASMDISK0336000c295b1cec3e1b96e0b34f4c34ade
/dev/mapper/DISK04p1dm-11/dev/ASMDISK0436000c297aba068e4685b944afee7c2e2
/dev/mapper/DISK05p1dm-12/dev/ASMDISK0536000c29e82527f31a3b2d6f15f5f74e3
/dev/mapper/DISK06p1dm-13/dev/ASMDISK0636000c29cb2d209792310a74151dde708

首先,以第一块盘为例,在原始环境中/dev/ASMDISK01和对应wwid是匹配,因此在使用multipath后,/dev/mapper/DISK01p1和/dev/ASMDISK01对应的wwid是一样的,其余磁盘也是如此,这里就可以通过一个shell来实现对/dev/mapper/DISKNp1的/dev/dm-N进行识别:

ls -l /dev/mapper/DISK*p1 |  awk '{print $NF}'|sed 's#\.\.#/dev#g'

在这里插入图片描述
由于ls排序是按照映射编号进行排序的,因此再需要一个原来使用udev方式使用的列表来做匹配参考:

[root@db01 ~]# cat asm.txt 
/dev/ASMDISK01
/dev/ASMDISK02
/dev/ASMDISK03
/dev/ASMDISK04
/dev/ASMDISK05
/dev/ASMDISK06

将上面的shell与下面的列表进行拼接即可实现对应的软连接创建:

ls -l /dev/mapper/DISK*p1 |  awk '{print $NF}'|sed 's#\.\.#/dev#g' > /root/dm.txt

while IFS=$'\t' read -r f1 f2
do
  printf 'ln -s %s %s\n' "$f1" "$f2"
done < <(paste /root/dm.txt /root/asm.txt) > /root/asm.sh

chmod +x /root/asm.sh
sh /root/asm.sh
chown grid.asmadmin /dev/ASMDISK*
[root@db01 ~]# cat asm.sh
ln -s /dev/dm-7 /dev/ASMDISK01
ln -s /dev/dm-10 /dev/ASMDISK02
ln -s /dev/dm-9 /dev/ASMDISK03
ln -s /dev/dm-11 /dev/ASMDISK04
ln -s /dev/dm-12 /dev/ASMDISK05
ln -s /dev/dm-13 /dev/ASMDISK06
[root@db01 ~]# ll asm.sh
-rwxr-xr-x 1 root root 190 Sep  1 05:46 asm.sh

在这里插入图片描述

最后再写一个systemd,将这套操作放在multipathd之后运行即可:

[root@db01 ~]# cat /usr/lib/systemd/system/oracle_afd.service 
[Unit]
After=multipathd.service

[Service]
Type=forking
ExecStart=/bin/bash /root/afd_dm

[Install]
WantedBy=multi-user.target
[root@db01 ~]# ll /usr/lib/systemd/system/oracle_afd.service
-rwxr-xr-x 1 root root 127 Aug 24 11:14 /usr/lib/systemd/system/oracle_afd.service
[root@db01 ~]# systemctl enable oracle_afd.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/oracle_afd.service to /usr/lib/systemd/system/oracle_afd.service.

通过操作系统重启测试,磁盘可以正确映射到/dev/ASMDISKN去。

4 总结

上周四,一个割接在生产环境也确认这套“骚操作”的方案是可行的,AFD可以正确识别磁盘并使用,集群正常。然后昨晚今晨存储割接经过3次丢失一半链路,验证了这个“骚操作”的可行性。
本期作为一篇技术文档,我觉得应该阅读量又没多少。老规矩:知道写了些啥。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

胖头鱼的鱼缸(尹海文)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值