LVS用Heartbeat实现高可用

因为其版本发展,在Heartbeat v2 (CentOS 6.4)的中的很多组件到Heartbeat v3(CentOS 6.5)之后就独立成单独的软件。比如heartbeat-pils就独立成了Cluster-glue,CRM集群资源管理器Heartbeat-stonith也独立成了pacemaker。而在CentOS 6.5及之上还想装Heartbeat v2的话,就只能rpm安装。rpm包我会在下面提供。

高可用集群通用基础环境:

理论架构我会新开一篇讲,这里就直接讲如何实现的。先把LVS那个坑填好再说。

名称解析

[root@Director1 ~]# uname -n;cat /etc/hosts
Director1
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.80  Director1
192.168.100.79  Director2

启用公私钥登录(不是必要,看需求)

[root@Director1 ~]# ssh-keygen -t rsa -p""  //创建公私钥
[root@Director1 ~]# ssh-copy-id Director2   //命令在openssl-clients包里面
-------------------------------------------------------
[root@Director2 ~]# ssh-keygen -t rsa -p"" 
[root@Director2 ~]# ssh-copy-id Director1 

NTP

[root@Director1 ~]# yum -y install ntp
[root@Director1 ~]# vim /etc/ntp.conf
在其中加入 
server 127.127.1.0
fudge 127.127.1.0 stratum 10
[root@Director1 ~]# ssh Director2 "ntpdate Direcotr1"
9 Jun 15:36:07 ntpdate[7634]: step time server Director1 offset 234616.251
如果ntpdate同步不了,请自行判断iptables和SELinux。生产环境还需要将同步加入计划任务

安装Heartbeart,如果出现依赖包问题,yum安装就好了

[root@director1 ~]# rpm -Uvh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@director1 ~]# yum -y install  gettext libtool-ltdl PyXML libnet net-snmp-libs perl-TimeDate  //这个是CentOS 6.7我在安装的时候的依赖包
[root@director1 ~]# rpm -ivh heartbeat-2.1.4-12.el6.x86_64.rpm heartbeat-pils-2.1.4-12.el6.x86_64.rpm heartbeat-stonith-2.1.4-12.el6.x86_64.rpm

配置

[root@Director1 ~]# cp /usr/share/doc/heartbeat-2.1.4/{authkeys,haresources,ha.cf} /etc/ha.d/
[root@Director1 ~]# ls /etc/ha.d/
authkeys  ha.cf  harc  haresources  rc.d  README.config  resource.d  shellfuncs
[root@Director1 ~]# vim /etc/ha.d/authkeys 
auth 2                           //指定加密方式
#1 crc
2 sha1 HI!521e6e16ead63ac2       //加密方式,后面是秘钥
#3 md5 Hello!
[root@Director1 ~]# vim /etc/ha.d/ha.cf 
logfile /var/log/ha-log            //日志
keepalive 2                        //心跳包间隔时间
deadtime 6                         //多久没接到心跳就认为对方宕机
warntime 4                         //警告时间,多久没接到心跳就去警告一次
initdead 120                       //等待外围设备时间,为了避免备用服务器一启动没接收到主服务器心跳包就立即转换成主
udpport 694                        //监听端口
#bcast   eth0                      //发送心跳包方式,广播
##mcast eth0 225.0.0.1 694 1 0     //组播
#ucast eth0 192.168.1.2            //单播,三个任选一个,选合适的就好
node    Director1                  //定义集群设备
node    Director2
ping 192.168.100.2                 //定义ping node
[root@Director1 ha.d]# vim haresources 
Director1  192.168.100.20/24/eth0/192.168.100.255 directord    //在当前环境是这样,在其他环境可不同
#主节点 VIP/Netmask/eth#/广播域 RA    //RA是什么我后面会讲

写directord RA文件:

#!/bin/bash
#
# LVS-Director RA
#
# Yanshan Chen   Email:[email protected]  Blog:itcys.top
#
# 2016-06-18
#

VIP=192.168.100.20:80
RIP1=192.168.100.81
RIP2=192.168.100.82

start(){
	echo 1 > /proc/sys/net/ipv4/ip_forward
	/sbin/sysctl -p > /dev/unll

	/sbin/iptables -F
	/sbin/iptables -C
	/sbin/iptables -Z


	/sbin/ipvsadm -A -t $VIP -s wll
	/sbin/ipvsadm -a -t $VIP -r $RIP1 -w 2 -g 
	/sbin/ipvsadm -a -t $VIP -r $RIP2 -w 2 -g
}

stop(){
	echo 0 > /proc/sys/net/ipv4/ip_forward
	/sbin/sysctl -p > /dev/unll

	/sbin/iptables -F
	/sbin/iptables -C
	/sbin/iptables -Z
}

status(){
	/usr/sbin/ss -unl | grep 694
	RETVAL=$?
	if [ $RETVAL -eq 0 ]; then
		echo "Service is Running..."
	else
		echo "Servrice is Stopped!!!"
	fi
}

case $1 in
	start )
		start
		;;
	stop )
		stop
		;;
	status )
		status
		;;
	* )
		echo "Usage directord {start|stop|status}"
esac

[root@Director1 ~]# cp directord.sh /etc/rc.d/init.d/directord
[root@Director1 ~]# chmod +x /etc/rc.d/init.d/directord 

Director2 配置:

[root@Director1 ~]# scp  /etc/rc.d/init.d/directord  Director2:/etc/rc.d/init.d/
[root@Director1 ha.d]# scp -R /etc/ha.d/authkeys haresources ha.cf  Director2:/etc/ha.d/

启动前先确保

启动

[root@Director1 ~]# service heartbeatd start; ssh Director2 "service heartbeatd start"

测试效果

[root@Director1 ~]# ifconfig eth0:1; service heartbeat stop ;ifconfig eth0:1 
eth0:1    Link encap:Ethernet  HWaddr 00:1C:42:7E:EC:FB  
          inet addr:192.168.100.20  Bcast:192.168.100.20  Mask:255.255.255.255
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

Stopping High-Availability services: 
Done.

eth0:1    Link encap:Ethernet  HWaddr 00:1C:42:7E:EC:FB  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
[root@Director1 ~]# ssh Director2 "ifconfig eth0:1"
eth0:1    Link encap:Ethernet  HWaddr 00:1C:42:FE:37:D8  
          inet addr:192.168.100.20  Bcast:192.168.100.20  Mask:255.255.255.255
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

实际测试的时候可能是因为配置太仓促了,所以切换的时候比较慢,不过需要的是一个思路,细节以后慢慢调就是了。而且时机生存环境中也不是用这种方式实现LVS的高可用,后面会讲到的

至此,LVS前端调度器这一套流程算是全部写成Blog了。后面的就会是集群中的其他部分了

RPM包:https://github.com/chenyanshan/Software/tree/master/Heartheat