因为其版本发展,在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包我会在下面提供。
高可用集群通用基础环境:
-
1,解析名字和服务器名字一定要对应
/etc/hosts 与 uname -n 一定要对应
-
2,时间一定要同步
ntp时间服务器
理论架构我会新开一篇讲,这里就直接讲如何实现的。先把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/
启动前先确保
-
1,需要控制的服务全部都是停止状态,且不能开机自动启动
-
2,主备节点
Dirctor.sh
自动管理Real Server脚本已经启动
启动
[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