我们今天一起来使用Corosync/Openais+Pacemaker来架构一个Web HA :
----------------------------------------------------------------------------------------------
所用到的软件:
cluster-glue
cluster-glue-libs
heartbeat
openaislib
resource-agents
corosync
heartbeat-libs
pacemaker
corosynclib
libesmtp
pacemaker-libs
libibverbs
librdmacm
lm_sensors
libtool-ltdl
openhpi-libs
openhpi
perl-TimeDate
下载地址:
-------------------------------------------------------------------------
1.准备系统:
不要求每个节点具备两块网卡。
节点名字必须跟uname -n出来的一致。
两个节点之间彼此间通信靠解析名实现
双节点间可通过某个ip通信
向外提供服务用到vip
node1 192.168.0.20
node2 192.168.0.21
vip 192.168.0.100
准备两台干净的虚拟机
-------------------------------------------------------------------------
2.对于准备工作的配置
node1的配置:
1)配置ip:
vim /etc/sysconfig/network-scripts/ifcfg-eth0
修改两行
BOOTPROTO static
IPADDR 192.168.0.20
:wq
2)重启网络服务:
service network restart
3)将主机名改为node1.a.org:
vim /etc/sysconfig/network
hostname=node1.a.org
:wq
hostname node1.a.org
uname -n
4)编辑/etc/hosts实现node1和node2的解析:
vim /etc/hosts
192.168.0.20 node1.a.org node1(node1是别名)
192.168.0.30 node2.a.org node2
:wq
5)生成密钥并将公钥传给node2:
ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub
ssh node1 'ifconfig'
node2的配置:
步骤同node1,只需要将1)中的ip改为192.168.0.30,将3),5)中的node1改为node2即可。
-------------------------------------------------------------------------
3.安装所依赖的软件包:
node1,node2上都配置:
将所需要的软件包下载到/root目录下,然后使用如下命令安装即可
yum --nogpgcheck localinstall *.rpm
------------------------------------------------------------------------
4.配置corosync:
node1:
cp corosync.conf.example corosync.conf
vim corosync.conf
将bindnetaddr所在行改为bindnetaddr:192.168.0.0
在最后添加:
service {
ver: 0
name: pacemaker
}
ai***ec {
user: root
group: root
}
:wq
mkdir /var/log/cluster(创建日志文件的目录)
corosync-keygen(为corosync生成密钥文件)
scp -p authkey corosync.conf node2:/etc/corosync
(将密钥文件和配置文件拷一份给node2,就不用再在node2上配置了)
node2:
mkdir /var/log/cluster (创建日志文件的目录)
-------------------------------------------------------------------------
5.启动并验证:
node1:
1)启动:
service corosync start
2)验证:
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
grep pcmk_startup /var/log/messages
如果验证没有错误,则可以使用如下命令开启node2上的corosync服务了,node2的服务必须通过node1来开启,否则会出现问题。
ssh node2 -- /etc/init.d/corosync start。
-------------------------------------------------------------------------
6.同步两节点的时间:
node1:hwclock -s
node2:hwclock -s(都与系统时间一致)
crm status查看当前集群节点状态
-------------------------------------------------------------------------
7.配置高可用服务:
node1:
1)查看corosync当前的配置信息
crm configure show
2)检查是否有故障
crm_verify -L
此时会报错的,因为没有stonith设备,可以用下面命令手动修改全局属性stonith-enabled把stonish禁掉
crm configure property stonith-enabled=false
对于两个节点的HA,比较特别,没有stonith也让它运行。
crm_verify -L
此时应该就没错了
3)配置第一个资源
crm回车
configure回车
primitive WebIP ocf:heartbeat:IPaddr params ip=192.168.0.100
(webip是名字,params指定参数)
show
commit(提交)
exit(退出)
ifconfig
-------------------------------------------------------------------------
8.配置apache高可用服务
node1:
yum install httpd
crm
configure
primitive WebServer lsb:httpd
commit
group Web WebIP WebServer(将两个资源WebIP和WebServer配置到一个组Web里)
commit
exit
service httpd start
chkconfig httpd off
配置网页文件
echo "node1.a.org" >/var/www/html/index.html
node2:
yum install httpd
echo "node2.a.org" >/var/www/html/idnex.html
service httpd start
chkconfig httpd stop
ssh node1 '/etc/init.d/corosync stop'(在node2上把node1停掉)
crm status
此时集群没有quorum(法定票数)默认不让资源流转到node2上
手动把quorum关掉:
ssh node1 '/etc/init.d/corosync start'
crm configure property no-quorum-policy=ignore
ssh node1 '/etc/init.d/corosync stop'
crm status
此时资源会流转到node2上,在浏览器里刷一下看看
ssh node1 '/etc/init.d/corosync start'
此时资源会重新流转回来,在浏览器里刷一下看看
经常流转资源对资源是不好的,此时我们可以定义资源默认粘性,让其流过去后就别再流回来了。
crm configure rsc_defaults resource-stickiness=100
crm status看资源在哪个节点运行
ssh node1 '/etc/init.d/corosync stop'
刷浏览器
ssh node1 '/etc/init.d/corosync start'
刷浏览器,此时就流不回去了。因为资源在谁身上谁的粘性就是100,在两个节点都正常的情况下谁的粘性大就在谁那里呆着。
-------------------------------------------------------------------------
阅读(3214) | 评论(0) | 转发(0) |