AIX的rootvg两块盘同时异常

errpt的报错显示hdisk1有问题:

errpt|more

IDENTIFIER TIMESTAMP T C RESOURCE_NAME DESCRIPTION

80D3764C 0619103119 U H LVDD PV NO LONGER RELOCATING NEW BAD BLOCKS

E86653C3 0619103119 P H LVDD I/O ERROR DETECTED BY LVM

747725D9 0619103119 P H hdisk1 DISK OPERATION ERROR

80D3764C 0619010319 U H LVDD PV NO LONGER RELOCATING NEW BAD BLOCKS

E86653C3 0619010319 P H LVDD I/O ERROR DETECTED BY LVM

747725D9 0619010319 P H hdisk1 DISK OPERATION ERROR

80D3764C 0619003819 U H LVDD PV NO LONGER RELOCATING NEW BAD BLOCKS

E86653C3 0619003819 P H LVDD I/O ERROR DETECTED BY LVM

747725D9 0619003819 P H hdisk1 DISK OPERATION ERROR

6CADB5B8 0619000119 T H sissas0 SATA ERROR

12296806 0619000119 T H sissas0 SAS ERROR

6CADB5B8 0619000119 T H sissas0 SATA ERROR

12296806 0619000119 T H sissas0 SAS ERROR

12296806 0619000119 T H sissas0 SAS ERROR

12296806 0619000119 T H sissas0 SAS ERROR

80D3764C 0618234419 U H LVDD PV NO LONGER RELOCATING NEW BAD BLOCKS

E86653C3 0618234419 P H LVDD I/O ERROR DETECTED BY LVM

747725D9 0618234419 P H hdisk1 DISK OPERATION ERROR

80D3764C 0618234019 U H LVDD PV NO LONGER RELOCATING NEW BAD BLOCKS

E86653C3 0618234019 P H LVDD I/O ERROR DETECTED BY LVM

747725D9 0618234019 P H hdisk1 DISK OPERATION ERROR

80D3764C 0618225419 U H LVDD PV NO LONGER RELOCATING NEW BAD BLOCKS

E86653C3 0618225419 P H LVDD I/O ERROR DETECTED BY LVM

747725D9 0618225419 P H hdisk1 DISK OPERATION ERROR

80D3764C 0618221919 U H LVDD PV NO LONGER RELOCATING NEW BAD BLOCKS

E86653C3 0618221919 P H LVDD I/O ERROR DETECTED BY LVM

747725D9 0618221919 P H hdisk1 DISK OPERATION ERROR

80D3764C 0618214019 U H LVDD PV NO LONGER RELOCATING NEW BAD BLOCKS

E86653C3 0618214019 P H LVDD I/O ERROR DETECTED BY LVM

747725D9 0618214019 P H hdisk1 DISK OPERATION ERROR

80D3764C 0618145919 U H LVDD PV NO LONGER RELOCATING NEW BAD BLOCKS

E86653C3 0618145919 P H LVDD I/O ERROR DETECTED BY LVM

747725D9 0618145919 P H hdisk1 DISK OPERATION ERROR

A924A5FC 0615111119 P S SYSPROC SOFTWARE PROGRAM ABNORMALLY TERMINATED

rootvg的状态:

$ lsvg

rootvg

$ lsvg -o

rootvg

$ lsvg -l rootvg

rootvg:

LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT

hd5 boot 1 1 1 closed/syncd N/A

hd6 paging 1 3 3 open/syncd N/A

hd8 jfs2log 1 3 3 open/syncd N/A

hd4 jfs2 120 360 3 open/syncd /

hd2 jfs2 40 120 3 open/syncd /usr

hd9var jfs2 20 60 3 open/syncd /var

hd3 jfs2 60 180 3 open/syncd /tmp

hd1 jfs2 40 120 3 open/syncd /home

hd10opt jfs2 20 60 3 open/syncd /opt

hd11admin jfs2 1 1 1 open/syncd /admin

lg_dumplv sysdump 6 6 1 open/syncd N/A

livedump jfs2 1 1 1 open/syncd /var/adm/ras/livedump

fslv01 jfs2 200 600 3 open/stale /ibslog

查看lv的分布状态

$ lspv -l hdisk0

hdisk0:

LV NAME LPs PPs DISTRIBUTION MOUNT POINT

hd11admin 1 1 00..00..01..00..00 /admin

lg_dumplv 6 6 00..06..00..00..00 N/A

livedump 1 1 00..01..00..00..00 /var/adm/ras/livedump

fslv01 200 200 111..00..00..24..65 /ibslog

hd5 1 1 01..00..00..00..00 N/A

hd8 1 1 00..00..01..00..00 N/A

hd6 1 1 00..01..00..00..00 N/A

hd2 40 40 00..32..08..00..00 /usr

hd4 120 120 00..31..02..87..00 /

hd3 60 60 00..10..50..00..00 /tmp

hd9var 20 20 00..18..02..00..00 /var

hd10opt 20 20 00..00..20..00..00 /opt

hd1 40 40 00..13..27..00..00 /home

$ lspv -l hdisk1

hdisk1:

LV NAME LPs PPs DISTRIBUTION MOUNT POINT

fslv01 200 200 111..29..00..60..00 /ibslog

hd8 1 1 00..00..01..00..00 N/A

hd6 1 1 00..01..00..00..00 N/A

hd2 40 40 00..32..08..00..00 /usr

hd4 120 120 00..18..02..01..99 /

hd3 60 60 00..00..50..10..00 /tmp

hd9var 20 20 00..18..02..00..00 /var

hd10opt 20 20 00..00..20..00..00 /opt

hd1 40 40 00..13..27..00..00 /home

最初打算直接替换hdisk1,在Unmirrorvg rootvg hdisk1的时候报错了,提示有stale状态的lv,要用syncvg进行同步。但syncvg确失败了。

通过以下步骤发现hdisk0上也有stale状态的lv

$ lspv -p hdisk0

hdisk0:

PP RANGE STATE REGION LV NAME TYPE MOUNT POINT

1-1 used outer edge hd5 boot N/A

2-32 used outer edge fslv01 jfs2 /ibslog

33-33 stale outer edge fslv01 jfs2 /ibslog

34-112 used outer edge fslv01 jfs2 /ibslog

113-113 used outer middle hd6 paging N/A

114-119 used outer middle lg_dumplv sysdump N/A

120-120 used outer middle livedump jfs2 /var/adm/ras/livedump

121-133 used outer middle hd4 jfs2 /

134-143 used outer middle hd3 jfs2 /tmp

144-161 used outer middle hd4 jfs2 /

162-193 used outer middle hd2 jfs2 /usr

194-211 used outer middle hd9var jfs2 /var

212-224 used outer middle hd1 jfs2 /home

225-225 used center hd8 jfs2log N/A

226-227 used center hd4 jfs2 /

228-235 used center hd2 jfs2 /usr

236-237 used center hd9var jfs2 /var

238-287 used center hd3 jfs2 /tmp

288-288 used center hd1 jfs2 /home

289-289 used center hd10opt jfs2 /opt

290-290 used center hd11admin jfs2 /admin

291-309 used center hd10opt jfs2 /opt

310-335 used center hd1 jfs2 /home

336-422 used inner middle hd4 jfs2 /

423-446 used inner middle fslv01 jfs2 /ibslog

447-511 used inner edge fslv01 jfs2 /ibslog

512-558 free inner edge

$ lspv -p hdisk1

hdisk1:

PP RANGE STATE REGION LV NAME TYPE MOUNT POINT

1-1 free outer edge

2-112 used outer edge fslv01 jfs2 /ibslog

113-113 used outer middle hd6 paging N/A

114-114 free outer middle

115-143 used outer middle fslv01 jfs2 /ibslog

144-161 used outer middle hd4 jfs2 /

162-193 used outer middle hd2 jfs2 /usr

194-211 used outer middle hd9var jfs2 /var

212-224 used outer middle hd1 jfs2 /home

225-225 used center hd8 jfs2log N/A

226-227 used center hd4 jfs2 /

228-235 used center hd2 jfs2 /usr

236-237 used center hd9var jfs2 /var

238-287 used center hd3 jfs2 /tmp

288-288 used center hd1 jfs2 /home

289-289 used center hd10opt jfs2 /opt

290-290 free center

291-309 used center hd10opt jfs2 /opt

310-335 used center hd1 jfs2 /home

336-395 used inner middle fslv01 jfs2 /ibslog

396-435 free inner middle

436-445 used inner middle hd3 jfs2 /tmp

446-446 used inner middle hd4 jfs2 /

447-545 used inner edge hd4 jfs2 /

546-558 free inner edge

因此推测hdisk0上文件系统错误,hdisk1出现硬件损坏。

后续措施:添加新盘hdisk2,smit mirrorvg 做成1:3,在hdisk2上rmlvcopy, 除去有问题的stale状态的lv,然后migratepv把fslv从hdisk1上(为sysnc状态)移动到hdisk2,失败了。因此决定停掉业务后,进行重做文件系统。

涉及系统

此系统为负载均衡,未用到存储。

故障现象

rootvg的两块盘均出现异常,hdisk1出现物理损坏,正常状态下可以在线替换掉这块盘,然而由于hdisk0的状态为未同步,无法在线更换,需要进行停机

(需要停机时间4小时,包括进行回退所需的时间)。

受影响的目录为/ibslog,数据量约50G:

$ df -g

Filesystem GB blocks Free %Used Iused %Iused Mounted on

/dev/hd4 60.00 58.49 3% 19566 1% /

/dev/hd2 20.00 16.06 20% 59036 2% /usr

/dev/hd9var 10.00 8.45 16% 7352 1% /var

/dev/hd3 30.00 29.66 2% 431 1% /tmp

/dev/hd1 20.00 18.97 6% 6415 1% /home

/dev/hd11admin 0.50 0.50 1% 7 1% /admin

/proc – – – – – /proc

/dev/hd10opt 10.00 5.58 45% 54517 4% /opt

/dev/livedump 0.50 0.50 1% 4 1% /var/adm/ras/livedump

/dev/fslv01 100.00 52.28 48% 2781 1% /ibslog

变更步骤

备份受影响的文件系统

从其他服务器挂载nfs共享目录至server

smit nfs->Network File System.->Add a file system for mounting,将/backup挂载至server

cp -rp /ibslog /backup/ 将ibslog文件夹备份至其他服务器;

验证备份数据的大小、权限等

F5调整

停止应用

更换硬盘

收集配置

smit lv-> Show Characteristics of a Logical Volume->选择fslv01收集原有的卷组配置

除去卷组

smit lv -> remove a logical volume->选择fslv01

除去坏盘

Unmirrorvg rootvg hdisk1

Reducevg rootvg hdisk1

Rmdev Rdl hdisk1

换盘后,再cfgmgr v

添加新盘

AIX上通过diag判定DISK位置

#diag 执行命令回车

选择黑色部分

用PgDn键翻页找到Hot plug Task回车

选择黑色部分,回车

继续选择黑色部分

选择想判定位置的目标DISK,比如:hdisk1

回车,这个时候去观察硬盘,会发现硬盘的指示灯会显示”红色”,这个硬盘就是你需要判定的目标盘。

如果想把这个有故障的硬盘从SCSI剔除,用F3返回上一级菜单选择”Replace/Remove a Device Attached to an SCSI Hot Swap Enclosure Device”

光标移到hdisk1处,回车

然后拔掉故障磁盘,插上新的磁盘,执行cfgmgr –v,重新识别出新插的磁盘。

消除系统警告灯

选择黑色部分,回车

用Enter键选择黑色部分,在按F7或者Esc+7键commit

重做镜像

确认新盘hdisk0是否有PVID lspv  rootvg

hdisk0         00c3f435d0f4916c                    rootvg          active

hdisk1 00c2f65fa4a27df5 none none

上面标红的即是。

如果没有,需要手动添加:chdev -l hdisk1 -a pv=yes

HDISK1出现后, HDISK1加到ROOTVG

#extendvg rootvg hdisk1

MIRROR  mirrorvg –S rootvg (也可执行mirrorvg –c 2 rootvg 等待时间较长)

0516-1804 chvg: The quorum change takes effect immediately.

0516-1126 mirrorvg: rootvg successfully mirrored, user should perform

bosboot of system to initialize boot records. Then, user must modify

bootlist to include: hdisk1 hdisk0.

查看PV  lspv  

Hdisk0          00x9k241k2l3811n                    rootvg          active

hdisk1          00c3f435d0f4916c                    rootvg          active

HDISK0上创建boot image

bosboot –ad hdisk1

bosboot: Boot image is 51228 512 byte blocks

先确认当前启动顺序
bootlist –m normal -o

改变启动设备的顺序  bootlist –m normal hdisk0 hdisk1 cd0 

确认修改后的启动顺序
bootlist –m normal -o

后续操作:在HMC上关闭事件,系统中执行errclear 0清空相关报错。

重做文件系统

smit lv->
Add a Logical Volume然后依据之前记录的配置来重做fslv01

smit fs->
Add / Change / Show / Delete File Systems-> Enhanced Journaled File Systems->
Add an Enhanced Journaled File System on a Previously Defined Logical Volume->lv name填入fslv01,挂载点选择/ibslog,再执行mount -a,挂载文件系统。注意调整/ibslog的权限

数据恢复及验证

cp -rp /backup/ibslog/ /ibslog, 然后验证文件大小,权限,读写属性等。

启动应用、调整F5

回退步骤

本次变更前已将重要数据备份至独立的外部nfs服务器,在出现问题时可利用备份数据进行重建。如遇其他服务器硬件故障,可协调IBM原厂及时处理。

总结

ibslog这个重建后的文件系统在做mirror同步时,发现挂载的nfs共享目录(备份数据用)无法umount, fuser /nfsdir 查看进程号,发现占用此文件的进程为syncvg -v rootvg ,判断为后台做mirror时,syncvg同时锁定了rootvg,而/nfsdir是建立在根目录下,属于rootvg,从而暂时无法卸载

如何创建基于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 及以上)。

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

你知道了什么是 Linux 集群,为什么人们会使用它们, 以及它如何让我们的生活变得更好。如果您打算在 CentOS 7 /RHEL 7 上部署, 请阅读我们的版本7指南。版本6及以下请继续阅读本指南。

现在让我们开始实施, 从零开始创建我们自己的集群。你准备好成为一个集群大师了吗?您的 unix 命令行技能将在这里派上用场, 但他们不是必须的。不管有没有准备好, 是时候下一步了!

准备实验环境

第一件事

我们需要安装操作系统。由于本教程将使用红帽群集套件创建 HA 群集, 因此我们需要使用基于红帽的操作系统。我们选择的操作系统将是 CentOS 6。

CentOS是一个免费提供的解决方案, 与 RHEL 有着密切的兼容性。虽然所有的集群软件都是开源的, 可以在 Linux 的其他发行版上进行编译和配置, 将所有组件汇集在一起, 但是让它们在其他发行版上工作可能需要付出一些努力。这样的想法仅对我们中间那些手头有时间、可以耗费好几个小时的爱好者来说,才是一个值得做的练习。

在所有可能的情况下, RHEL 和 RHCS 是您在企业和更广泛的工作环境中将遇到, 在这种环境中, 全天候支持和兼容性受到重视。要使RHEL 能访问自带的软件仓库和软件, 您需要订阅, 但我们的预算有限。因此, 这决定了我们选择的操作系统, 因为我们的预算不仅很小, 而且我们还希望允许最大数量的人学习本教程。因此, 我们决定在 CentOS上部署。CentOS是一个很好的RHEL的替代, 你能轻易得到, 而仍然完全免费。Fedora也可能是一个很好的选择, 但我们决定更加保守, 不要太激进。如果还没有Centos,现在去下载,。

第二件事

越来越多的 IT 环境走向虚拟化, 这主要与成本、资源调配速度和灵活性等因素有关。本教程我们也将如此, 喜欢与否, 我们加入了更大的 IT 趋势和潮流。此外, 这意味着即使在笔记本电脑上运行非 Linux 环境 (几乎每个人都如此) 也可以参与, 并在安全而舒适的虚拟沙箱中配置集群。不用担心, 如果你有裸机可做, 你也能做下来。对于裸机安装, 请跳过本篇的其余部分, 但请确保您满足以下先决条件。

必备条件

  1. 安装了 CentOS 或 RHEL 的两个节点
  2. 每个节点上安装了 rgmaner、lvm2-cluster、gfs2-utls 和 ccs
  3. 能实现从每个节点同时读取/写入访问同一 LUN 的的共享存储
  4. 两个 IP 接口和网络。一个用于客户端访问, 一个用于检测心跳流量
  5. 可以通过网络触发并与fenced集成的电源栅设备。
  6. 所需的共享 Lun:

    a. 数据文件 (共享数据库文件)-大小由用户确定
    b. docroot (共享的 webserver的document root)- 大小由用户确定
    c. 仲裁盘 (共享的仲裁设备)-约20M

我们选择的虚拟机管理程序是 Oracle VirtualBox, 因为它是免费的, 并且具有足够的功能来完成我们所需的任务。请注意, 如果是运行 VMware ESX 的生产环境, 则我们做之前需要镜像保护, 因此实际中会与本文之后的过程有所不同。在可能的情况下, 我将尝试强调需要做什么,如果您是 在ESXi测试,。

VirtualBox配置

最终的目标将是创建一个名为 “example-cluster” 的双节点 HA 群集。是的, 这是一个无聊的名称, 但您可以自由地将其改为您喜欢的任何内容, 只需记住, 一旦我们到达配置部分, 就用自定义的名称来替换”example-cluster”。下面的列表详细介绍了我们将创建的全部组件。

  1. 名为 cosnode1 的虚拟机 (VM),主机名为node1
  2. 名为 cosnode2 的 VM, 主机名为node2
  3. 将承载数据库文件的共享磁盘设备 data. vdi
  4. 将承载 webserver文件的共享磁盘设备 docroot _ data. vdi
  5. 共享磁盘设备 qdisk. vdi, 它将充当我们的仲裁磁盘
  6. 两个类型为Host Only的内部网络

在 VBox 中创建共享磁盘

默认情况下, 为了安全, 虚拟机管理程序锁定底层的裸设备, 并以虚拟化的方式向这些设备的发送指令。这意味着您不能将相同的裸设备分配给多个虚拟机, 因为这会导致冲突。以存储的角度来看, 如果两个系统都向一个无群集感知功能的存储设备写入文件, 它们可能会覆盖相同的块或在对文件系统进行更新时无法兼容, 从而导致数据损坏。

然而, 作为成熟的男人或女人(并且即将成为超级大师), 我们不需要被虚拟机管理程序来小心呵护, 因为我们将使用分布式锁管理器 (DLM) 和集群感知文件系统 GFS。因此, 安全别针必须解锁, 手套必须脱下来。在 VertualBox中允许这种 “危险行为” 所需的选项不能从 GUI 中开启。我们需要找到命令提示符或shell, 并与 VBoxManager做朋友。

这个过程分为三阶段:

  1. 向每个虚拟机添加新的存储控制器。在本例中,我们将使用名为 “SCSI. ” 的 SCSI 控制器。这是使用 SCSI fence所必需的。如果你使用后文提及到的其他fence 方式,这步是非必须的。如果跳过, 请记住将下面命令段中的controller替换为符合您的设置的内容。
  2. 首先从 CLI 创建磁盘,使用固定的大小, 并指定一些额外的参数
  3. 将磁盘设备连接到虚拟机, 要使用正确的控制器,并将其标记为可共享设备

创建共享磁盘

VboxManage createhd –filename <新磁盘名称> –size <磁盘大小,以MB为单位> –variant Fixed

将<>的内容替换为适合您的环境的变量。这里创建3个磁盘, 磁盘名称为 “qdisk”、”data” 和 “docroot _ data”。

如果一切顺利, 你会看到类似于以下内容的输出。

Createhd的示例输出:

连接磁盘

VBoxManage将再次用于将上面创建的磁盘附加到 VM cosnode1 和 cosnode2。

VboxManage storageattach <VM名称> –storagectl <VM 的存储控制器名> –port <SCSI/SATA 端口号> –device <设备号,通常为0> –type hdd –medium <vdi文件路径> –mtype shareable

cosnode1 的storageattach输出示例:

最后修改连接到 VM 的磁盘的类型。

VBoxManage modifyhd <vdi文件路径> –type shareable

虚拟机现在应该都能共享相同的磁盘。

创建虚拟网络

网络对集群的运作很重要。下一步是创建两个虚拟网络供我们的集群使用。建议集群仅使用静态 IP 地址, 而不使用动态地址协议 (如 DHCP)。

虚拟机配置

虚拟机配置完成后, 它应该会类似于下面的例子。

如果你已经到了这一步, 你现在有了一个能工作的双节点的 Linux 群集,它运行在基于Oracle VirtualBox的·Centos上。恭喜你自己, 然后继续下去:)

软件包安装

如前所述, 在创建群集之前, 必须下载软件并将映像部署到操作系统上。所以, 让我们继续前进, 来做这一步。

yum install rgmanager lvm2-cluster gfs2-utils ccs

确认所需的依赖关系和改动。

软件包安装应成功完成。查看结果。

更新防火墙

接下来, 我们必须更新内置的 iptables 防火墙规则, 以允许群集服务进行通信和运作。下面列出了对于每个集群进程所需要的规则

#cman
-A INPUT -m state –state NEW -m multiport -p udp -s 192.168.230.0/24 -d 192.168.230.0/24 –dports 5404,5405 -j ACCEPT
-A INPUT -m addrtype –dst-type MULTICAST -m state –state NEW -m multiport -p udp -s 192.168.230.0/24 –dports 5404,5405 -j ACCEPT

#dlm
-A INPUT -m state –state NEW -p tcp -s 192.168.230.0/24 -d 192.168.230.0/24 –dport 21064 -j ACCEPT

#ricci
-A INPUT -m state –state NEW -p tcp -s 192.168.230.0/24 -d 192.168.230.0/24 –dport 11111 -j ACCEPT

#modclusterd
-A INPUT -m state –state NEW -p tcp -s 192.168.230.0/24 -d 192.168.230.0/24 –dport 16851 -j ACCEPT

#luci
-A INPUT -m state –state NEW -p tcp -s 192.168.230.0/24 -d 192.168.230.0/24 –dport 8084 -j ACCEPT

#igmp
-A INPUT -p igmp -j ACCEPT

COMMIT

请注意, 我们已选择使用 192.168.230.0/24 作为我们的心跳网络, 192.168.10.0/24 用于客户端访问流量。更改上述规则中的网络地址, 使其与你的实验配置相对应, 以允许心跳网络上的群集服务。应将规则附加到/etc/sysconfig/iptables(对于IPv4)或/etc/sysconfig/ip6tables(对于IPv6)。

一旦更新了规则文件后, 必须重新启动 iptables 服务, 更改才能生效。

service iptables restart;

service ip6tables restart;

仲裁磁盘

简单地说, 集群中的法定数量是指存在的总票数的一半加上1票来组成多数票的情况。每个成员被分配1个投票, 另外的特殊设备可以也被分配投票。分配给每个节点和群集的特殊设备的投票数,是在配置过程中指定的。

仲裁是必不可少的, 因为它是群集软件用来确定群集是否处于足够健康的状态, 可以运行服务的机制。当仲裁丢失时, 群集首先尝试通过fence掉不正常的节点或重新定位服务来恢复仲裁。如果所有尝试都失败且仲裁无法维持, 则所有服务都将停止并转移到失败状态, 资源组将离线, 群集将被解散。

对于双节点群集 (如我们在此练习中创建的群集), 在发生意外事件 (如网络中断) 的情况下, 必须使用称为 qdisk 或仲裁磁盘的特殊块磁盘设备来维护仲裁。脑裂是用来描述一半成员之间的通信丢失和集群被分成两半的场景的短语。在脑裂过程中,成员可以与落在分裂同一侧的节点通信, 但不能与分裂的另一侧的节点通信。

当双方都试图争夺控制权时, 脑裂的问题就变得很明显了。在这样的情况下, 我们可能会遇到不愉快的情况, 节点同时相互fence, 所谓的fence竞争发生了, 直到集群恢复正常。显然, 服务将会中断, 因为节点会被重启, 或者对资源的访问被阻止。随着集群中节点数量的增加, 发生脑裂的可能性显著降低。但是, 对于双节点群集, 任何中断都会自动导致脑裂, 因此需要使用另一种方式来提供群集仲裁所需的额外投票。我们的 qdisk 提供这种tie-breaker投票, 2个节点都需要它, 尽管它给配置带来了额外的复杂性。

为了创建仲裁磁盘, 我们专门指定一个裸设备, 并给它一个标签。我们将使用20M的磁盘/dev/db 作为我们的 qdisk。

mkqdisk -c /dev/sdb -l clusterqdisk

创建群集

使用群集名称来更新host文件和 DNS

在群集创建过程中, 将引用成员在网络上的节点名称。这些名称必须在 DNS 或本地host文件中更新, 以确保域名解析正常工作。

将这些条目添加到所有节点上的/etc/hosts 文件中。将这些地址替换为与您的设置相应的值。

192.168.230.2 node1-hb node1-hb.localdomain

192.168.10.2 node1 node1.localdomain

192.168.230.3 node2-hb node2-hb.localdomain

192.168.10.3 node2 node2.localdomain

192.168.10.4 example-cluster example-cluster.localdomain

使用 ccs 创建群集

ccs 是一个命令行工具, 它将生成我们的群集配置, 同时还在群集中的所有成员之间激活并同步配置文件。群集的配置以 XML 格式存储在/etc clstert. conf 文件中。

将密码分配给 ricci 用户。ccs使用 ricci 服务更新和同步配置。在所有节点上使用相同的密码。

passwd ricci

在节点1和节点2上启动 ricci 服务

service ricci start

首先, 我们通过指定群集名称,在节点1上创建群集。这也将生成我们的cluster.conf文件。

ccs -h localhost createcluster example-cluster

将我们的节点添加到群集。这里使用与我们的心跳网络相关联的名称。

ccs -h localhost addnode node1-hb.localdomain

ccs -h localhost addnode node2-hb.localdomain

我们的配置现在应该如下所示

现在是时候将配置同步到另一个成员node2了

ccs h localhost sync activate

fence配置

广义上讲, 以下fence选项是可行的。

  1. 电源fence相当于拔出物理电源线或拨动电源开关。通过网络控制的 ILOM 或 PDU 可用于电源fence。当节点被电源fence掉时, 会导致节点进入关开机循环。
  2. 网络fence用来禁用网络接口。适用于通过网络访问的存储, 如 iSCSI 或以太网光纤通道。
  3. SCSI-3 持久保留通过发出持久保留来锁定 SCSI 设备。也就是说, 它删除所有以前的保留, 除了一个保留,这个保留用来阻止下一个设备获得访问权限。
  4. 虚拟主机fence类似于电源fence, 只是电源开关是受控于宿主机的虚拟机管理程序,而不是直接通过电源开关/PDU/ILOM来控制的。

若要查看主机上可用的fence选项, 请运行以下 ccs 命令。

ccs -h localhost –lsfenceopts

结果应类似于以下

fence_apc – Fence agent for APC over telnet/ssh

fence_apc_snmp – Fence agent for APC over SNMP

fence_bladecenter – Fence agent for IBM BladeCenter

fence_bladecenter_snmp – Fence agent for IBM BladeCenter over SNMP

fence_brocade – Fence agent for Brocade over telnet

fence_cisco_mds – Fence agent for Cisco MDS

fence_cisco_ucs – Fence agent for Cisco UCS

fence_drac – fencing agent for Dell Remote Access Card

fence_drac5 – Fence agent for Dell DRAC CMC/5

fence_eaton_snmp – Fence agent for Eaton over SNMP

fence_egenera – I/O Fencing agent for the Egenera BladeFrame

fence_eps – Fence agent for ePowerSwitch

fence_hpblade – Fence agent for HP BladeSystem

fence_ibmblade – Fence agent for IBM BladeCenter over SNMP

fence_idrac – Fence agent for IPMI over LAN

fence_ifmib – Fence agent for IF MIB

fence_ilo – Fence agent for HP iLO

fence_ilo2 – Fence agent for HP iLO

fence_ilo3 – Fence agent for IPMI over LAN

fence_ilo4 – Fence agent for IPMI over LAN

fence_ilo_mp – Fence agent for HP iLO MP

fence_imm – Fence agent for IPMI over LAN

fence_intelmodular – Fence agent for Intel Modular

fence_ipdu – Fence agent for iPDU over SNMP

fence_ipmilan – Fence agent for IPMI over LAN

fence_kdump – Fence agent for use with kdump

fence_pcmk – Helper that presents a RHCS-style interface to stonith-ng for CMAN based clusters

fence_rhevm – Fence agent for RHEV-M REST API

fence_rsa – Fence agent for IBM RSA

fence_rsb – I/O Fencing agent for Fujitsu-Siemens RSB

fence_sanbox2 – Fence agent for QLogic SANBox2 FC switches

fence_sanlock – Fence agent for watchdog and shared storage

fence_scsi – fence agent for SCSI-3 persistent reservations

fence_virsh – Fence agent for virsh

fence_virt – Fence agent for virtual machines

fence_vmware – Fence agent for VMWare

fence_vmware_soap – Fence agent for VMWare over SOAP API

fence_wti – Fence agent for WTI

fence_xvm – Fence agent for virtual machines

如果您正在从 unix 主机运行 VirtualBox, 则可以编写一个脚本, 通过 ssh使用 VBoxManager命令发出开关机循环。在 http://meinit.nl/virtualbox-fencing-and-red-hat-enterprise-linux-cluster-suite 和 http://www.redlinux.org/simple/?t561.html 中可以找到这类脚本的很好的例子。我感谢读者Brain Adams做的研究并分享了上面的链接。

或者, 我将告诉你如何使用fence_ scsi 模块来创建一个 SCSI-3 持久保留fence设备, 我们将称为 “scsi fence”。请注意, SCSI-3 持久保留在 VBox 中不支持, 因此它不起作用。fence是群集正常运行所必需的, 但出于我们的测试目的, 我们这次会跳过它。

查看可用于围fence_ scsi 的选项

#ccs -h localhost –lsfenceopts fence_scsi

fence_scsi – fence agent for SCSI-3 persistent reservations

Required Options:

Optional Options:

option: No description available

aptpl: Use APTPL flag for registrations

devices: List of devices to be used for fencing action

logfile: File to write error/debug messages

delay: Wait X seconds before fencing is started

key: Key value to be used for fencing action

action: Fencing action

nodename: Name of node

创建栅设备(fence)

这一节只是为了参考, 因为在 VBox 下, scsi fence不会起作用。请改为使用电源fence或跳到第3部分。

一个名为 “scsifence” 的设备将被添加到我们的集群中, 为/dev/sdb、/dev/sdc、/dev/sdd这些设备提供基于 SCSI 存储的栅设备。

ccs -h localhost –addfencedev scsifence agent=fence_scsi logfile=/var/log/cluster/fence_scsi.log devices=/dev/sdb,/dev/sdc,/dev/sdd

为每个节点注册栅设备。

要注册栅设备, 必须先创建一个方法, 然后创建一个fence实例。

ccs -h localhost –addmethod FENCE-SCSI node1-hb.localdomain;

ccs -h localhost –addmethod FENCE-SCSI node2-hb.localdomain;

ccs -h localhost –addfenceinst scsifence node2-hb.localdomain FENCE-SCSI;

ccs -h localhost –addfenceinst scsifence node1-hb.localdomain FENCE-SCSI;

对于上面的示例, 该方法是 “FENCE-SCSI”, 并与 “scsifence” 的这个实例相关联。

配置文件现在将类似于下面这个 XML。

<cluster config_version=”12″ name=”example-cluster”>
<fence_daemon/>
<clusternodes>
<clusternode name=”node1-hb.localdomain” nodeid=”1″>
<fence>
<method name=”FENCE-SCSI”>
<device name=”scsifence”/>
</method>
</fence>
<unfence>
<device action=”on” name=”scsifence”/>
</unfence>
</clusternode>
<clusternode name=”node2-hb.localdomain” nodeid=”2″>
<fence>
<method name=”FENCE-SCSI”>
<device name=”scsifence”/>
</method>
</fence>
<unfence>
<device action=”on” name=”scsifence”/>
</unfence>
</clusternode>
</clusternodes>
<cman/>
<fencedevices>
<fencedevice agent=”fence_scsi” devices=”/dev/sdb,/dev/sdc,/dev/sdd” logfile=”/var/log/cluster/fence_scsi.log” name=”scsifence”/>
</fencedevices>
<rm>
<failoverdomains/>
<resources/>
</rm>
</cluster>

现在, 我们有一个集群的骨架, 是时候来再次同步我们的配置!

ccs -h localhost –sync –activate

休息一下, 回顾一下我们到目前为止所做的一切。在本系列的下一集中, 我们将创建逻辑卷, 使用 GFS 来进行格式化, 并将其注册为群集资源, 以及创建相应的服务组和依赖关系树。

请继续关注。您还可以选择退一步, 再次回顾第1部分, 或者转到本系列的第3部分。

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

这是介绍如何在 Linux 上创建高可用群集的三部分系列文章中的第一篇。

下面我们将重点介绍基本概念, 讨论先决配置, 并创建一个基本架构。

实际配置将在本系列的第二篇文章中进行。我们将在第三篇文章中介绍测试用例和优化选项。

究竟什么是集群, 为什么我们需要它们?

从广义上讲, 集群是指有两台或多台计算机(也称为节点)在一起完成某些任务时,同步计时、进程和数据。可以在硬件和软件级别创建群集。此外, 集群可由数据中心堆栈的任何级别上构成:从物理组件 (控制器卡, 无论是存储还是网络)、虚拟机管理程序、操作系统, 最后在用户空间级别:中间件 (如 web 服务器或数据库)或在最终用户应用程序中。

创建群集有三个基本原因:高性能计算 (HPC)、网络流量负载均衡和高可用 (HA) 架构下的业务恢复能力。

HPC 或网格计算是指将任务分解为子组件, 并在群集中的节点上执行每个组件, 以提高计算速度。最终对每个节点的输出进行重新配置, 以生成最终结果。

当生产流量在群集中的节点之间分配以减少任何单个系统上的负载时, 就称之为负载均衡。各种算法确定分布调度的方法, 如循环(round-robin)或最小连接(least connections)等。可以在网络级别进行平衡以提高性能和提供弹性。网络负载均衡类似于主机级别的绑定或组合, 但在群集情况下, 它发生在物理节点之间。

高可用或故障转移群集是为了提高特定服务的容错特性。在这种情况下, 服务是从节点之间管理的资源组中建立起来的。在运行服务的任何节点出现故障时, 受影响的节点都会被从群集中取出, 该节点将被fence, 服务将重新定位到另一个正常的节点。HA 群集中的常见资源是共享存储设备和虚拟 IP 地址。此外, 还将有一个带有可选启发式特性的栅设备, 用于触发故障节点的重启或 IO 挂起。

Red Hat Cluster Suite (RHCS)

RHCS 是红帽的软件, 用于基于红帽企业 Linux (RHEL) 的环境下,在操作系统级别创建 HA 群集。

软件包安装

需要在将加入群集的每个 RHEL 节点上安装以下包:

rgmanager, lvm2-cluster, and gfs2-utils。

请注意, rgmanager 是强制性的, 而其他两个包的需要将取决于是否使用 clvmd 或 gfs 服务。可选包有ricci和luci。它们的功能分别是远程 API 和管理 web 控制台。

群集配置

虽然 RCS 支持多达16个节点的群集, 但我们将仅为此示例创建一个简单的两个节点的群集。我们的集群将管理 web 服务器 (Apache httpd) 和数据库 (postgresql) 的故障转移。

先决条件

  1. 共享存储    postgresql数据目录和 httpd的document root将在我们设计的节点之间共享。因此, 这意味着我们需要使用一个文件系统来处理并发读取和写入,并执行锁定以保持一致性。非常适合此任务的是 GFS2 文件系统, 在本例中我们选择使用该文件系统。

注意: 可以创建一个无共享存储的群集, 在这种情况下, 必须在应用程序级别实现数据同步。例如, 如果 web 是无状态感知的,您可以在数据库级别使用复制, 或者将所有状态信息存储在数据库中, 这样的话document root就不必共享了。

在 RHCS 中使用共享存储时的一个重要要求是, 群集中的所有节点在任何时候都可以访问卷。虽然文件系统本身不需要在每个节点上挂载, 但它必须是都可访问的。这是因为群集中的 GFS 将驻留在由 clvmd 管理的 LVM 卷上, 并且元数据必须在群集成员之间保持一致。

因此, 如果使用 CIFS 或 NFS这类文件系统必须在每个节点上存在的协议, 或者如果存储由 SAN 提供, 则 Lun 应划分给每个节点, 并启用并发写入。

2. 将使用独立的专用和公用 IP 子网。专用子网可以使用其中一个专用 IP 范围: 192.168. * *、10.0. * 或 172. * *. *。

专用网络需要支持多播消息, 并将专门用于广播心跳消息。需要将此网络上的延迟保持在最低限度。客户端和实际服务将在公共网络上运行, 公共网络可以是任何可路由的网络地址。

3. 服务分解为基本资源及其依赖项的列表。即运行服务所需的IP 地址、存储、应用程序和自定义脚本。每个资源都将在群集配置文件中进行定义。最后, 资源将被捆绑到服务组中。服务组用于定义启动顺序和依赖项。群集管理服务组而不是资源。

4. 栅设备。这是一个电源开关触发设备, 在一个节点被确定为故障后,群集管理器将使用该设备发出重启指令。理想情况下, 这应该是基于 IP 网络的电源开关, 例如 VMware 环境中的 vCenter server,可用于硬重置作为群集中的节点的虚拟机。有许多其他类型,如 IO fence, 但所选择的确切类型将依赖于具体环境。

5. 群集名称。群集以及每个成员都需要名称。使用 DNS 或更新每个节点上的hosts文件, 以实现按名称解析成员。所有成员都需要按名称路由。另请注意, 动态锁定管理器 (DLM) 在生成锁定表时使用群集名称, 因此请谨慎选择该名称, 因为如果以后更改, 将花费一番功夫。

6. 在节点之间的防火墙上需要允许以下 IP 端口的通信。

IP Port Protocol Cluster Component
8084 TCP luci (Conga Web Service)
5404,5405 UDP cman (Cluster Manager)
11111 TCP ricci (Configuration API)
21064 TCP dlm (Distributed Lock Manager)
16851 TCP modclusterd

架构图示例

如果您用的是红帽7,请使用我们的全新指南。

如果您用的是红帽6及以下,请转至第二部分。