【多路径】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安装前配置:
打开【VMware Workstation 15 Pro】
点击【创建新的虚拟机】
点击【自定义(高级)】
【硬件兼容性】选择【Workstation 15.x】
选择【稍后安装操作系统】
选择【Linux】,版本选择【其他 Linux 2.6.x 内核64位】,因为Openfier的iso内核是2.6
设置虚拟机名称及位置
设置【处理器数量】2【每个处理器的内核数量】2
设置【此虚拟机的内存】4096M
设置网络连接NAT
I/O控制器类型【LSI Logic(推荐)】
虚拟磁盘类型【SCSI】
【创建新的虚拟磁盘】
最大磁盘大小【20G】【将虚拟磁盘存储为单个文件】
磁盘文件名称,我用默认
完成
编辑虚拟机设置
添加【网络适配器】选择仅主机模式模式,这是第二块网卡
添加【硬盘】,加3块20G硬盘,勾选【独立】【永久】
CD/DVD选择刚才下载好的镜像
点击开启此虚拟机,开始安装
安装步骤:
这里使用sda作为系统安装盘:swap 4096M,/boot 1024M /剩下所有
下面就开始正式安装了,几分钟就装好,reboot后显示登陆页面
账号:root
密码:刚才设置的
到此就完成了Openfiler的安装,可以使用WEB界面访问:
默认账号密码 openfiler /password
三、Openfiler配置
一般的配置流程是:pv->raid)->vg->lv->map,不用raid可以跳过
1.创建PV-物理卷(Physical Volume)
点击Edit Disk下面的sbd\sbc\sdd进去创建物理卷,这里可以设置RAID array member,如果要创建RAID,可以点右侧【Software RAID】
三个盘PV都创建完成可见
2.创建VG-卷组(Volume Group)
3.创建LV-逻辑卷(Logical Volume)
点击【Volumes】-右侧【Add Volume】
输入逻辑卷的名称、描述、设置大小,Filesystem / Volume type选择block,最后create
我们按照之前的规划添加逻辑卷
创建完成
4.服务端配置
启动iscsi_target服务,并设置开机启动
将逻辑卷映射到主机
再点击【ISCSI Targets】里的【LUN Mapping】
配置访问控制
导航栏选择【SYSTEM】-最下方【Network Access Configuration】,如下添加
配置network acl
到这里服务端配置完成。
四、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
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块
另外有iscsi需要了解:
--iscsi主目录
/var/lib/iscsi/
--查看发现的路径
/var/lib/iscsi/send_targets
--节点信息
/var/lib/iscsi/nodes
五、Multipath多路径配置
上阶段完成后,可以到系统多了一些磁盘,两条链路,每条5个,共10个盘。我们现在使用多路径就能让两块模拟成一块,并且多路径还有负载均衡的作用
1.查看状态并创建配置文件
--查看多路径状态,提示配置文件不存在,多路径软件已经在第四部分开头装过了
multipath –ll
根据提示创建
--创建
/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个链路了,但是可以正常使用
--查看多路径状态,可见链路状态,wwid,聚合情况
multipath -ll
说明:
其中/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
七、总结
存储多路径配置一般是由存储工程师完成,交给DBA配置就行,但是这不代表DBA不应该掌握;
学习这块知识暴露出对存储、网络知识的不足,应该单独拿出时间学习整理一下(HBA、SAN、PCIE、ISCSI等等);
Multipath配置有红帽官方文档,6到7版本都有,深入学习应参照;
本篇已经尽可能按照标准方式整理过程,但是不代表完全没有错误,还请发现问题或者有疑问的朋友尽可能提出。