配置ESDisk
1. 原理说明
CData For PolarDB中有一个CFabric模块,其是一套分布式存储软件,可以为PolarDB提供一个共享盘,此共享盘我们称之为ESDisk。
CFabric把本地的磁盘组合成一个高可用的ESdisk共享盘,ESDisk的意思是elastic shared disk。
2. 环境准备
2.1 机器资源
有三台机器:cdata-book-01-03:
主机名 | IP |
---|---|
cdata-book-01 | 10.197.165.21 |
cdata-book-02 | 10.197.165.22 |
cdata-book-03 | 10.197.165.23 |
其中每台机器提供2块盘,以cd-polardb-book01-03为例:
- /dev/disk/by-path/pci-0000:00:09.0-scsi-0:0:0:0 : 这是一个盘的链接,实际指向/dev/sdb
- /dev/disk/by-path/pci-0000:00:09.0-scsi-0:0:1:0 : 这是一个盘的链接,实际指向/dev/sdc
2.2 安装依赖
# 在三台机器上分别执行
yum install mdadm xerces-c.x86_64 device-mapper-multipath device-mapper-multipath-libs device-mapper device-mapper-libs device-mapper-event device-mapper-event-libs iscsi-initiator-utils
2.3 关闭SELINUX
将/etc/selinux/config
中的SELINUX改为disabled
,然后重启主机。
验证是否关闭
# 打印出来为Disabled时,即为关闭,打印为Permissive表示只记录不阻拦。
getenforce
3. ESDisk配置
3.1 配置cdpolar.yml
在cdata server端所在主机上修改配置
cd /opt/clup/conf
cp example_cdpolar.yml cdpolar.yml
vim cdpolar.yml
示例配置如下:
hosts:
# 和主机名一致
cdata-book-01:
# 主网卡ip地址,server端需要可以ping通
mip: 10.197.165.21
# 两个辅助网卡的地址,配置共享存储的主机之间互相可以ping通
sips: [172.16.1.21,172.16.2.21]
# 辅助网卡的网段,与上面的sips一一对应,网段不能相同
acl: [172.16.1.0/24,172.16.2.0/24]
iscsi:
# 主机硬盘位置,由于sdx在重启后可能会变化,所以这里指定硬盘pci插槽地址,重启后不会变化
sata01: /dev/disk/by-path/pci-0000:00:09.0-scsi-0:0:0:0
sata02: /dev/disk/by-path/pci-0000:00:09.0-scsi-0:0:1:0
cdata-book-02:
mip: 10.197.165.22
sips: [172.16.1.22,172.16.2.22]
acl: [172.16.1.0/24,172.16.2.0/24]
iscsi:
sata01: /dev/disk/by-path/pci-0000:00:09.0-scsi-0:0:0:0
sata02: /dev/disk/by-path/pci-0000:00:09.0-scsi-0:0:1:0
cdata-book-03:
mip: 10.197.165.23
sips: [172.16.1.23,172.16.2.23]
acl: [172.16.1.0/24,172.16.2.0/24]
iscsi:
sata01: /dev/disk/by-path/pci-0000:00:09.0-scsi-0:0:0:0
sata02: /dev/disk/by-path/pci-0000:00:09.0-scsi-0:0:1:0
# 共享存储分片
mds:
# 分片1
1:
# 这里指定具体的硬盘,使用HOST.DISK来表示,HOST和DISK与上面hosts里的配置对应
# 示例:host为cdata-book-01的sata01硬盘可以表示为 cdata-book-01.sata01
cfdisks: [cdata-book-01.sata01, cdata-book-02.sata01, cdata-book-03.sata01]
# 软RAID类型,这里为RAID 1
raid: 1
metadata: 1.2
bitmap_chunk: 1M #可根据硬盘大小来设定,硬盘越大设越大,总和7T的硬盘推荐设置16M
2:
raid: 1
metadata: 1.2
bitmap_chunk: 1M
cfdisks: [cdata-book-02.sata02, cdata-book-01.sata02, cdata-book-03.sata02]
esdisks:
# 指定esdisk名称(pfs_disk_name)和使用的分片
nvmecsu01: [1, 2]
3.2 初始化操作系统环境
在安装了clup管理模块的机器上配置环境变量(root):
PATH=/opt/clup/bin:$PATH
并在该机器上执行下面的命令:(-n表示主机名,可cdpolar md list查看主机名)
# 初始化系统环境
# 若报错,可加-v 执行命令展示更多信息
cdpolar init_env os -n cdata-book-01
cdpolar init_env os -n cdata-book-02
cdpolar init_env os -n cdata-book-01
eg:
如果我们主机上有infiniband网络,上面的命令还会启动infiniband的opensm服务,即生成服务文件/etc/systemd/system/cfabric_sm@.service:
# /etc/systemd/system/cfabric_sm@.service
[Unit]
Description=cfabric_sm
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/sbin/opensm --config /opt/clup-agent/conf/sm%i.conf
[Install]
WantedBy=multi-user.target
做完上面的操作,把这三台数据库主机重启一下,等重启之后,在做后续的操作。
检查是否初始化成功的方式(每台主机每个都需要成功):
(1)初始化机器后会在/etc/systemd/system目录下生成一个cfabric_sm@.service服务,运行的是cfabric_sm@1.service和cfabric_sm@2.service两个服务。
检查有无生成cfabric_sm@.service服务文件。
ls -l /etc/systemd/system
(2)初始化机器后查看ps -ef | grep opensm应有cfabric_sm@1或者cfabric_sm@2两个进程在运行。
ps -ef | grep opensm
(3)使用ibstat命令查看应两个接口状态应都为active。
ibstat
(4)查看存储服务状态,两个cfabric_sm服务应都是active状态:
systemctl status cfabric_sm@1
systemctl status cfabric_sm@2
若状态为failed可启动该服务:
systemctl start cfabric_sm@2
可能会报如下警告:
Warning: The unit file, source configuration file or drop-ins of cfabric_sm@2.service changed on disk. Run ‘systemctl daemon-reload’ to reload units.
输入以下命令然后再次启动该服务
systemctl daemon-reload
3.3 格式化盘
这里的格式化是指ESDisk本身的格式化操作。
给ESDisk使用的物理硬盘上面可能建过文件系统或做为其它用户,为了保证格式化成功,需要把这些此磁盘的盘头清零,注意此动作会把这些盘上的数据都破坏掉:
dd if=/dev/zero of=/dev/sdX bs=10MB count=1
dd if=/dev/zero of=/dev/sdY bs=10MB count=1
注意要把上面的sdX和sdY换成实际给ESDisk使用的数据盘的盘符,千万不能搞错了,特别是前面重启一下机器后盘符可能会发现变化(可以通过盘的大小或其它的特征来确定是哪块盘)!!!
执行一下ESDisk的格式化:(-e表示esdisk名称,可cdpolar esdisk list查看esdisk名称)
cdpolar esdisk format -e nvmecsu01
运行后需要输入I know the danger来进行格式化盘。如果格式化失败,请先查找原因后,再进行后续的操作。(可加-v 执行该命令显示更多信息)
格式化成功示例:(注意分片号为实际分片号)
3.4 开启共享
首次开启共享时请先关闭共享在开启共享,防止共享实际未完全关闭。
关闭共享
cdpolar esdisk unshare -e nvmecsu01
开启共享
cdpolar esdisk share -e nvmecsu01
查看是否共享成功:
cdpolar esdisk status
正确示例:
3.5 挂载esdisk
查看某个esdisk下的硬盘列表
cdpolar esdisk list
挂载到其中一个机器(若只有一个esdisk,则可省略-e nvmecsu01)
cdpolar esdisk attach -n cdata-book-01 -e nvmecsu01
卸载esdisk(与挂载类似,若只有一个esdisk,则可省略-e nvmecsu01)
cdpolar esdisk detach -n cdata-book-01 -e nvmecsu01
查看其中一个机器的esdisk挂载状态,online表示已挂载、offline表示未挂载
cdpolar esdisk status -n cdata-book-01
可加-p显示更详细的信息,包括各机器的存储路径的使用情况
cdpolar esdisk status -n cdata-book-01 -p
其中path_type的主备关系,即使用哪台主机的存储路径是由主路径主机决定的。可通过如下命令查看主路径主机。
其中primary_path_host列即为主路径主机。
cdpolar esdisk status
若主路径主机发生故障,可把主路径切换到其他主机上
-m 1 表示指定分片,1为分片号(md_id)
cdpolar md switch -m 1 -n cssrv05