基于Corosync/Openais + Pacemaker架构的高可用web集群的配置过程(以两节点为例)
准备工作:
两台虚拟机
相关软件包
cluster-glue-1.0.6-1.6.el5.i386
cluster-glue-libs-1.0.6-1.6.el5.i386
corosync-1.2.7-1.1.el5.i386
corosynclib-1.2.7-1.1.el5.i386
heartbeat-3.0.3-2.3.el5.i386
heartbeat-libs-3.0.3-2.3.el5.i386
libesmtp-1.0.4-5.el5.i386
pacemaker-1.0.11-1.2.el5.i386
pacemaker-libs-1.0.11-1.2.el5.i386
perl-TimeDate-1.16-5.el5.noarch
resource-agents-1.0.4-1.1.el5.i386
具体步骤:
1、为两个节点上配置相应的IP地址
结点1:
# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=172.16.13.36
NETMASK=255.255.0.0
# service network restart
结点2:
# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=172.16.13.37
NETMASK=255.255.0.0
# service network restart
2、为两个结点配置主机名
结点1:
# hostname node1.a.org
# vim /etc/sysconfig/network
HOSTNAME=node1.a.org
结点2:
# hostname node2.a.org
# vim /etc/sysconfig/network
HOSTNAME=node2.a.org
3、在两个结点上编辑/etc/hosts,添加如下两行
172.16.13.36 node1.a.org node1
172.16.13.37
node2.a.org node2
4、在两个结点上配置基于密钥进行ssh通信
结点1:
# ssh-keygen -t rsa
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@node2
命令测试:
# ssh node2 -- ‘ifconfig’
// 应该显示为结点2的ip地址信息
结点2:
# ssh-keygen –t rsa
# ssh-copy-id –i /root/.ssh/id_rsa.pub root@node1
命令测试:
# ssh node1 -- ‘ifconfig’
// 应该显示为结点1的ip地址信息
5、安装软件包,首先下载所需的软件到本地,此处为/root/ruanjian
# cd /root/ruanjian
# yum localinstall *.rpm --nogpgcheck -y
6、编辑corosync的配置文件(此处以结点1为例)
# cd /etc/corosync
# cp corosync.conf.example corosync.conf
// 配置文件corosync.conf事先不存在,需从模板corosync.conf.example复制
# vim corosync.conf
修改其中这一行bindnetaddr: 192.168.1.1为
bindnetaddr: 172.16.0.0
添加如下内容:
service {
ver: 0
name: pacemaker
}
aisexec {
user: root
group: root
}
7、用命令生成配置文件authkey
# corosync-keygen
8、将文件corosync,authkey复制到结点2上
# scp -p corosync.conf authkey node2:/etc/corosync
// -p为保留文件的原属性,切记不可少
9、创建配置文件中用到的存放日志文件目录
# mkdir /var/log/cluster
# ssh node2 'mkdir /var/log/cluster
//在node1上为node2创建此目录,此处也可在node2上直接创建
10、在结点1上启动corosync服务
# /etc/init.d/corosync start
11、验证corosync引擎是否正常启动:
# grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/messages
查看初始化成员节点通知是否正常发出:
# grep TOTEM /var/log/messages
检查启动过程中是否有错误产生:
# grep ERROR: /var/log/messages | grep -v unpack_resources
// 没有任何错误信息为正常
查看pacemaker是否正常启动:
# grep pcmk_startup /var/log/messages
12、上面的验证没问题后,启动结点2的corosync服务(此处只能在node1执行)
# ssh node2 -- /etc/init.d/corosync start
13、查看集群节点的启动状态:
# crm status
14、配置集群的工作属性,禁用stonith
// corosync默认启用了stonith,而当前集群并没有相应的stonith设备,因此此默认配置目前尚不可用,这可以通过如下命令验正:
# crm_verify –L
禁用stonith
# crm configure property stonith-enabled=false
15、为创建的集群创建一个IP地址资源
# crm configure primitive WebIP ocf:heartbeat:IPaddr params ip=172.16.13.38
16、如下的命令执行结果可以看出此资源已经在node1.a.org上启动:
# crm status
17、可以在node1上执行ifconfig命令验证此地址已经在eth0的别名上生效
18、在结点2上停止结点1的corosync服务
# ssh node1 -- /etc/init.d/corosync stop
查看IP资源流向
# crm status
// 发现node1虽然停止了服务,但IP资源却没有流到node2上
// 这是因为此时的集群状态为"WITHOUT quorum",服务本身已不能正常运行
修改配置文件,使其忽略quorum
# crm configure property no-quorum-policy=ignore
再查看集群状态
# crm status
再把node1启动起来
# ssh node1 -- /etc/init.d/corosync start