前面的文章我们使用Heartbeat实现高可用集群,虽说Heartbeat配置相对比较简单明了,但由于其为传统的高可用集群的解决方案,配置的弹性比较小,而且功能相对比较单一。
这次我们就是用Corosync/openais+pacemaker 这个解决方案来实现高可用集群
Corosync提供高可用集群中多个节点之间的心跳等高可用集群底层的基本信息的传输和判断,角色相当于Heartbeat,但比Heartbeat更高级,配置的弹性很大
在使用Corosync/openais+pacemaker这个解决方案的时候,只安装corosync就能构建一个完整的HA,当要基于corosync进行二次开发或让HA实现更多功能的时候才需要安装openais
配置使用Corosync/openais+pacemaker 来实现web服务的高可用集群
在node1和node2上使用Corosync/openais+pacemaker方案架设web服务的高可用集群,通过客户端的主机验证当主节点当即之后是否真正的实现了资源转移,如果资源转移成功,且能够继续web服务就标明这个方案实施陈功
一、准备工作
1、配置node1和node2的物理IP地址:|
node1:
ifconfig eth0 192.168.0.202/24
node2:
ifconfig eth0 192.168.0.204/24
2、配置两主机名,保证重启之后主机名不变
node1:
sed -i 's@\(HOSTNAME=\).*@\1node1.a.org@g'
hostname node1.a.org
node2:
sed -i 's@\(HOSTNAME=\).*@\1node2.a.org@g'
hostname node2.a.org
3、配置/etc/hosts文件,保证能够进行本地主机名解析
node1:
vim /etc/hosts 添加如下内容:
192.168.0.202 node1.a.org node1
192.168.0.204 node2.a.org node2
在node2上进行同样的配置
4、配置两个主机之间能够实现无密码访问
node1:
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2
node2:
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1
二、安装Corosync/openais+pacemaker
1、下载、安装软件包
我们只是为了验证这个解决方案,为了方便演示,使用rpm包进行安装
所需的软件包:
cluster-glue-1.0.6-1.6.el5.i386.rpm
libesmtp-1.0.4-5.el5.i386.rpm
cluster-glue-libs-1.0.6-1.6.el5.i386.rpm
openais-1.1.3-1.6.el5.i386.rpm
corosync-1.2.7-1.1.el5.i386.rpm
openaislib-1.1.3-1.6.el5.i386.rpm
corosynclib-1.2.7-1.1.el5.i386.rpm
pacemaker-1.0.11-1.2.el5.i386.rpm
pacemaker-libs-1.0.11-1.2.el5.i386.rpm
heartbeat-3.0.3-2.3.el5.i386.rpm
perl-TimeDate-1.16-5.el5.noarch.rpm
heartbeat-libs-3.0.3-2.3.el5.i386.rpm
resource-agents-1.0.4-1.1.el5.i386.rpm
使用rpm包安装pacemaker的时候为了解决依赖关系需要安装Heartbeat,如果进行编译安装pacemaker的时候,就不需要安装Heartbeat了
将所有的软件包放到一个自建的目录yum中,方便安装
安装软件包
cd /yum
yum localinstall * --nogpgcheck -y
配置node1
2、配置node1的corosync
cd /etc/corosync/
cp corosync.conf.example corosync.conf 创建配置文件
修改配置文件
vim corosync.conf 添加如下内容:
service {
ver: 0
name: pacemaker
}
aisexec { 这个是安装了openais才需要添加的内容
user: root
group: root
}
并设定此配置文件中 bindnetaddr后面的IP地址为你的网卡所在网络的网络地址,我们这里的两个节点在192.168.0.0网络,因此这里将其设定为192.168.0.0;如下
bindnetaddr: 192.168.0.0
保存退出即可
创建所需要的日志目录
mkdir /var/log/cluster/
3、使用corosync-keygen 生成一个密钥,来进行同个集群主机的认证
corosync-keygen
4、将配置文件和密钥同步到node2上,并在node2上创建日志目录
scp –p corosync.conf authkey node2.a.org;/etc/corosync/
ssh node2 ‘mkdir –v /var/log/cluster’
5、启动node1的corosync服务
/etc/init.d/corosync start
6、验证是否成功启动了服务,在两个节点上进行同样的操作
(1)查看corosync引擎是否正常启动:
grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/messages 下面为输出信息
Jun 14 19:02:08 node1 corosync[5103]: [MAIN ] Corosync Cluster Engine ('1.2.7'): started and ready to provide service.
Jun 14 19:02:08 node1 corosync[5103]: [MAIN ] Successfully read main configuration file '/etc/corosync/corosync.conf'.
Jun 14 19:02:08 node1 corosync[5103]: [MAIN ] Corosync Cluster Engine exiting with status 8 at main.c:1397.
Jun 14 19:03:49 node1 corosync[5120]: [MAIN ] Corosync Cluster Engine ('1.2.7'): started and ready to provide service.
Jun 14 19:03:49 node1 corosync[5120]: [MAIN ] Successfully read main configuration file '/etc/corosync/corosync.conf'.
(2)查看初始化成员节点通知是否正常发出:
grep TOTEM /var/log/messages
Jun 14 19:03:49 node1 corosync[5120]: [TOTEM ] Initializing transport (UDP/IP).
Jun 14 19:03:49 node1 corosync[5120]: [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).
Jun 14 19:03:50 node1 corosync[5120]: [TOTEM ] The network interface [192.168.0.5] is now up.
Jun 14 19:03:50 node1 corosync[5120]: [TOTEM ] A processor joined or left the membership and a new membership was formed.
(3)检查启动过程中是否有错误产生:
grep ERROR: /var/log/messages | grep -v unpack_resources
(4)查看pacemaker是否正常启动:
grep pcmk_startup /var/log/messages
Jun 14 19:03:50 node1 corosync[5120]: [pcmk ] info: pcmk_startup: CRM: Initialized
Jun 14 19:03:50 node1 corosync[5120]: [pcmk ] Logging: Initialized pcmk_startup
Jun 14 19:03:50 node1 corosync[5120]: [pcmk ] info: pcmk_startup: Maximum core file size is: 4294967295
Jun 14 19:03:50 node1 corosync[5120]: [pcmk ] info: pcmk_startup: Service: 9
Jun 14 19:03:50 node1 corosync[5120]: [pcmk ] info: pcmk_startup: Local hostname: node1.a.org
如果上面命令执行均没有问题,接着可以执行如下命令启动node2上的corosync
ssh node2 -- /etc/init.d/corosync start
注意:启动node2需要在node1上使用如上命令进行,不要在node2节点上直接启动;
使用同样的方法验证node2是否成功启动
三、配置所需要的资源
1、使用Crm status命令, 查看两个节点的信息,看该服务是否已经同步
表示两个节点上的服务已经同步
2、在node1和node2上分别安装httpd
Yum install httpd –y
chkconfig httpd off 保证web服务不会开机自动启动
node1:
echo node1 > /var/www/html/index.html 用于测试
node2:
echo node2 > /var/www/html/index.html
3、crm_verify –L 查看配置是否错误
crm_verify -L 显示结果如下
会发现没有STONITH设备,我们将这个设备禁用
crm configure property stonith-enabled=false
4、设定资源
在设定资源之前,我们先介绍一下靠可用集群中资源的类型
资源的类型:
Primitive 这个类型的资源只能同时在一个节点上运行
order 这个类型的资源只有在定义了这个顺序的资源全部按顺序启动之后,这些资源资源才生效
Group 定义为组类型的资源,一个组中的资源只能同时在一个节点上运行,不可分节点运行
Clone 在多个节点上同时运行,没有主次之分
Master-slave 是clone类型的一种,使用在两个节点之间,有主从之分
我们要实现web服务的高可用用的资源主要有:
VIP:
Httpd启动脚本
配置VIP资源
crm configure primitive IP ocf:Heartbeat:IPaddr params ip=192.168.0.85
命名解释:资源类型、资源名字、资源代理、指定资源的参数
配置httpd资源
crm configure primitive httpd lsb:httpd 这个资源可是实现启用本节点的httpd服务
查看我们配置资源的
crm status 显示如下:
表示这两个资源分开在两个节点上运行了,为了实现web服务高可用集群这是不允许的,为了让资源同时在一个节点上运行,我们可以将这两个资源定义为一个group或order类型,这里我们就将这两个资源定义为一个group
crm configure group webserver IP httpd
将IP和httpd这两个资源放到组webserver中
查看我们的配置是否成功
crm configure show
我们再次查看资源的运行状态:
crm status 显示如下:
可以看到资源在同一个节点上同时启动了。
此时验证能否提供web服务
在浏览器中输入VIP地址:192.168.0.85 显示如下:
表示能够提供web服务
进行资源转移测试:
关闭node1上的corosync服务:
node1:
/etc/init.d/corosync stop
在node2上查看节点运行状态如下所示:
我们看到虽然node2在线,但是资源并没有转移到node2上,主要原因如下:
在两个节点的HA中,如果主节点宕机,由于备节点没有票数,默认将集群服务将被停止,所以我们需要进行相应的设置,以保证在一个宕机的情况下,能够继续提供高可用服务
crm configure property no-quorum-policy=ignore
命令执行成功之后我们继续查看节点的状态
可讲此时资源已经成功转移到node2上了,我们测试看其能否提供web服务,显示结果如下:
同样可以提供web服务,所以Corosync/openais+pacemaker 实现web的高可用集群验证成功
在配置过程中我们Corosync/openais+pacemaker 实现高可用集群的方案对资源的配置具有更大的弹性,因此此种解决方案能够实现高可用集群的更多功能