如何创建基于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部分。

发表评论

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