7.2. 在集群中配置加密的 GFS2 文件系统
您可以按照以下流程创建一个包含 LUKS 加密的 GFS2 文件系统的 Pacemaker 集群。在这个示例中,您在逻辑卷上创建一个 GFS2 文件系统,并加密文件系统。使用 crypt
资源代理支持加密 GFS2 文件系统,该代理支持 LUKS 加密。
此流程有三个部分:
- 在 Pacemaker 集群中配置共享逻辑卷
-
加密逻辑卷并创建一个
crypt
资源 - 使用 GFS2 文件系统格式化加密的逻辑卷并为集群创建文件系统资源
7.2.1. 在 Pacemaker 集群中配置共享逻辑卷
先决条件
- 在两个集群节点上安装并启动集群软件,并创建一个基本的双节点集群。
- 为集群配置隔离。
有关创建 Pacemaker 集群并为集群配置隔离的详情,请参考 使用 Pacemaker 创建红帽高可用性集群。
步骤
在集群中的两个节点上,启用与您的系统架构对应的弹性存储存储库。例如,要为 x86_64 系统启用 Resilient Storage 仓库,您可以输入以下
subscription-manager
命令:# subscription-manager repos --enable=rhel-9-for-x86_64-resilientstorage-rpms
请注意,弹性存储存储库是高可用性存储库的超集。如果启用弹性存储存储库,则不需要启用高可用性存储库。
在集群的两个节点上安装
lvm2-lockd
、gfs2-utils
和dlm
软件包。要支持这些软件包,您必须订阅 AppStream 频道和 Resilient Storage 频道。# dnf install lvm2-lockd gfs2-utils dlm
在集群的两个节点上,将
/etc/lvm/lvm.conf
文件中的use_lvmlockd
配置选项设置为use_lvmlockd=1
。... use_lvmlockd = 1 ...
将全局 Pacemaker 参数
no-quorum-policy
设置为freeze
。注意默认情况下,
no-quorum-policy
的值被设为stop
,这表示仲裁丢失时,剩余分区上的所有资源将立即停止。通常,这个默认行为是最安全、最优的选项,但与大多数资源不同,GFS2 要求使用 quorum 才可以正常工作。当使用 GFS2 挂载的应用程序和 GFS2 挂载都丢失时,就无法正确停止 GFS2 挂载。任何在没有 quorum 的情况下停止这些资源的尝试都会失败,并最终会在每次 quorum 都丢失时保护整个集群。要解决这个问题,请在使用 GFS2 时将
no-quorum-policy
设置为freeze
。这意味着,当 quorum 丢失时,剩余的分区将不会进行任何操作,直到 quorum 功能被恢复。[root@z1 ~]# pcs property set no-quorum-policy=freeze
设置
dlm
资源。这是在集群中配置 GFS2 文件系统所需的依赖软件包。这个示例创建dlm
资源作为名为locking
的资源组的一部分。[root@z1 ~]# pcs resource create dlm --group locking ocf:pacemaker:controld op monitor interval=30s on-fail=fence
克隆
locking
资源组,以便资源组可以在集群的两个节点上都活跃。[root@z1 ~]# pcs resource clone locking interleave=true
设置
lvmlockd
资源作为组locking
的一部分。[root@z1 ~]# pcs resource create lvmlockd --group locking ocf:heartbeat:lvmlockd op monitor interval=30s on-fail=fence
检查集群的状态,以确保在集群的两个节点上启动了
locking
资源组。[root@z1 ~]# pcs status --full Cluster name: my_cluster [...] Online: [ z1.example.com (1) z2.example.com (2) ] Full list of resources: smoke-apc (stonith:fence_apc): Started z1.example.com Clone Set: locking-clone [locking] Resource Group: locking:0 dlm (ocf::pacemaker:controld): Started z1.example.com lvmlockd (ocf::heartbeat:lvmlockd): Started z1.example.com Resource Group: locking:1 dlm (ocf::pacemaker:controld): Started z2.example.com lvmlockd (ocf::heartbeat:lvmlockd): Started z2.example.com Started: [ z1.example.com z2.example.com ]
在集群的一个节点中创建一个共享卷组。
注意如果您的 LVM 卷组包含一个或多个位于远程块存储(如 iSCSI 目标)上的物理卷,则红帽建议您确保服务在 Pacemaker 启动之前启动。有关为 Pacemaker 集群使用的远程物理卷配置启动顺序的详情,请参考 为不由 Pacemaker 管理的资源依赖项配置启动顺序。
以下命令在
/dev/sda1
上创建共享卷组shared_vg1
。[root@z1 ~]# vgcreate --shared shared_vg1 /dev/sda1 Physical volume "/dev/sda1" successfully created. Volume group "shared_vg1" successfully created VG shared_vg1 starting dlm lockspace Starting locking. Waiting until locks are ready...
在集群中的第二个节点上:
如果设备文件的使用是通过
lvm.conf
文件中的use_devicesfile = 1
参数启用的,请将共享设备添加到集群中第二个节点上的设备文件中。此功能默认为启用。[root@z2 ~]# lvmdevices --adddev /dev/sda1
为共享卷组启动锁管理器。
[root@z2 ~]# vgchange --lockstart shared_vg1 VG shared_vg1 starting dlm lockspace Starting locking. Waiting until locks are ready...
在集群的一个节点中创建共享逻辑卷。
[root@z1 ~]# lvcreate --activate sy -L5G -n shared_lv1 shared_vg1 Logical volume "shared_lv1" created.
为逻辑卷创建一个
LVM-activate
资源,以便在所有节点中自动激活逻辑卷。以下命令为卷组
shared_vg1
中的逻辑卷shared_lv1
创建名为sharedlv1
的LVM-activate
资源。此命令还会创建包含该资源的资源组shared_vg1
。在这个示例中,资源组的名称与包含逻辑卷的共享卷组的名称相同。[root@z1 ~]# pcs resource create sharedlv1 --group shared_vg1 ocf:heartbeat:LVM-activate lvname=shared_lv1 vgname=shared_vg1 activation_mode=shared vg_access_mode=lvmlockd
克隆新资源组。
[root@z1 ~]# pcs resource clone shared_vg1 interleave=true
配置排序限制,以确保首先启动包含
dlm
和lvmlockd
资源的locking
资源组。[root@z1 ~]# pcs constraint order start locking-clone then shared_vg1-clone Adding locking-clone shared_vg1-clone (kind: Mandatory) (Options: first-action=start then-action=start)
配置 colocation 约束,以确保
vg1
和vg2
资源组在与locking
资源组相同的节点上启动。[root@z1 ~]# pcs constraint colocation add shared_vg1-clone with locking-clone
验证步骤
在集群中的两个节点中,验证逻辑卷是否活跃。这可能会延迟几秒钟。
[root@z1 ~]# lvs LV VG Attr LSize shared_lv1 shared_vg1 -wi-a----- 5.00g [root@z2 ~]# lvs LV VG Attr LSize shared_lv1 shared_vg1 -wi-a----- 5.00g
7.2.2. 加密逻辑卷并创建 crypt 资源
先决条件
- 您已在 Pacemaker 集群中配置了共享逻辑卷。
步骤
在集群的一个节点中,创建一个包含 crypt 密钥的新文件,并在文件中设置权限,使其只能被 root 读取。
[root@z1 ~]# touch /etc/crypt_keyfile [root@z1 ~]# chmod 600 /etc/crypt_keyfile
创建 crypt 密钥。
[root@z1 ~]# dd if=/dev/urandom bs=4K count=1 of=/etc/crypt_keyfile 1+0 records in 1+0 records out 4096 bytes (4.1 kB, 4.0 KiB) copied, 0.000306202 s, 13.4 MB/s [root@z1 ~]# scp /etc/crypt_keyfile root@z2.example.com:/etc/
使用
-p
参数将 crypt keyfile 分发到集群中的其他节点,以保留您设置的权限。[root@z1 ~]# scp -p /etc/crypt_keyfile root@z2.example.com:/etc/
在要配置加密的 GFS2 文件系统的 LVM 卷中创建加密设备。
[root@z1 ~]# cryptsetup luksFormat /dev/shared_vg1/shared_lv1 --type luks2 --key-file=/etc/crypt_keyfile WARNING! ======== This will overwrite data on /dev/shared_vg1/shared_lv1 irrevocably. Are you sure? (Type 'yes' in capital letters): YES
创建 crypt 资源,作为
shared_vg1
卷组的一部分。[root@z1 ~]# pcs resource create crypt --group shared_vg1 ocf:heartbeat:crypt crypt_dev="luks_lv1" crypt_type=luks2 key_file=/etc/crypt_keyfile encrypted_dev="/dev/shared_vg1/shared_lv1"
验证步骤
确保 crypt 资源已创建了 crypt 设备,本例中为 /dev/mapper/luks_lv1
。
[root@z1 ~]# ls -l /dev/mapper/
...
lrwxrwxrwx 1 root root 7 Mar 4 09:52 luks_lv1 -> ../dm-3
...
7.2.3. 使用 GFS2 文件系统格式化加密的逻辑卷,并为集群创建文件系统资源
先决条件
- 您已加密逻辑卷并创建 crypt 资源。
步骤
在集群的一个节点中,使用 GFS2 文件系统格式化卷。每个挂载文件系统的节点都需要一个日志。确保为集群中的每个节点创建足够日志。锁表名称的格式为 ClusterName:FSName,其中 ClusterName 是为其创建 GFS2 文件系统的集群的名称,FSName 是文件系统名称,它对于所有集群上的
lock_dlm
文件系统必须是唯一的。[root@z1 ~]# mkfs.gfs2 -j3 -p lock_dlm -t my_cluster:gfs2-demo1 /dev/mapper/luks_lv1 /dev/mapper/luks_lv1 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/mapper/luks_lv1 Block size: 4096 Device size: 4.98 GB (1306624 blocks) Filesystem size: 4.98 GB (1306622 blocks) Journals: 3 Journal size: 16MB Resource groups: 23 Locking protocol: "lock_dlm" Lock table: "my_cluster:gfs2-demo1" UUID: de263f7b-0f12-4d02-bbb2-56642fade293
创建文件系统资源在所有节点中自动挂载 GFS2 文件系统。
不要将该文件系统添加到
/etc/fstab
文件中,因为它将作为 Pacemaker 集群资源进行管理。可以通过options=options
将挂载选项指定为资源配置的一部分。运行pcs resource describe Filesystem
命令以了解完整的配置选项。以下命令创建文件系统资源。这个命令在包含该文件系统逻辑卷资源的资源组中添加资源。
[root@z1 ~]# pcs resource create sharedfs1 --group shared_vg1 ocf:heartbeat:Filesystem device="/dev/mapper/luks_lv1" directory="/mnt/gfs1" fstype="gfs2" options=noatime op monitor interval=10s on-fail=fence
验证步骤
验证 GFS2 文件系统是否挂载到集群的两个节点上。
[root@z1 ~]# mount | grep gfs2 /dev/mapper/luks_lv1 on /mnt/gfs1 type gfs2 (rw,noatime,seclabel) [root@z2 ~]# mount | grep gfs2 /dev/mapper/luks_lv1 on /mnt/gfs1 type gfs2 (rw,noatime,seclabel)
检查集群的状态。
[root@z1 ~]# pcs status --full Cluster name: my_cluster [...] Full list of resources: smoke-apc (stonith:fence_apc): Started z1.example.com Clone Set: locking-clone [locking] Resource Group: locking:0 dlm (ocf::pacemaker:controld): Started z2.example.com lvmlockd (ocf::heartbeat:lvmlockd): Started z2.example.com Resource Group: locking:1 dlm (ocf::pacemaker:controld): Started z1.example.com lvmlockd (ocf::heartbeat:lvmlockd): Started z1.example.com Started: [ z1.example.com z2.example.com ] Clone Set: shared_vg1-clone [shared_vg1] Resource Group: shared_vg1:0 sharedlv1 (ocf::heartbeat:LVM-activate): Started z2.example.com crypt (ocf::heartbeat:crypt) Started z2.example.com sharedfs1 (ocf::heartbeat:Filesystem): Started z2.example.com Resource Group: shared_vg1:1 sharedlv1 (ocf::heartbeat:LVM-activate): Started z1.example.com crypt (ocf::heartbeat:crypt) Started z1.example.com sharedfs1 (ocf::heartbeat:Filesystem): Started z1.example.com Started: [z1.example.com z2.example.com ] ...
其他资源