系统环境: rhel6 x86_64 iptables and selinux disabled
主机: 192.168.122.119 server19.example.com
192.168.122.25 server25.example.com
192.168.122.163 server63.example.com
192.168.122.193 server93.example.com
所需的包:heartbeat-3.0.4-1.el6.x86_64.rpm heartbeat-libs-3.0.4-1.el6.x86_64.rpm heartbeat-devel-3.0.4-1.el6.x86_64.rpm ldirectord-3.9.2-1.2.x86_64.rpm
Realserver1 192.168.122.163:apache
Realserver2 192.168.122.193:apache
Load Balance 192.168.122.119:heartbeat apache
Load Balance 192.168.122.25:heartbeat apache
#配置 Load Balance
以下步骤在server19和server25上实施:
[root@server19 kernel]# yum localinstall heartbeat-3.0.4-1.el6.x86_64.rpm heartbeat-devel-3.0.4-1.el6.x86_64.rpm heartbeat-libs-3.0.4-1.el6.x86_64.rpm ldirectord-3.9.2-1.2.x86_64.rpm -y
[root@server19 kernel]# yum install perl-IO-Socket-INET6 ipvsadm -y
[root@server19 ha.d]# modprobe softdog
[root@server19 ha.d]# echo modprobe softdog >> /etc/rc.d/rc.local
[root@server19 ha.d]# yum install httpd -y
[root@server19 ha.d]# echo `hostname` > /var/www/index.html
[root@server19 ha.d]# /etc/init.d/httpd stop
以下步骤在server19或server25上实施:
[root@server19 kernel]# cd /usr/share/doc/heartbeat-3.0.4/
[root@server19 heartbeat-3.0.4]# cp authkeys haresources ha.cf /etc/ha.d/
注:这三个配置文件可以通过rpm -q heartbeat -d 查看其位置
[root@server19 heartbeat-3.0.4]# cd /usr/share/doc/packages/ldirectord/
[root@server19 ldirectord]# cp ldirectord.cf /etc/ha.d/
注:这个配置文件可以通过rpm -q ldirectord -d 查看其位置
[root@server19 ldirectord]# cd /etc/ha.d/
#配置/etc/ha.d/authkeys
[root@server19 ha.d]# vim authkeys
auth 3
#1 crc
#2 sha1 HI!
3 md5 Hello! (去掉注释)
[root@server19 ha.d]# chmod 600 authkeys
认证文件(/etc/ha.d/authkeys),文件的权限必须是 600
#配置/etc/ha.d/ha.cf
[root@server19 ha.d]# vim ha.cf
debugfile /var/log/ha-debug (去掉注释)
调试日志文件文件,取默认值
logfile /var/log/ha-log (去掉注释)
系统运行日志文件,取默认值
logfacility local0
日志等级,取默认值
keepalive 2(去掉注释)
心跳频率,自己设定。1:表示 1 秒;200ms:表示 200 毫秒
deadtime 30(去掉注释)
节点死亡时间阀值,就是从节点在过了 30 后还没有收到心跳就认为主节点死亡,自己设定
warntime 10 (去掉注释)
发出警告时间,自己设定
initdead 120 (去掉注释)
守护进程首次启动后应该等待 120 秒后再启动主服务器上的资源
udpport 694 (去掉注释)
心跳信息传递的 udp 端口,使用端口 694 进行 bcast 和 ucast 通信,取默认值
bcast eth0 (去掉注释)
采用 udp 广播播来通知心跳
auto_failback on
当主节点恢复后,是否自动切回
watchdog /dev/watchdog (去掉注释)
watchdog 能让系统在出现故障 1 分钟后重启该机器,这个功能可以帮助服务器在确实停止心 跳后能够重新恢复心跳
node server19.example.com
主节点名称,与 uname --n 保持一致.排在第一的默认为主节点,所以不要搞措顺序
node server25.example.com
副节点名称,与 uname --n 保持一致
ping 192.168.122.1
respawn hacluster /usr/lib64/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
默认 heartbeat 并不检测除本身之外的其他任何服务,也不检测网络状况。 所以当网络中断时,并不会进行 Load Balancer 和 Backup 之间的切换。 可以通过 ipfail 插件,设置'ping nodes'来解决这一问题,但不能使用一个集群节点作为 ping 的节点.
#配置/etc/ha.d/haresources
[root@server19 ha.d]# vim haresources
server19.example.com IPaddr::192.168.122.178/24/eth0 ldirectord httpd
注:192.168.122.178为虚拟IP
这个文件中定义了实现集群所需的各个软件的启动脚本,这些脚本必须放在/etc/init.d 或者 /etc/ha.d/resource.d 目录里 IPaddr 的作用是启动 Virutal IP,它是 HeartBeart 自带的一个 脚本.ldirectord 的作用是启动 ldirectord 监控程序,它会使 ldirectord.cf 中定义的 lvs 生效, 并监听其健康状;httpd 是 apache 服务的启动脚本。
#配置/etc/ha.d/ldirectord.cf
[root@server19 ha.d]# vim ldirectord.cf
# Sample for an http virtual service
virtual=192.168.122.178:80 虚拟IP:服务端口
real=192.168.122.163:80 gate realserver:服务端口
real=192.168.122.193:80 gate realserver:服务端口
fallback=127.0.0.1:80 gate 当realserver全挂掉后,由调度器上的服务来提供服务
service=http 服务名
scheduler=rr 算法
#persistent=600 持续连接时间
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate
checkport=80 检测端口
request="index.html" 检测有无inde.html测试页
# receive="Test Page" 检测测试页中的内容
# virtualhost=www.x.y.z
[root@server19 ha.d]# scp authkeys ha.cf haresources ldirectord.cf root@192.168.122.25:/etc/ha.d/
#配置Realserver
以下步骤在server63上实施:
[root@server63 ~]# yum install arptables_jf httpd -y
[root@server63 ~]# arptables -A IN -d 192.168.122.178 -j DROP
[root@server63 ~]# arptables -A OUT -s 192.168.122.178 -j mangle --mangle-ip-s 192.168.122.163
[root@server63 ~]# /etc/init.d/arptables_jf save
[root@server63 ~]# ifconfig eth0:0 192.168.122.178 netmask 255.255.255.255 up
或
[root@server63 ~]# ip addr add 192.168.122.178 dev eth0
注:可用ip addr show查看
[root@server63 ~]# echo `hostname` > /var/www/html/index.html
[root@server63 ~]# /etc/init.d/httpd start
以下步骤在server93上实施:
[root@server93 ~]# yum install arptables_jf httpd -y
[root@server93 ~]# arptables -A IN -d 192.168.122.178 -j DROP
[root@server93 ~]# arptables -A OUT -s 192.168.122.178 -j mangle --mangle-ip-s 192.168.122.193
[root@server93 ~]# /etc/init.d/arptables_jf save
[root@server93 ~]# ifconfig eth0:0 192.168.122.178 netmask 255.255.255.255 up
或
[root@server93 ~]# ip addr add 192.168.122.178 dev eth0
注:可用ip addr show查看
[root@server93 ~]# echo `hostname` > /var/www/html/index.html
[root@server93 ~]# /etc/init.d/httpd start
#启动
以下步骤在server19和server25上实施:
[root@server19 ha.d]# /etc/init.d/heartbeat start
测试
访问192.168.122.178反复刷新页面,如果页面在server63和server93直接来回切换,说明正常。
注:当server63和server93上的apache服务关闭后,访问的将是调度器上的apache页面,如果调度器上的apache也关闭,将无法访问到页面.当一台调度器宕掉后,另一台调度器会接管,发挥调度的作用(即调度器之间实现了高可用)