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

2021-05-11 14:17:34 浏览数 (1)

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.下载

代码语言:javascript复制
--下载地址,目前可下载到 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. 点击开启此虚拟机,开始安装

安装步骤:

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

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

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

  • 登陆地址 https://192.168.10.55:446/
  • 默认账号密码 openfiler /password

三、Openfiler配置

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

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

点击Edit Disk下面的sbdsbcsdd进去创建物理卷,这里可以设置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.检查安装包

代码语言:javascript复制
--需要安装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.客户端发现多路径

代码语言:javascript复制
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还是查看不到磁盘,执行下面登陆命令就能看到磁盘了

代码语言:javascript复制
--全部登陆
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需要了解:

代码语言:javascript复制
--iscsi主目录
/var/lib/iscsi/

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

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

五、Multipath多路径配置

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

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

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

根据提示创建

代码语言:javascript复制
--创建
/sbin/mpathconf --enable

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

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

代码语言:javascript复制
--检查是否已经在内核中
lsmod |grep multipath

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

4.multipathd服务

代码语言:javascript复制
--查看状态
systemctl status multipathd

--启动
systemctl start multipathd

--设置开机启动
systemctl enable multipathd

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

--重新加载
systemctl reload multipathd

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

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

代码语言:javascript复制
--下面配置中的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.负载均衡测试

代码语言:javascript复制
--下面使用dd命令进行测试
dd  if=/dev/zero  of=/dev/mapper/mpatha

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

--在vm中断掉第二块网卡,再次执行上面dd 可以看到就1个链路了,但是可以正常使用
代码语言:javascript复制
--查看多路径状态,可见链路状态,wwid,聚合情况
multipath -ll

说明:

  • 其中/dev/mapper/mpathn 是软件虚拟出来的多路径设备,可以被我们用来挂载使用
  • /dev/dm-n 这个是软件自身使用的,不能被软件以外使用,不可挂载,但是rac是使用这个配置UDEV

六、UDEV绑定

不用分区!

代码语言:javascript复制
--查看磁盘大小
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

七、总结

  1. 存储多路径配置一般是由存储工程师完成,交给DBA配置就行,但是这不代表DBA不应该掌握;
  2. 学习这块知识暴露出对存储、网络知识的不足,应该单独拿出时间学习整理一下(HBA、SAN、PCIE、ISCSI等等);
  3. Multipath配置有红帽官方文档,6到7版本都有,深入学习应参照;
  4. 本篇已经尽可能按照标准方式整理过程,但是不代表完全没有错误,还请发现问题或者有疑问的朋友尽可能提出。

0 人点赞