vlambda博客
学习文章列表

【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV

Openfiler是一款网络存储软件,在Oracle RAC部署的时候,可以用来模拟共享存储,并实现多路径(Multipath)。多路径简单来说,就是连接磁盘的多条链路,避免单条链路中断导致的数据库不可用,另外多条链路间还能实现负载均衡。

一、场景

现在需要在VM虚拟机上搭建一套测试RAC集群(CentOS7.7+11.2.0.4),计划使用Openfiler软件模拟共享存储及实现多路径,共享磁盘的规划如下:

磁盘名称 说明 大小 数量
+OCR 集群注册表和表决磁盘 3G 1Gx3
+DATA 数据文件、control file、spfile、redo log 20G 1
+FRA 归档 5G 1

Openfiler两块网卡IP:
192.168.10.55
10.10.10.15

本篇客户端为CentOS 7,操作均验证过

二、Openfiler安装

1.下载

 
   
   
 
--下载地址,目前可下载到 openfileresa-2.99.1-x86_64-disc1.iso
https://www.openfiler.com/community/download

2.安装

使用VMware安装前配置

  1. 打开【VMware Workstation 15 Pro】

  2. 点击【创建新的虚拟机】

  3. 点击【自定义(高级)】

  4. 【硬件兼容性】选择【Workstation 15.x】

  5. 选择【稍后安装操作系统】

  6. 选择【Linux】,版本选择【其他 Linux 2.6.x 内核64位】,因为Openfier的iso内核是2.6

  7. 设置虚拟机名称及位置

  8. 设置【处理器数量】2【每个处理器的内核数量】2

  9. 设置【此虚拟机的内存】4096M

  10. 设置网络连接NAT

  11. I/O控制器类型【LSI Logic(推荐)】

  12. 虚拟磁盘类型【SCSI】

  13. 【创建新的虚拟磁盘】

  14. 最大磁盘大小【20G】【将虚拟磁盘存储为单个文件】

  15. 磁盘文件名称,我用默认

  16. 完成

  17. 编辑虚拟机设置

  18. 添加【网络适配器】选择仅主机模式模式,这是第二块网卡

  19. 添加【硬盘】,加3块20G硬盘,勾选【独立】【永久】

  20. CD/DVD选择刚才下载好的镜像

  21. 点击开启此虚拟机,开始安装

安装步骤

【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV
【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV
【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV
【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV

这里使用sda作为系统安装盘:swap 4096M,/boot 1024M /剩下所有

【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV
【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV
【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV
【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV

下面就开始正式安装了,几分钟就装好,reboot后显示登陆页面
账号:root
密码:刚才设置的

【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV

到此就完成了Openfiler的安装,可以使用WEB界面访问:

  • 默认账号密码 openfiler /password

【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV

三、Openfiler配置

一般的配置流程是:pv->raid)->vg->lv->map,不用raid可以跳过

1.创建PV-物理卷(Physical Volume)

点击Edit Disk下面的sbd\sbc\sdd进去创建物理卷,这里可以设置RAID array member,如果要创建RAID,可以点右侧【Software RAID】

【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV
【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV

三个盘PV都创建完成可见

【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV

2.创建VG-卷组(Volume Group)

【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV
【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV

3.创建LV-逻辑卷(Logical Volume)

点击【Volumes】-右侧【Add Volume】
输入逻辑卷的名称、描述、设置大小,Filesystem / Volume type选择block,最后create
我们按照之前的规划添加逻辑卷

【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV

创建完成

【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV

4.服务端配置

  • 启动iscsi_target服务,并设置开机启动

【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV

  • 将逻辑卷映射到主机

【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV

再点击【ISCSI Targets】里的【LUN Mapping】

【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV

  • 配置访问控制
    导航栏选择【SYSTEM】-最下方【Network Access Configuration】,如下添加

【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV
【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV

  • 配置network acl

【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV

到这里服务端配置完成。

四、ISCSI客户端配置

1.检查安装包

 
   
   
 
--需要安装iscsi-initiator-utils、device-mapper及device-mapper-multipath(这里带着多路径的包一起装了)
--检查是否安装
rpm -qa |grep iscsi
rpm -qa |grep device-mapper

--安装
yum install iscsi-initiator*
yum install device-mapper device-mapper-event device-mapper-multipath device-mapper-multipath-libs

--iscsi、iscsid服务控制
systemctl start iscsi.service
systemctl start iscsid.service

systemctl status iscsi.service
systemctl status iscsid.service

2.客户端发现多路径

 
   
   
 
iscsiadm --mode discovery --type sendtargets --portal 192.168.10.55:3260
iscsiadm --mode discovery --type sendtargets --portal 10.10.10.15:3260

--简写方式,man iscsiadm 可查看具体用法
iscsiadm -m discovery -t st -p 192.168.10.55
iscsiadm -m discovery -t st -p 10.10.10.15

--查看发现记录
iscsiadm --mode node

【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV

3.存储器登陆

执行完上一步,使用fdisk -l还是查看不到磁盘,执行下面登陆命令就能看到磁盘了

 
   
   
 
--全部登陆
iscsiadm -m node --loginall=all

--单条链路登陆,简写就不在这放了,iqn在WEB管理页面volumns-LUN Mapping下
iscsiadm --mode node --targetname iqn.2006-01.com.openfiler:tsn.f33a86dd5860 --portal 192.168.10.55:3260 --login
iscsiadm --mode node --targetname iqn.2006-01.com.openfiler:tsn.f33a86dd5860 --portal 10.10.10.15:3260 --login

--链路逐个登出
iscsiadm --mode node --targetname iqn.2006-01.com.openfiler:tsn.f33a86dd5860 --portal 192.168.10.55:3260 --logout
iscsiadm --mode node --targetname iqn.2006-01.com.openfiler:tsn.f33a86dd5860 --portal 10.10.10.15:3260 --logout

----链路全部登出
iscsiadm -m node --logoutall=all

--新增加iscsi存储目标后刷新
iscsiadm -m session -R

执行完login,在fdisk -l就能看到,两条链路每个链路对应5块盘,系统一共显示10块,实际上还是5块,下图上的sdh和sdi实际上就是1块

【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV

另外有iscsi需要了解:

 
   
   
 
--iscsi主目录
/var/lib/iscsi/

--查看发现的路径
/var/lib/iscsi/send_targets

--节点信息
/var/lib/iscsi/nodes

【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV

五、Multipath多路径配置

上阶段完成后,可以到系统多了一些磁盘,两条链路,每条5个,共10个盘。我们现在使用多路径就能让两块模拟成一块,并且多路径还有负载均衡的作用
【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV

1.查看状态并创建配置文件

 
   
   
 
--查看多路径状态,提示配置文件不存在,多路径软件已经在第四部分开头装过了
multipath –ll

【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV

根据提示创建

 
   
   
 
--创建
/sbin/mpathconf --enable

--查询状态已经没有报错提示了
multipath –ll

3.多路径软件添加至内核模块中

 
   
   
 
--检查是否已经在内核中
lsmod |grep multipath

--添加到内核
modprobe dm-multipath
modprobe dm-round-robin
modprobe dm-service-time

4.multipathd服务

 
   
   
 
--查看状态
systemctl status multipathd

--启动
systemctl start multipathd

--设置开机启动
systemctl enable multipathd

--查看开机启动列表
systemctl list-unit-files|grep multipathd

--重新加载
systemctl reload multipathd

5.编辑/etc/multipath.conf配置文件

刚才生成的配置文件中有示例,可以参照添加,另外具体的参数说明,红帽有中文配置文档,文章最后有下载链接
下面是这个环境我的配置:

 
   
   
 
--下面配置中的wwid是根据SCSI标准,每个SCSI磁盘都有的一个唯一ID,类似于网卡的MAC地址
--获取wwid方式:/usr/lib/udev/scsi_id --whitelisted --device=/dev/sdb
--vi /etc/multipath.conf

defaults {
user_friendly_names yes
find_multipaths yes --多路径忽略本地磁盘
path_grouping_policy multibus
failback immediate
no_path_retry fail
}

blacklist {
devnode "^sda"
}

multipaths {
multipath {
wwid 14f504e46494c45524174344177492d424f53682d4b4e6f6c
alias mpatha
}

multipath {
wwid 14f504e46494c45524d39495237512d706d7a4c2d30326a43
alias mpathb
}

multipath {
wwid 14f504e46494c455256416b3755742d6e7666472d37516b62
alias mpathc
}

multipath {
wwid 14f504e46494c45526f67444277622d6257744e2d6e566e44
alias mpathd
}

multipath {
wwid 14f504e46494c4552666a325731562d766455382d394c6a4d
alias mpathe
}
}

devices {
device {
vendor "COMPAQ "
product "HSV110 (C)COMPAQ"
path_grouping_policy multibus
getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
path_checker readsector0
path_selector "round-robin 0"
hardware_handler "0"
failback 15
rr_weight priorities
no_path_retry queue
}
}

修改完重启服务,不生效的话再重启系统init 6

6.负载均衡测试

 
   
   
 
--下面使用dd命令进行测试
dd if=/dev/zero of=/dev/mapper/mpatha

--新开tab页执行,可见实现负载均衡
iostat 2

--在vm中断掉第二块网卡,再次执行上面dd 可以看到就1个链路了,但是可以正常使用

【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV

 
   
   
 
--查看多路径状态,可见链路状态,wwid,聚合情况
multipath -ll

【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV

说明:

  • 其中/dev/mapper/mpathn 是软件虚拟出来的多路径设备,可以被我们用来挂载使用

  • /dev/dm-n 这个是软件自身使用的,不能被软件以外使用,不可挂载,但是rac是使用这个配置UDEV

六、UDEV绑定

不用分区!

 
   
   
 
--查看磁盘大小
lsblk|grep mpath|sort|uniq

--获取名称和ID,下面是两种方式
cat /etc/multipath/bindings |grep -v '#'
udevadm info --query=all --name=/dev/mapper/mpatha |grep -i DM_UUID

--创建UDEV规则文件
cd /etc/udev/rules.d
touch 99-oracle-asmdevices.rules

--配置方式1(见下方截图):
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-14f504e46494c45524174344177492d424f53682d4b4e6f6c",SYMLINK+="asmdisk1",OWNER="grid",GROUP="asmadmin",MODE="0660"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-14f504e46494c45524d39495237512d706d7a4c2d30326a43",SYMLINK+="asmdisk2",OWNER="grid",GROUP="asmadmin",MODE="0660"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-14f504e46494c455256416b3755742d6e7666472d37516b62",SYMLINK+="asmdisk3",OWNER="grid",GROUP="asmadmin",MODE="0660"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-14f504e46494c45526f67444277622d6257744e2d6e566e44",SYMLINK+="asmdisk4",OWNER="grid",GROUP="asmadmin",MODE="0660"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-14f504e46494c4552666a325731562d766455382d394c6a4d",SYMLINK+="asmdisk5",OWNER="grid",GROUP="asmadmin",MODE="0660"

--配置方式2(见下方截图):
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-14f504e46494c45524174344177492d424f53682d4b4e6f6c",RUN+="/bin/sh -c 'mknod /dev/asmdisk1 b $major $minor; chown grid:asmadmin /dev/asmdisk1; chmod 0660 /dev/asmdisk1'"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-14f504e46494c45524d39495237512d706d7a4c2d30326a43",RUN+="/bin/sh -c 'mknod /dev/asmdisk2 b $major $minor; chown grid:asmadmin /dev/asmdisk2; chmod 0660 /dev/asmdisk2'"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-14f504e46494c455256416b3755742d6e7666472d37516b62",RUN+="/bin/sh -c 'mknod /dev/asmdisk3 b $major $minor; chown grid:asmadmin /dev/asmdisk3; chmod 0660 /dev/asmdisk3'"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-14f504e46494c45526f67444277622d6257744e2d6e566e44",RUN+="/bin/sh -c 'mknod /dev/asmdisk4 b $major $minor; chown grid:asmadmin /dev/asmdisk4; chmod 0660 /dev/asmdisk4'"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-14f504e46494c4552666a325731562d766455382d394c6a4d",RUN+="/bin/sh -c 'mknod /dev/asmdisk5 b $major $minor; chown grid:asmadmin /dev/asmdisk5; chmod 0660 /dev/asmdisk5'"

--配置方式3(这个方式是找sd开头的设备,看视频有人是这么配置,不太明白已经聚合链路为什么还用sd*,留个坑):
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode", RESULT=="14f504e46494c45523143594e70582d5777694a2d7a4c6657", RUN+="/bin/sh -c 'mknod /dev/asm-arch002 b $major $minor; chown grid:asmdba /dev/asm-arch002; chmod 0660 /dev/asm-arch002'"

--【非生产操作】配置完成,重启UDEV(新装环境可以这么操作,但是生产环境不能直接重启)
systemctl restart systemd-udevd.service
udevadm control --reload-rules
udevadm trigger

--【生产操作】生产环境操作,触发变更!
/sbin/udevadm trigger --type=devices --action=change

【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV
【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV

七、总结

  1. 存储多路径配置一般是由存储工程师完成,交给DBA配置就行,但是这不代表DBA不应该掌握;

  2. 学习这块知识暴露出对存储、网络知识的不足,应该单独拿出时间学习整理一下(HBA、SAN、PCIE、ISCSI等等);

  3. Multipath配置有红帽官方文档,6到7版本都有,深入学习应参照;

  4. 本篇已经尽可能按照标准方式整理过程,但是不代表完全没有错误,还请发现问题或者有疑问的朋友尽可能提出。