Router
eth0 vmnet0 10.1.1.22
eth1 vmnet1 1.1.1.1
eth2 vmnet2 2.2.2.1
vip 2.2.2.100 <----调度器对外提供服务的IP,浮动IP
LB
node3.upl.com
eth0 vmnet2 2.2.2.130 <---Public
eth1 vmnet1 1.1.1.130 <---Private
hosts:
2.2.2.130 node3.upl.com
2.2.2.131 node4.upl.com
BLB
node4.upl.com
eth0 vmnet2 2.2.2.131 <---Public
eth1 vmnet1 1.1.1.131 <---Private
Web1
eth0 vmnet1 1.1.1.128
lo:0 2.2.2.100
gw 1.1.1.1
Web2
eth0 vmnet1 1.1.1.129
lo:0 2.2.2.100
gw 1.1.1.1
资源:
vip
ipvsadm(lvs)+ 规则
Stonith,可编程电源管理设备,fence设备,围栏设备,栅设备
一、在HA节点(调度节点)上搭建heartbeat
1、安装heartbeat
主程序
heartbeat-2.1.3-3.el5.centos.i386.rpm
插件包
heartbeat-pils-2.1.3-3.el5.centos.i386.rpm
可编程设备的驱动和命令
heartbeat-stonith-2.1.3-3.el5.centos.i386.rpm
启动和管理lvs的插件
heartbeat-ldirectord-2.1.3-3.el5.centos.i386.rpm
# yum install createrepo -y
# createrepo /heartbeat/extra/
[extra]
name=extra
baseurl=file:///heartbeat/extra
enabled=1
gpgcheck=0
2、配置heartbeat
只需要在一个节点上配置,然后同步配置文件
主配置文件
# cp /usr/share/doc/heartbeat-2.1.3/ha.cf /etc/ha.d/ha.cf
资源配置文件
# cp /usr/share/doc/heartbeat-2.1.3/haresources /etc/ha.d/haresources
心跳信号加密文件
# cp /usr/share/doc/heartbeat-2.1.3/authkeys /etc/ha.d/authkeys
lvs的规则
# cp /usr/share/doc/heartbeat-ldirectord-2.1.3/ldirectord.cf /etc/ha.d/
# cd /etc/ha.d/
# ls
authkeys harc rc.d resource.d <---资源启动脚本的目录
ha.cf haresources README.config shellfuncs
# vim ha.cf
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 12
warntime 6
initdead 60
udpport 694
ucast eth0 2.2.2.131 <---通过eth0发送心跳信号给对端节点,注意更改
auto_failback off
node node3.upl.com
node node4.upl.com
ping 2.2.2.1 <---辅助节点判断网络故障是否是自身的问题
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
# vim haresources
node3.upl.com IPaddr::2.2.2.100/24/eth0 ldirectord::ldirectord.cf LVSSyncDaemonSwap::master <---一行
格式
主节点的主机名 资源1::参数1::参数2 资源2::参数1 资源3 ... ...
# vim ldirectord.cf
checktimeout=3
checkinterval=1
autoreload=yes
quiescent=yes
virtual=2.2.2.100:80
real=1.1.1.128:80 gate
real=1.1.1.129:80 gate
service=http
request="ok.html" <--健康测试页面
receive="ok" <--健康页面上包含的关键字
scheduler=rr
protocol=tcp
checktype=negotiate
checkport=80
备注
negotiate 通过访问健康页面,判断是否是否包含关键字,如果包含就说明后端节点是健康
connect 通过简单的端口扫描,判断后端节点是否健康
# vim authkeys
auth 2
2 sha1 slkjfkldjf23iu4sd
# chmod 600 authkeys @@@@@@@@@@@@@@@@@@@@@@@
同步配置文件
375 rsync -alvR /etc/ha.d/ha.cf 1.1.1.131:/ @@@@@改@@@@@@@
376 rsync -alvR /etc/ha.d/haresources 1.1.1.131:/
377 rsync -alvR /etc/ha.d/authkeys 1.1.1.131:/
378 rsync -alvR /etc/ha.d/ldirectord.cf 1.1.1.131:/
3、启动heartbeat
两个节点先启动
# service heartbeat start
三、配置后端节点:
建立健康页面ok.html,内容ok
lo:0
gw
静态绑定gw的MAC地址。
四、验证
1、hb服务是正常的。
# ifconfig eth0:0
# ipvsadm -L -n
2、整个架构是工作正常,可以通过vip访问
3、手工测试资源切换
备节点主动把资源抢过来
# /usr/lib/heartbeat/hb_takeover
当前获得资源的节点把资源让给对端节点
# /usr/lib/heartbeat/hb_standby
4、故障切换
1)切断主备节点之前的心跳网络
直接把网卡关闭:物理关闭
发现原来没有获得资源的节点也会把资源启动,原来获得资源的节点也没有释放资源。
两个节点同时获得资源,这种现象称之为:脑裂。
出现脑裂的主要原因是:心跳网络失效了,缺少fence设备。
脑裂现象要绝对避免,否则遇到共享存储的资源会导致数据严重损坏。
如果没有fence设备,可以添加冗余的心跳网络,可以减少出现脑裂的机会,但不能杜绝。
如果心跳网络恢复,备节点一般会把资源释放,停止了脑裂现象。
2) 添加双心跳网络并且设定ping server。
# vim /etc/ha.d/ha.cf
ping 2.2.2.1
ucast eth0 2.2.2.131
ucast eth1 1.1.1.131 《---对端需要给IP
# service heartbeat restart
测试:
切断ping server不在的那个一个心跳网络(eth1) ,验证资源是否切换?
不会切换。
切断ping server所在的网络(eth0),验证资源是否切换?
会切换。
原理:当获得资源的节点无法与ping server通信的时候,它会通过有效的心跳网络资源对端节点是否能够和ping server,如果对端节点可以,那么就代表是自身网络出问题,就会把资源让给对端节点。
3)如果是heartbeat进程本身crash,那么资源也不会释放,对端节点也会把资源抢过去,这时候也会出现脑裂。
解决方法:使用看门狗。
看门狗如果在指定时间内没有收到heartbeat进程发送的信号,那么就会直接重启计算机。
# vim ha.cf
watchdog /dev/watchdog
# service heartbeat restart
加载看门狗模块
# modprobe softdog
设定10秒超时
# echo "10" > /proc/sys/kernel/panic
模拟heartbeat进程出故障
# skill -9 heartbeat
========================================================================
使用heartbeat实现Lamp高可用
clients
|
vip
|--------------------|
web1 web2
|--------------------|
|
share storage(nfs)
共享存储:
存放应该mysql数据文件
web代码以及文件等
资源:
vip
共享存储的挂载
httpd
mysqld 《---注意资源的顺序。
准备:
nfs服务器:
export 1.1.1.1:/webdata
1.1.1.1:/mysqldata
1、搭建heartbeat
安装heartbeat
主程序
heartbeat-2.1.3-3.el5.centos.i386.rpm
插件包
heartbeat-pils-2.1.3-3.el5.centos.i386.rpm
可编程设备的驱动和命令
heartbeat-stonith-2.1.3-3.el5.centos.i386.rpm
2、配置
ha.cf
authkeys
haresources:
node1.upl.com IPaddr::1.1.1.100/24/eth0 Filesystem::1.1.1.1:/webdata::/var/www/html::nfs Filesystem::1.1.1.1:/mysqldata::/data httpd mysqld
同步配置文件
3、安装其他软件
Lamp
把相应的目录建立
4、nfs服务器导出时候注意权限问题。
/webdata *(rw,no_root_squash,no_all_squash)
/mysqldata *(rw,no_root_squash,no_all_squash)
5、找一个节点挂载mysql共享目录,然后进行初始化。
# mount 1.1.1.1:/mysqldata /data/
# chown mysql:mysql /data
编写my.cnf
初始化
卸载/data.因为这些应该交给heartbeat去管理,不应手工去管理这些资源。
6、启动heartbeat
安装phpwind
出故障,看/var/log/ha-log