CentOS 7环境部署和配置GFS2共享存储
案例说明:
在CentOS 7环境部署gfs2共享存储应用。
系统环境:
[root@node201 ~]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
系统架构:
[root@node203 ~]# cat /etc/hosts
192.168.1.201 node201
192.168.1.202 node202
192.168.1.203 node203 iscsi server
如下所示,通过iscsi server建立共享存储,在集群节点对共享存储建立gfs2文件系统应用:
一、系统环境准备
如下所示,所有节点安装以下软件:
yum -y install gfs2-utils lvm2-cluster
yum -y install lvm2-sysvinit
yum -y pacemaker corosync
二、配置集群
gfs2文件系统用于集群共享存储环境,必须在集群环境下使用,不能用于单实例环境:
1、建立用户认证
如下所示,在集群节点及qdevice节点建立哈cluster用户并设置密码:
[root@node201 ~]# id hacluster
uid=003(hacluster) gid=1004(haclient) groups=1004(haclient)
[root@node202 ~]# id hacluster
uid=5001(hacluster) gid=5010(haclient) groups=5010(haclient)
[root@node203 ~]# id hacluster
uid=5001(hacluster) gid=1004(haclient) groups=1004(haclient)
如下所示,在集群节点建立到qdevice节点的认证:
[root@node201 ~]# pcs cluster auth node203
Username: hacluster
Password:
node203: Authorized
[root@node202 ~]# pcs cluster auth node203
Username: hacluster
Password:
node203: Authorized
2、创建集群
如下所示,创建集群test_cluster:
[root@node201 pcs]# pcs cluster setup --name test_cluster node201 node202 node203 --force
Destroying cluster on nodes: node201, node202, node203...
node202: Stopping Cluster (pacemaker)...
node203: Stopping Cluster (pacemaker)...
node201: Stopping Cluster (pacemaker)...
node203: Successfully destroyed cluster
node202: Successfully destroyed cluster
node201: Successfully destroyed cluster
Sending 'pacemaker_remote authkey' to 'node201', 'node202', 'node203'
node201: successful distribution of the file 'pacemaker_remote authkey'
node203: successful distribution of the file 'pacemaker_remote authkey'
node202: successful distribution of the file 'pacemaker_remote authkey'
Sending cluster config files to the nodes...
node201: Succeeded
node202: Succeeded
node203: Succeeded
Synchronizing pcsd certificates on nodes node201, node202, node203...
node201: Success
node203: Success
node202: Success
Restarting pcsd on the nodes in order to reload the certificates...
node201: Success
node203: Success
node202: Success
[root@node201 pcs]# pcs cluster start --all
node201: Starting Cluster (corosync)...
node202: Starting Cluster (corosync)...
node203: Starting Cluster (corosync)...
node203: Starting Cluster (pacemaker)...
node202: Starting Cluster (pacemaker)...
node201: Starting Cluster (pacemaker)...
[root@node201 pcs]# pcs cluster status
Cluster Status:
Stack: unknown
Current DC: NONE
Last updated: Thu Aug 29 19:24:45 2024
Last change: Thu Aug 29 19:24:40 2024 by hacluster via crmd on node203
3 nodes configured
0 resource instances configured
PCSD Status:
node203: Online
node201: Online
node202: Online
[root@node201 pcs]# pcs cluster enable --all
node201: Cluster Enabled
node202: Cluster Enabled
node203: Cluster Enabled
3、集群节点corosync配置
1)集群节点配置corosync.conf(所有集群节点)
[root@node202 corosync]# cat /etc/corosync/corosync.conf |grep -v ^#|grep -v ^$|grep -v '#'
totem {
version: 2
cluster_name: test_cluster
secauth: off
transport: udpu
}
nodelist {
node {
ring0_addr: node201
nodeid: 1
}
node {
ring0_addr: node202
nodeid: 2
}
node {
ring0_addr: node203
nodeid: 3
}
}
quorum {
provider: corosync_votequorum
device {
model: net
votes: 1
net {
algorithm: ffsplit
host: node203
}
}
}
logging {
to_logfile: yes
logfile: /var/log/cluster/corosync.log
to_syslog: yes
}
quorum配置说明:
- cluster_name: 此项设置的集群名,在之后格式化逻辑卷为gfs2类型时要用到。
- clear_node_high_bit: yes:dlm服务需要,否则无法启动。
- quorum {}模块:集群选举投票设置,必需配置。如果是2节点的集群,可参考如下配置:
quorum {
provider: corosync_votequorum # 启动了votequorum
expected_votes: 7 # 7表示,7个节点,quorum为4。如果设置了nodelist参数,expected_votes无效
wait_for_all: 1 # 值为1表示,当集群启动,集群quorum被挂起,直到所有节点在线并加入集群,这个参数是Corosync 2.0新增的。
last_man_standing: 1 # 为1表示,启用LMS特性。默认这个特性是关闭的,即值为0。
# 这个参数开启后,当集群的处于表决边缘(如expected_votes=7,而当前online nodes=4),处于表决边缘状态超过last_man_standing_window参数指定的时间,
# 则重新计算quorum,直到online nodes=2。如果想让online nodes能够等于1,必须启用auto_tie_breaker选项,生产环境不推荐。
last_man_standing_window: 10000 # 单位为毫秒。在一个或多个主机从集群中丢失后,重新计算quorum
2)重启corosync服务
[root@node201 corosync]# systemctl restart corosync
[root@node201 corosync]# systemctl status corosync
三、配置iSCSI共享存储
具体配置见:
文档:CentOS 7配置iSCSI共享存储案例.note
链接:https://note.youdao.com/ynoteshare/index.html?id=96ee40b99499d1d4695d0838cf988f21&type=note&_time=1725353430791
查看集群节点磁盘信息,如下所示,sdc为iscsi共享存储:
四、客户端创建gfs文件系统
1、查看lvm配置
- 开启lvm的集群模式。
- 这个命令会自动修改/etc/lvm/lvm.conf配置文件中的locking_type和use_lvmetad选项的值
- 检查 LVM2 的锁定类型是否为群集感知。/etc/lvm/lvm.conf 中的关键字 locking_type 必须包含值 3(默认值为 1)。如果需要,将此配置复制到所有节点。
- 检查是否已禁用 lvmetad 守护程序,因为它不能与 cLVM 搭配使用。在 /etc/lvm/lvm.conf 中,关键字 use_lvmetad 必须设置为 0(默认值为 1)。如果需要,将此配置复制到所有节点。
[root@node201 ~]# lvmconf --enable-cluster
[root@node201 ~]# cat /etc/lvm/lvm.conf|egrep -E 'locking_type|use_lvm'|grep -v '#'
locking_type = 3
use_lvmetad = 0
2、查看集群配置
[root@node201 ~]# corosync-quorumtool -s
Quorum information
------------------
Date: Tue Sep 3 16:59:31 2024
Quorum provider: corosync_votequorum
Nodes: 3
Node ID: 1
Ring ID: 1.d0
Quorate: Yes
Votequorum information
----------------------
Expected votes: 4
Highest expected: 4
Total votes: 4
Quorum: 3
Flags: Quorate Qdevice
Membership information
----------------------
Nodeid Votes Qdevice Name
1 1 A,V,NMW node201 (local)
2 1 A,V,NMW node202
3 1 A,V,NMW node203
0 1 Qdevice
3、启动集群服务(all nodes)
在 LVM 之外使用 GFS2 文件系统时,Red Hat 只支持在 CLVM 逻辑卷中创建的 GFS2 文件系统。CLVM 包含在 Resilient Storage Add-On 中。这是在集群范围内部署 LVM,由在集群中管理 LVM 逻辑卷的 CLVM 守护进程 clvmd 启用。该守护进程可让 LVM2 在集群间管理逻辑卷,允许集群中的所有节点共享该逻辑卷
[root@node201 ~]# systemctl enable dlm
[root@node201 ~]# systemctl start dlm
[root@node201 ~]# systemctl enable clvmd
[root@node201 ~]# systemctl start clvmd
如下所示,clvmd服务状态:
4、创建gfs文件系统
1)创建物理卷
[root@node201 ~]# pvcreate /dev/sdc
WARNING: dos signature detected on /dev/sdc at offset 510. Wipe it? [y/n]: y
Wiping dos signature on /dev/sdc.
Physical volume "/dev/sdc" successfully created.
2)查看物理卷信息
[root@node201 ~]# pvscan
PV /dev/sda2 VG centos lvm2 [102.39 GiB / 64.00 MiB free]
PV /dev/sdc lvm2 [4.00 GiB]
Total: 2 [106.39 GiB] / in use: 1 [102.39 GiB] / in no VG: 1 [4.00 GiB]
[root@node201 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 102.39g 64.00m
/dev/sdc lvm2 --- 4.00g 4.00g
3)创建集群卷组
[root@node201 ~]# vgcreate -Ay -cy gfsvg /dev/sdc
Clustered volume group "gfsvg" successfully created
[root@node201 ~]# vgdisplay /dev/gfsvg
--- Volume group ---
VG Name gfsvg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
Clustered yes
Shared no
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size <3.97 GiB
PE Size 4.00 MiB
Total PE 1016
Alloc PE / Size 0 / 0
Free PE / Size 1016 / <3.97 GiB
VG UUID mFPDmx-yrW4-e4EZ-mqKE-Ya25-lHWw-yKdY3i
4)创建逻辑卷
[root@node201 ~]# lvcreate -L 2G -n lv_gfs1 gfsvg
WARNING: LVM2_member signature detected on /dev/gfsvg/lv_gfs1 at offset 536. Wipe it? [y/n]: y
Wiping LVM2_member signature on /dev/gfsvg/lv_gfs1.
Logical volume "lv_gfs1" created.
[root@node201 ~]# lvdisplay
--- Logical volume ---
LV Path /dev/gfsvg/lv_gfs1
LV Name lv_gfs1
VG Name gfsvg
LV UUID Pjy2Qy-4MXj-pR87-2NcQ-9E02-5BF4-eHz3XR
LV Write Access read/write
LV Creation host, time node201, 2024-09-02 19:43:43 +0800
LV Status available
# open 0
LV Size 2.00 GiB
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
# 查看逻辑卷信息
[root@node201 ~]# lvs -o +devices gfsvg
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices
lv_gfs1 gfsvg -wi-a----- 2.00g /dev/sdc(0)
5)创建gfs文件系统
[root@node201 ~]# mkdir /mnt/shgfs
# 创建gfs2文件系统
[root@node201 ~]# mkfs.gfs2 -p lock_dlm -t test_cluster:gfs2 -j 2 /dev/gfsvg/lv_gfs1
/dev/gfsvg/lv_gfs1 is a symbolic link to /dev/dm-3
This will destroy any data on /dev/dm-3
Are you sure you want to proceed? (Y/N): y
Discarding device contents (may take a while on large devices): Done
Adding journals: Done
Building resource groups: Done
Creating quota file: Done
Writing superblock and syncing: Done
Device: /dev/gfsvg/lv_gfs1
Block size: 4096
Device size: 2.00 GB (524288 blocks)
Filesystem size: 2.00 GB (524285 blocks)
Journals: 2
Journal size: 16MB
Resource groups: 10
Locking protocol: "lock_dlm"
Lock table: "test_cluster:gfs2"
UUID: 445e065a-08e2-4d0b-81cc-5325cc444c54
# 挂载gfs2文件系统
[root@node201 ~]# mount -t gfs2 /dev/gfsvg/lv_gfs1 /mnt/shgfs
[root@node201 ~]# mount -v |grep gfs
/dev/mapper/gfsvg-lv_gfs1 on /mnt/shgfs type gfs2 (rw,relatime)
# 访问gfs2文件系统
[root@node201 ~]# cd /mnt/shgfs/
[root@node201 shgfs]# touch gfs1
[root@node201 shgfs]# ls -lh
total 4.0K
-rw-r--r-- 1 root root 0 Sep 2 19:46 gfs1
mkfs创建gfs2文件系统格式:
mkfs.gfs2 -p LockProtoName -t LockTableName -j NumberJournals BlockDevice
- LockProtoName
指定要使用的锁定协议名称,集群的锁定协议为 lock_dlm。 - LockTableName
这个参数是用来指定集群配置中的 GFS2 文件系统。它有两部分,用冒号隔开(没有空格)如下:ClusterName:FSName
ClusterName,用来创建 GFS2 文件系统的集群名称。
FSName,文件系统名称,长度可在 1-16 个字符之间。该名称必须与集群中所有 lock_dlm 文件系统以及每个本地节点中的所有文件系统(lock_dlm 和 lock_nolock)不同。 - Number
指定由 mkfs.gfs2 命令生成的日志数目。每个要挂载文件系统的节点都需要一个日志。对于 GFS2 文件系统来说,以后可以添加更多的日志而不会增大文件系统。 - BlockDevice
指定逻辑卷或者物理卷。
附件:常见错误
1、 运行pvs、vgcreate等lvm相关命令时提示connect()等错误
错误示例如下,原因是clvmd没有正常启动
connect() failed on local socket: 没有那个文件或目录
Internal cluster locking initialisation failed.
WARNING: Falling back to local file-based locking.
Volume Groups with the clustered attribute will be inaccessible.
运行pvs、vgcreate等lvm相关命令时提示Skipping clustered volume group XXX或者Device XXX excluded by a filter
这通常是做了vgremove等操作后、或块设备上存在旧的卷组信息导致的。
2、系统无clvmd服务
如下所示,启动clvmd服务,提示无此service:
[root@node202 ~]# systemctl start clvmd
Failed to start clvmd.service: Unit not found.
[root@node202 ~]# ls /etc/rc.d/init.d/clvmd
ls: cannot access /etc/rc.d/init.d/clvmd: No such file or directory
安装lvm2-sysvinit软件:
[root@node202 ~]# yum install -y lvm2-sysvinit-2.02.187-6.el7_9.5.x86_64
[root@node202 ~]# ls /etc/rc.d/init.d/clvmd
/etc/rc.d/init.d/clvmd