【实验】corosync+pacemaker 搭建高可用集群
实验目的
使用corosync,体验高可用集群的使用
实验环境
VMWare 12.0
CentOS 6.10(三台)均设置host only
实验拓补
其中,
在CentOS A和B组成高可用集群,对外提供httpd服务。
CentOS Test主机用来访问服务,验证高可用特性。
VMnet1相当于交换机。

具体参数
VMWare虚拟交换机VMnet1:

从win10主机上查看VMnet1的参数:

CentOS Test的eth0(修改配置脚本 /etc/sysconfig/network-scripts/ifcfg-eth0,内容如下)
1 DEVICE="eth0" 2 BOOTPROTO="static" 3 HWADDR="00:0C:29:F0:B8:F9" 4 IPADDR=192.168.64.128 5 NETMASK=255.255.255.0 6 ONBOOT="yes"
脚本生效方式:重启,或者service network restart
CentOS Test执行ifconfig的结果(仅供参考):
eth0 Link encap:Ethernet HWaddr 00:0C:29:F0:B8:F9 inet addr:192.168.64.128 Bcast:192.168.64.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fef0:b8f9/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1592 errors:0 dropped:0 overruns:0 frame:0 TX packets:1956 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:175828 (171.7 KiB) TX bytes:174462 (170.3 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:16 errors:0 dropped:0 overruns:0 frame:0 TX packets:16 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:960 (960.0 b) TX bytes:960 (960.0 b)
CentOS A的eth2的配置(之所以不是eth0,是因为这个虚拟机拷贝自CentOS Test,并非重新创建,不过这个无关紧要)
DEVICE="eth2" BOOTPROTO="static" HWADDR="00:0C:29:BC:C2:B6" IPADDR=192.168.64.11 NETMASK=255.255.255.0 ONBOOT="yes"
脚本生效方式:重启,或者service network restart
执行ifconfig查看到:
eth2 Link encap:Ethernet HWaddr 00:0C:29:BC:C2:B6 inet addr:192.168.64.11 Bcast:192.168.64.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:febc:c2b6/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:16725 errors:0 dropped:0 overruns:0 frame:0 TX packets:21993 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2367017 (2.2 MiB) TX bytes:3073057 (2.9 MiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:5798 errors:0 dropped:0 overruns:0 frame:0 TX packets:5798 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:577869 (564.3 KiB) TX bytes:577869 (564.3 KiB)
CentOS B的eth3的配置(之所以不是eth0,是因为这个虚拟机拷贝自CentOS A,并非重新创建,不过这个无关紧要)
DEVICE="eth3" BOOTPROTO="static" HWADDR="00:0C:29:1E:15:05" IPADDR=192.168.64.12 NETMASK=255.255.255.0 ONBOOT="yes"
ifconfig可以看到:
eth3 Link encap:Ethernet HWaddr 00:0C:29:1E:15:05 inet addr:192.168.64.12 Bcast:192.168.64.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe1e:1505/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:21274 errors:0 dropped:0 overruns:0 frame:0 TX packets:22226 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2971438 (2.8 MiB) TX bytes:3076462 (2.9 MiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:16178 errors:0 dropped:0 overruns:0 frame:0 TX packets:16178 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1586062 (1.5 MiB) TX bytes:1586062 (1.5 MiB)
重要!!
实验过程中,CentOS主机我都加了一张虚拟网卡,配置NAT,用于连接外网下载安装包。(host-only是上不了网的)。确认实验开始,不需要连接外网了,就把两张网卡删了。
实验步骤
安装必要的软件
CentOS A和CentOS B上面都要安装:
从网上找cluster的rpm安装包,通过yum的方式安装 cluster-glue cluster-glue-libs 直接通过yum安装 corosync-1.2.7-1.1.el5.i386.rpm corosynclib-1.2.7-1.1.el5.i386.rpm libesmtp-1.0.4-5.el5.i386.rpm openais-1.1.3-1.6.el5.i386.rpm openaislib-1.1.3-1.6.el5.i386.rpm pacemaker-1.0.11-1.2.el5.i386.rpm pacemaker-libs-1.0.11-1.2.el5.i386.rpm resource-agents-1.0.4-1.1.el5.i386.rpm perl-TimeDate-1.16-5.el5.noarch.rpm httpd 安装heartbeat比较麻烦,因为CentOS 6.10 默认没有对应的安装包。 wget http://mirrors.sohu.com/fedora-epel/6/i386/epel-release-6-8.noarch.rpm rpm -ivh epel-release-6-8.noarch.rpm yum install heartbeat* 安装crmsh(也可以用pcs)比较麻烦,CentOS没有相应的源。 cd /etc/yum.repos.d/ wget http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/network:ha-clustering:Stable.repo yum -y install crmsh
必要的前置准备
时间同步(很简单,不赘述)
关闭iptable(很简单,不赘述)
切换到root用户(我的CentOS普通用户很不方便,总是需要sudo;而且用普通用户在node1上面启动corosync,会出现两个node1,这个问题暂时不管了)
配置corosync双机互信 (参考[1])
开启corosync,代理httpd资源(参考[1])
以下步骤确保CentOS Test主机能通过192.168.64.1访问httpd资源
确保WebIP和WebSite运行于相同节点:colocation website-with-ip INFINITY: WebSite WebIP
确保WebIP先于WebSite启动:order httpd-after-ip mandatory: WebIP WebSite
以下步骤确保node1关闭之后,node2能接管资源,CentOS Test依然访问httpd资源
由于票数是偶数,当心跳出现问题(脑裂)时,两个节点都将达不到法定票数,默认quorum策略会关闭集群服务,于是CentOS Test无法访问192.168.64.1
为了避免这种情况,
可以配置忽略参数:property no-quorum-policy=ignore
以下步骤防止资源在节点恢复后频繁切换
rsc_defaults resource-stickiness=100 ##设置资源粘性为100
测试
crm status查看,可见节点切换到了node2
在测试主机CentOS Test上面访问 192.168.64.1。
---------------------
在node2上面将node1的corosync关掉,crm status查看,可见节点切换到了node2
在测试主机CentOS Test上面依然能访问 192.168.64.1。
延申
ip可以不是192.68.64.1(正好是交换机VMnet的ip)吗?
可以把web资源放在另一台服务器上吗(利用NFS)? https://blog.51cto.com/nmshuishui/1399811
参考

浙公网安备 33010602011771号