如何创建基于RHCS的linux双机环境(三)

在红帽集群系列的最后一部分中, 我们将创建资源, 然后将它们分配到由集群管理的服务中。如果您刚加入本系列, 您可能需要查看我们的其他指南 RHEL/CentOS 7。

首先, 先将我们的仲裁设备添加到配置中。然而, 在我们能够做到这一点之前, 我们需要启动ricci服务。在两个节点上执行以下操作。您可以跳过任何重复的步骤, 因为先前在本系列的第2部分中已经介绍过了。

service ricci start

接下来, 为 ricci 帐户提供一个密码。ricci 守护进程在节点间同步配置时会使用到它。

passwd ricci

为了测试这一点, 我们将在node1上同步并激活我们的基本配置文件。这将使得在node2上生成相应的配置文件。

ccs -h node1-hb –sync —activate

现在转到 node2 并验证配置文件是否存在。

cat /etc/cluster/cluster.conf

如果出现错误, 请确认 ricci 密码是否正确, 并确保 XML 中没有语法错误。如果它仍报错, 请使用以下操作禁用两个节点上的防火墙, 然后重试。

service iptables stop

service ip6tables stop

错误将记录在系统消息文件/var/log/messages和/var/log/cluster目录下。

启动 Linux 群集服务

同步配置后, 接下来是按下列顺序启动群集服务。

service cman start

service clvmd start

service rgmanager start

确保所有服务都启动时都没有报错, 然后更新系统配置, 以便在每次重新启动时自动运行这些守护程序。

chkconfig cman on

chkconfig clvmd on

chkconfig rgmanager on

现在, 您应该有一个类似于下面的正在运行的群集。

从现在开始, 可以使用 clustat 命令验证群集状态。

clustat

虽然我们有一个正在运行的 Linux 群集, 但它并不是很有用, 因为它没有资源或服务可供管理。是时候通过添加仲裁和创建一些资源来解决这个问题了。

加入 qdisk 并更新配置

使用 mkqdisk 来列出将成为仲裁磁盘的 qdisk 名称。

mkqdisk-L

我们需要提醒自己注意磁盘标签, 因为它将在我们的配置文件中被引用。请记住, 仲裁设备是双节点集群的必要配置, 但对于较大的群集, 可以安全地忽略该设备。

ccs-h localhost-setquorumd label = clusterqdisk

在我们现在看到的cluster.conf的末尾行添加仲裁设备的配置

<quorumd label=””clusterqdisk”/”>

此时不要忘记使用 ccs 来同步配置。

创建 Linux 群集资源

资源是群集的基础构件。它们是集群树中的原子单位, 是”服务树”的叶子。

集群文件系统

首先, 我们将创建文件系统, 以承载我们的数据库数据文件和 webserver的 docroot。

使用 fdisk-l 来提醒自己每个节点上可用的磁盘设备。

fdisk-l

Disk /dev/sda: 8589 MB, 8589934592 bytes

255 heads, 63 sectors/track, 1044 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x000a50d6

Device Boot Start End Blocks Id System

/dev/sda1 * 1 64 512000 83 Linux

Partition 1 does not end on cylinder boundary.

/dev/sda2 64 1045 7875584 8e Linux LVM

Disk /dev/sdb: 20 MB, 20971520 bytes

64 heads, 32 sectors/track, 20 cylinders

Units = cylinders of 2048 * 512 = 1048576 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000

Disk /dev/sdc: 1073 MB, 1073741824 bytes

255 heads, 63 sectors/track, 130 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000

Disk /dev/sdd: 536 MB, 536870912 bytes

64 heads, 32 sectors/track, 512 cylinders

Units = cylinders of 2048 * 512 = 1048576 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000

Disk /dev/mapper/vg_cosnode1-lv_root: 7205 MB, 7205814272 bytes

255 heads, 63 sectors/track, 876 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000

Disk /dev/mapper/vg_cosnode1-lv_swap: 855 MB, 855638016 bytes

255 heads, 63 sectors/track, 104 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000

由本地节点上的 fdisk 返回的输出将与上述类似。为了我们在这个实验的目的, 我们将重点关注/dev/sdc和/dev/sdd, 它们将分别作为我们的data和 docroot 文件系统。

群集 LVM 配置

常规 lvm 命令和 clvmd 命令没有区别。这意味着我们仍然会创建物理卷 (PV) s, 然后创建卷组 (VG), 然后创建逻辑卷 (LV) s。

但是, 在配置卷之前, 我们需要更新/etc /lvm/lvm. convm 中的locking_type参数。在群集系统上, locking_type值需要设置为3。

# Type of locking to use. Defaults to local file-based locking (1).

# Turn locking off by setting to 0 (dangerous: risks metadata corruption

# if LVM2 commands get run concurrently).

# Type 2 uses the external shared library locking_library.

# Type 3 uses built-in clustered locking.

# Type 4 uses read-only locking which forbids any operations that might

# change metadata.

locking_type = 3

重新启动两个节点上的 clvmd 守护程序。请注意, cman 服务需要为运行状态。

service clvmd restart

接下来创建 Pv。

pvcreate /dev/sdc

pvcreate /dev/sdd

接下来创建卷组。请注意, 在创建时, 我们指定-cy 选项将这些卷组标记为群集模式。

vgcreate -cy vg_example-cluster_data /dev/sdc

vgcreate -cy vg_example-cluster_docroot /dev/sdd

用上一步创建的卷组,来创建逻辑卷。

lvcreate -n lv_data -l 100%vg vg_example-cluster_data

lvcreate -n lv_docroot -l 100%vg vg_example-cluster_docroot

逻辑卷需要被激活。

lvchange -ay vg_example-cluster_data/lv_data

lvchange -ay vg_example-cluster_docroot/lv_docroot

最后, 我们创建映射条目。

vgscan –mknodes -v

若要验证配置, 请在两个节点上使用 pvs、lvs 和 vgs 命令。请务必检查上面创建的所有 Pv、Lv 和 Vg 是否都存在。

 

创建 GFS 文件系统

即使底层设备是群集模式的, 而且现在操作系统可以访问, 但是我们的应用程序还不能使用逻辑卷, 因为它们仍然缺少所需的文件系统。到目前为止, 我们所拥有的只是逻辑上的裸设备。

在本教程中, 我们将使用具有高性能架构的 GFS 文件系统。它内置的分布式锁机制,是专为使用共享存储体系的群集环境而设计的。

要创建文件系统, 请执行以下操作。这里用到的群集名称必须与/etc/cluster/cluster.conf 中的群集名称匹配。我们的集群被命名为example-cluster

在下面的示例中, 我们使用”-j 2-j 64″ 在 GFS 中创建两个64位日志。对每个文件系统来说,每个群集节点需要一个单独的日志, 我们的群集是一个双节点群集, 因此我们只创建两个。对较大的群集而言,要按需调整。


mkfs.gfs2 -t example-cluster:datagfs2 -j 2 -J 64 /dev/vg_example-cluster_data/lv_data


mkfs.gfs2 -t example-cluster:datagfs2 -j 2 -J 64 /dev/vg_example-cluster_docroot/lv_docroot

 

向群集配置文件添加资源

使用ccs的 –addresource选项,用我们新创建的群集文件系统更新配置。

ccs -h localhost addresource clusterfs name=datagfs2 fstype=gfs2 mountpoint=/home/data device=/dev/vg_example-cluster_data/lv_data


ccs -h localhost –addresource clusterfs name=docrootgfs2 fstype=gfs2 mountpoint=/var/www/docroot device=/dev/vg_example-cluster_docroot/lv_docroot

上面增加了两个文件系统,他们将会挂载到/home/data/var/www/docroot

现在, 应该在cluster.conf的 “Resource Manager <rm>” 部分中有类似以下的内容

<rm>

    <failoverdomains/>

    <resources>

        <clusterfs device=”/dev/vg_example-cluster_data/lv_data” fstype=”gfs2″ mountpoint=”/home/data” name=”datagfs2″/>

        <clusterfs device=”/dev/vg_example-cluster_docroot/lv_docroot” fstype=”gfs2″ mountpoint=”/var/www/docroot” name=”docrootgfs2″/>

    </resources>

</rm>

为了完成我们的教程, 我们将添加一个最后的资源来承载我们的虚拟 IP 地址。这将是与我们的客户端连接的网络地址, 从而使得服务器的故障转移对外部用户而言,是无感知的。

然后, 我们所有的资源将被包装成一个名为 “web-resources” 的服务组。

创建 VIP

我们的虚拟 IP 地址将会是192.168.10.4。

ccs -h localhost –addresource ip address=192.168.10.4 monitor_link=yes sleeptime=10

同步配置。

ccs h localhost sync activate

创建 “web” 故障转移域。

故障转移域决定了允许哪些群集成员运行什么服务。它们可以是有序的, 也可以是受限制的, 也可以为服务提供nofailback特性。

由于这是一个简单的双节点群集, 我们将对所有称为 web 的服务只创建一个无序的故障转移域。

ccs -h localhost –addfailoverdomain web

创建 “web-resources” 服务组

服务本质上只是一组相关资源。服务作为一个原子单位被控制。服务是资源树的根基。启动和停止的是服务, 而不是资源。

ccs -h localhost addservice web-resources domain=web recovery=relocate

我们的资源树正在形成。

<rm>

<failoverdomains>

<failoverdomain name=”web” nofailback=”0″ ordered=”0″ restricted=”0″/>

</failoverdomains>

<resources>

<clusterfs device=”/dev/vg_example-cluster_data/lv_data” fstype=”gfs2″ mountpoint=”/home/data” name=”datagfs2″/>

<clusterfs device=”/dev/vg_example-cluster_docroot/lv_docroot” fstype=”gfs2″ mountpoint=”/var/www/docroot” name=”docrootgfs2″/>

<ip address=”192.168.10.4″ monitor_link=”yes” sleeptime=”10″/>

</resources>

<service domain=”web” name=”web-resources” recovery=”relocate”/>

</rm>

VIP将是我们的父资源, 它将依赖于这两个文件系统。因此, 只有在两个文件系统成功挂载的情况下, 才会创建 虚拟IP。

cs -h localhost addsubservice web-resources ip ref=192.168.10.4

现在, 让我们将把文件系统配置为 VIP 的依赖项。

ccs -h localhost addsubservice web-resources ip:clusterfs ref=docrootgfs2


ccs -h localhost addsubservice web-resources ip:clusterfs[0]:clusterfs ref=datagfs2

请注意添加服务依赖项的先后顺序。请记住, 群集从下到上启动服务。因此, 所有子服务都需要先启动, 然后父服务才能启动。

考虑到大多数 web 应用程序将依赖于数据库, 我们要确保在挂载/var/www/docroot之前存在/homen/data。

<rm>

<failoverdomains>

<failoverdomain name=”name=web” nofailback=”0″ ordered=”0″ restricted=”0″/>

</failoverdomains>

<resources>

<clusterfs device=”/dev/vg_example-cluster_data/lv_data” fstype=”gfs2″ mountpoint=”/home/data” name=”datagfs2″/>

<clusterfs device=”/dev/vg_example-cluster_docroot/lv_docroot” fstype=”gfs2″ mountpoint=”/var/www/docroot” name=”docrootgfs2″/>

<ip address=”192.168.10.4″ monitor_link=”yes” sleeptime=”10″/>

</resources>

<service domain=”web” name=”web-resources” recovery=”relocate”>

<ip ref=”192.168.10.4″>

<clusterfs ref=”docrootgfs2″>

<clusterfs ref=”datagfs2″/>

</clusterfs>

</ip>

</service>

</rm>

恭喜!现在, 您有了一个能工作的群集来管理 web 资源。

 

结论

在现实世界中, 我们实际上会有一个数据库和 web server应用的服务。

还必须在应用程序端更改配置, 以更新 web 服务器的document root以指向群集文件系统, 并将数据库的表空间初始化为datagfs2 的共享文件系统。

然而, 这些任务已被故意排除在外, 并将作为一个练习, 留读者在他/她自己的时间做。还有更多的选项和功能需要探索。挑战你自己。

我希望你喜欢Linux 集群速成课程! 🙂

系列回顾

第1部分和第2部分, 或阅读我们的新指南(RHEL/CentOS 7 及以上)。

发表评论

您的电子邮箱地址不会被公开。