heatbeat高可用
Heartbeat与Keepalived的区别
Keepalived使用的vrrp协议方式,虚拟路由冗余协议 (Virtual Router Redundancy Protocol,简称VRRP);
Heartbeat是基于主机或网络的服务的高可用方式;
keepalived的目的是模拟路由器的双机
heartbeat的目的是用户service的双机
lvs的高可用建议用keepavlived
业务的高可用建议heartbeat
两款高可用开源方案:Keepalived和Heartbeat。两者都很流行,但差异还是很大的,现将试用过程中的感受以及相关知识点简单总结一下,供大家选择方案的时候参考。
1)Keepalived使用更简单:从安装、配置、使用、维护等角度上对比,Keepalived都比Heartbeat要简单得多,尤其是Heartbeat
2.1.4后拆分成3个子项目,安装、配置、使用都比较复杂,尤其是出问题的时候,都不知道具体是哪个子系统出问题了;而Keepalived只有1个安装文件、1个配置文件,配置文件也简单很多;
2)Heartbeat功能更强大:Heartbeat虽然复杂,但功能更强大,配套工具更全,适合做大型集群管理,而Keepalived主要用于集群倒换,基本没有管理功能;
3)协议不同:Keepalived使用VRRP协议进行通信和选举,Heartbeat使用心跳进行通信和选举;Heartbeat除了走网络外,还可以通过串口通信,貌似更可靠;
4)使用方式基本类似:如果要基于两者设计高可用方案,最终都要根据业务需要写自定义的脚本,Keepalived的脚本没有任何约束,随便怎么写都可以;Heartbeat的脚本有约束,即要支持service
start/stop/restart这种方式,而且Heartbeart提供了很多默认脚本,简单的绑定ip,启动apache等操作都已经有了;
使用建议:优先使用Keepalived,当Keepalived不够用的时候才选择Heartbeat
一、环境说明
主机:centos 7.4(由于7的时候已经不支持yum安装了,所以用到编译安装)
机器:二台
192.168.182.195 Heartbeat1
192.168.182.220 Heartbeat2
vip一个
二、前提条件准备
在每个节点上做以下配置:
[root@master ~]# vim /etc/hosts
192.168.182.148 heartbeat1
192.168.182.195 heartbeat2
[root@master ~]#systemctl stop firewalld
[root@master ~]#setenforce 0
我选择的是admin上:
[root@master ~]# yum install -y ntp
[root@master ~]# vim /etc/ntp.conf #有4行server的位置,把那4行server行注释掉,填写以下两行
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
[root@admin ~]# systemctl start ntpd
[root@admin ~]# systemctl status ntpd
其他所有节点:
# yum install ntpdate -y
# ntpdate 时间服务器ip
192.168.182.148 master
192.168.182.195 backup
[root@master ~]# ssh-keygen
[root@master ~]# ssh-copy-id 192.168.182.195
三、开始安装(没有特殊说明,操作步骤二台都需要)
[root@master ~]# yum -y install gcc gcc-c++ autoconf automake libtool glib2-devel libxml2-devel bzip2 bzip2-devel e2fsprogs-devel libxslt-devel libtool-ltdl-devel asciidoc
创建好所需组和所有者,在编译cluster-glue会设置一些文件的属组和属主分别为haclient、hacluster,因此名称必须为这两个。
[root@master ~]# groupadd haclient
[root@master ~]# useradd -g haclient hacluster
下载链接:(不能用私聊我)
https://pan.baidu.com/s/1fSMixlvBy_FJRrvChAlbkw
提取码:k1tj
[root@master ~]# tar xf glue.tar.bz2 -C /usr/local/
[root@master ~]# mv Reusable-Cluster-Components-glue--0a7add1d9996/ glue
[root@master ~]# cd /usr/local/glue/
[root@master glue]# ./autogen.sh
[root@master glue]# ./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'
[root@master glue]# make && make install
[root@master ~]# tar xf resource-agents-3.9.6.tar.gz -C /usr/local/
[root@master local]# cd resource-agents-3.9.6/
[root@master resource-agents-3.9.6]# ./autogen.sh
[root@master resource-agents-3.9.6]# ./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'
[root@master resource-agents-3.9.6]# make && make install
[root@master resource-agents-3.9.6]# echo $?
0
[root@master ~]# tar xf Heartbeat-3-0.tar.bz2 -C /usr/local
[root@master ~]# cd /usr/local/
[root@master local]# cd Heartbeat-3-0-958e11be8686/
[root@backup Heartbeat-3-0-958e11be8686]# ./bootstrap
[root@master Heartbeat-3-0-958e11be8686]# ./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'
[root@master Heartbeat-3-0-958e11be8686]# make
[root@master Heartbeat-3-0-958e11be8686]#echo $?
0
[root@master Heartbeat-3-0-958e11be8686]# make install
[root@master Heartbeat-3-0-958e11be8686]#echo $?
0
注意
在安装heartbeat的时候出现如下错误:
【configure时错误:】
configure: error: in `/usr/local/Heartbeat-3-0-958e11be8686':
configure: error: Core development headers were not found
解决方法:
[root@master Heartbeat-3-0-958e11be8686]# export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib"
【make时错误:】
/usr/local/heartbeat/include/heartbeat/glue_config.h:105:1: error: "HA_HBCONF_DIR" redefined
In file included from ../include/lha_internal.h:38,
from strlcpy.c:1:
../include/config.h:390:1: error: this is the location of the previous definition
gmake[1]: *** [strlcpy.lo] Error 1
gmake[1]: Leaving directory `/root/Heartbeat-3-0-958e11be8686/replace'
make: *** [all-recursive] Error 1
解决方法1:
删除/usr/local/heartbeat/include/heartbeat/glue_config.h 中的第105行
#define HA_HBCONF_DIR "/etc/ha.d/"
sed -i '105d' /usr/local/heartbeat/include/heartbeat/glue_config.h
解决方法2:configure上加上忽略错误选项
./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient LIBS=/lib64/libuuid.so.1 --enable-fatal-warnings=no
[root@master ~]# mkdir -pv /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/
mkdir: created directory ‘/usr/local/heartbeat/usr’
mkdir: created directory ‘/usr/local/heartbeat/usr/lib’
mkdir: created directory ‘/usr/local/heartbeat/usr/lib/ocf’
mkdir: created directory ‘/usr/local/heartbeat/usr/lib/ocf/lib’
mkdir: created directory ‘/usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/’
[root@master ~]# cp /usr/lib/ocf/lib/heartbeat/ocf-* /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/
注意:一般启动时会报错因为 ping和ucast这些配置都需要插件支持 需要将lib64下面的插件软连接到lib目录 才不会报错异常
[root@master ~]# ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/RAExec/* /usr/local/heartbeat/lib/heartbeat/plugins/RAExec/
‘/usr/local/heartbeat/lib/heartbeat/plugins/RAExec/*’ -> ‘/usr/local/heartbeat/lib64/heartbeat/plugins/RAExec/*’
[root@master ~]# ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/* /usr/local/heartbeat/lib/heartbeat/plugins/
‘/usr/local/heartbeat/lib/heartbeat/plugins/HBauth’ -> ‘/usr/local/heartbeat/lib64/heartbeat/plugins/HBauth’
‘/usr/local/heartbeat/lib/heartbeat/plugins/HBcomm’ -> ‘/usr/local/heartbeat/lib64/heartbeat/plugins/HBcomm’
‘/usr/local/heartbeat/lib/heartbeat/plugins/quorum’ -> ‘/usr/local/heartbeat/lib64/heartbeat/plugins/quorum’
‘/usr/local/heartbeat/lib/heartbeat/plugins/tiebreaker’ -> ‘/usr/local/heartbeat/lib64/heartbeat/plugins/tiebreaker’
在第一台的配置已经全部完成了,第二台也需要同样的操作
四、配置heartbeat
在启用Heartbeat之前,安装后要配置三个文件(如没有可手动建立):ha.cf、haresources、authkeys。这三个配置文件需要在heartbeat/etc/ha.d目录下面,但是默认是没有这三个文件的,可以到官网上下这三个文件,也可以在源码包里找这三个文件,在源码目录下的DOC子目录里。
拷贝三个模版配置文件到 /usr/local/heartbeat/etc/ha.d 目录下
[root@master ~]# cd /usr/local/heartbeat/share/doc/heartbeat
[root@master heartbeat]# cp {ha.cf,haresources,authkeys} /usr/local/heartbeat/etc/ha.d/
xha.cf heartbeat参数配置文件 在这里配置一些基本的参数authkey heartbeat认证文件 高可用服务器对之间根据对端的authkey,对对端的进行认证haresource heartbeat的资源文件 如配置资源以及一些脚本程序
- 配置ha.d配置文件
[root@master ~]# cd /usr/local/heartbeat/etc/ha.d/
[root@master ha.d]# vim ha.cf
logfile /var/log/ha-log
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
ucast ens33 192.168.182.195
auto_failback on
node master
node backup
backup机器
master机器scp发到backup
修改一下单播的IP就行ucast ens33 maser机器的ip
配置文件详细解释
debugfile /var/log/ha-debug #表示调试的日志文件 一般测试建议开启
logfile /var/log/ha-log #表示系统的的日志文件路径
logfacility local0 #表示使用系统日志与上面只能开启一个
keepalive 2 #主备之间的心跳间隔时间单位:s
deadtime 30 #表示如果连接对方30s还无法连接,表示节点死亡需要考虑vip转移
warntime 10 #表示10s时间未收到心跳时发出警告日志
initdead 120 #有时机器启动后需要一段时间网卡才能正常工作 需要预留一定的时间后,再开始判断心跳检测
udpport 694 #多播的udp端口
baud 19200 #串行端口的波特率
serial /dev/ttyS0 # Linux #串口的接口名
serial /dev/cuaa0 # FreeBSD
serial /dev/cuad0 # FreeBSD 6.x
serial /dev/cua/a # Solaris
bcast eth0 # Linux #传播心跳的广播网卡信息
bcast eth1 eth2 # Linux
bcast le0 # Solaris
bcast le1 le2 # Solaris
mcast eth0 225.0.0.1 694 1 0 #多播传送心跳的网卡 多播组 端口 跃点数 是否回环内传送
ucast ens33 192.168.182.195 #设置单播心跳,设置对方的ip地址,此处使用单播
auto_failback on #heartbeat的两台主机分别为主节点和从节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给从节点由从节点运行服务。在该选项设为on的情况下,一旦主节点恢复运行,则自动获取资源并取代从节点,否则不取代从节点。
node master #配置主从的节点信息,要与uname -n保持一致
node backup
#############################################
#使用ping模式 有时当主机挂掉或者heartbeat挂掉后vip才会转移 有时出现某个进程挂掉 切换需要使用脚本
#ping模式用于测试 如果网卡ping不同 某个主机 就认为当前断网 需要转移vip
#respawn root /usr/local/heartbeat/libexec/heartbeat/ipfail 表示当ping不通时 自动调用 ipfail这个脚本
#apiauth ipfail gid=haclient uid=hacluster 表示有权限操作ipfail脚本的组和用户
############################################
ping 192.168.146.2
#ping组的所有主机
ping_group group1 10.10.10.254 10.10.10.253
respawn userid /path/name/to/run
#指定与heartbeat一同启动和关闭的进程,该进程被自动监视,遇到故障则重新启动。最常用的进程是ipfail,该进程用于检测和处理网络故障,需要配合ping语句指定的ping node来检测网络连接。如果你的系统是64bit,请注意该文件的路径。
#respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail
#apiauth ipfail gid=haclient uid=hacluster
[root@master ha.d]# vim authkeys
auth 2
2 md5 UPiwmKChnMwoqL7qi5m6ZKBi9hs
openssl rand -base64 20 #可以使用这条命令生成
#该文件表示发送心跳时 机器用于验证的key的hash算法,节点之间必须配置成一致的密码
backup机器与master机器一样的内容
[root@master ha.d]# vim authkeys
#auth 1 #表示使用id为1的验证 下边需要定义一个1的验证算法
#1 crc #下面这三个为三种算法
#2 sha1 HI!
#3 md5 Hello!
#该文件表示资源的管理,如果是主机,当主机启动后自动加载该文件中配置的所有启动资源,资源脚本默认在haresources同级目录下的resource.d目录下
vim /usr/local/heartbeat/etc/ha.d/haresources
#指定节点主机名,和VIP地址,以双冒号分隔资源,此处以apache为例进行配置
node1.pjy.com 192.168.146.222 apache::/etc/httpd/conf/httpd.conf
安装阿帕奇进行测试
yum -y install httpd
修改阿帕奇主页,看效果
[root@master ~ ]# echo "<h1>master</h1>" >>/var/www/html/index.html
[root@backup ~]# echo "<h1>backup</h1>" >>/var/www/html/index.html
启动
systemctl start httpd
chkconfig --add heartbeat 将heartbeat加入系统服务
chkconfig heartbeat on 开机启动
[root@master ha.d]# systemctl start heartbeat.service
[root@master ha.d]#ip a #查看一下vip
访问主设备
访问热备机
访问vip
五、实现vip的主备节点的转移
[root@master ~ ]# cd /usr/local/heartbeat/share/heartbeat
[root@master heartbeat]# ./hb_standby