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