HA 即 (high available)高可用,又被叫做双机热备。


用于关键性业务。 简单理解就是,有两台机器A和B,正常是A提供服务,B待命闲置,当A宕机或服务宕掉,会切换至B机器继续提供服务。



两个机器, 都是centos6.5,网卡eth1 ip如下:

bier   192.168.1.166

bier1  192.168.1.165


1. hostname 设置好,分别为bier  和 bier1 


2. 关闭防火墙 iptables -F;  

        getenforce

    关闭selinux: setenforce 0

3. vi /etc/hosts   // 增加内容如下

  

192.168.1.166 bier   

192.168.1.165 bier1  



4. 安装epel扩展源:

rpm -ivh  http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

5. 两个机器都安装heartbeat / libnet


yum  install -y heartbeat*   libnet  nginx



6.  主上(bier)配置


cd /usr/share/doc/heartbeat-3.0.4/


cp  authkeys  ha.cf haresources   /etc/ha.d/


cd /etc/ha.d


vi  authkeys  //加入,口令,首位呼应

3

3 md5 Hello!


chmod 600 authkeys



vi  haresources  //加入


bier 192.168.1.10/24/eth1:0 nginx   



vi  ha.cf   //改为如下内容:

debugfile /var/log/ha-debug

logfile /var/log/ha-log

logfacility     local0

keepalive 2  #2秒检测一次是不是宕机

deadtime 30  #30秒检测一次是不是可以ping通

warntime 10   #记录日志,发生一个警告

initdead 60  #机器有时候需要重启预留60秒的时间出来

udpport 694    #启动一个端口通信

ucast eth1 192.168.1.165   #通信的ip

auto_failback on  #从接手了

node    bier

node    bier1

ping 192.168.1.1   #谁都去ping网关

respawn hacluster /usr/lib/heartbeat/ipfail   #监听服务,检测网络状况,宕机让他启动



7.  把主上的三个配置拷贝到从上:

cd /etc/ha.d/

scp  authkeys  ha.cf  haresources   bier1:/etc/ha.d/  

==========从这个机器复制到别的机器


8. 到从上(bier1) 编辑ha.cf


vi  /etc/ha.d/ha.cf   //只需要更改一个地方


ucast eth1 192.168.1.165 改为   ucast eth1 192.168.1.166  #改为对方的ip



9.  启动heartbeat : 


先主,后从


/etc/init.d/heartbeat start 或者


service heartbeat start


日志 less /var/log/ha-log


10. 检查测试 

ifconfig 看是否有 eth1:0

ps aux |grep nginx  看是否有nginx进程


11.  测试1


主上禁ping


iptables -I INPUT -p icmp -j DROP


12. 测试2


主上停止heartbeat服务

service heartbeat stop 






1、安装依赖包(node1和node2同步安装)


[root@node2 ~]# yum -y install autoconf automake gcc-c++ asciidoc libxslt-devel libtool libtool-ltdl-devel libxml2 libxml2-devel bzip2-devel glib2-devel mercurial *openssl* net-snmp OpenIPMI flex bison e2fsprogs-devel


2、源码编译安装


下载地址http://linux-ha.org/wiki/Download

#下载heartbeat

[root@node2 ~]# wget http://hg.linux-ha.org/heartbeat-STABLE_3_0/archive/958e11be8686.tar.bz2

#下载cluster glue

[root@node2 ~]# wget http://hg.linux-ha.org/glue/archive/0a7add1d9996.tar.bz2

#下载cluster resource agents    注意:需要×××

[root@node1 ~]# wget https://github.com/ClusterLabs/resource-agents/archive/v3.9.6.tar.gz

3、创建用户与组


[root@node1 ~]# groupadd haclient

[root@node1 ~]# useradd -g haclient hacluster -M -s /sbin/nologin

4、编译


cluster glue

[root@node1 ~]# tar xf 0a7add1d9996.tar.bz2 

[root@node1 ~]# cd Reusable-Cluster-Components-glue--0a7add1d9996/

[root@node1 Reusable-Cluster-Components-glue--0a7add1d9996]# ./autogen.sh

]# ./configure --prefix=/usr/local/heartbeat --sysconfdir=/etc/heartbeat libdir=/usr/local/heartbeat/lib64 LIBS='/lib64/libuuid.so.1' --with-daemon-user=hacluster --with-daemon-group=haclient

#LIBS如果是32位系统自行更改

]# make && make install

 

resource agents

[root@node1 ~]# tar xf resource-agents-3.9.6.tar.gz

[root@node1 ~]# cd resource-agents-3.9.6

[root@node1 resource-agents-3.9.6]# ./autogen.sh 

[root@node1 resource-agents-3.9.6]# ./configure --prefix=/usr/local/heartbeat --sysconfdir=/etc/heartbeat libdir=/usr/local/heartbeat/lib64 CFLAGS=-I/usr/local/heartbeat/include LDFLAGS=-L/usr/local/heartbeat/lib64 LIBS='/lib64/libuuid.so.1' --with-daemon-user=hacluster --with-daemon-group=haclient

[root@node1 resource-agents-3.9.6]# make && make install

 

heartbeat

[root@node1 ~]# tar xf 958e11be8686.tar.bz2 

[root@node1 ~]# cd Heartbeat-3-0-958e11be8686/

[root@node1 Heartbeat-3-0-958e11be8686]# ./bootstrap 

]# ./configure --prefix=/usr/local/heartbeat --sysconfdir=/etc/heartbeat CFLAGS=-I/usr/local/heartbeat/include LDFLAGS=-L/usr/local/heartbeat/lib64 LIBS='/lib64/libuuid.so.1' --with-daemon-user=hacluster --with-daemon-group=haclient

 

#编译报错,路径重复,google后得出删除 glue_config.h 中配置文件路径即可

[root@node1 Heartbeat-3-0-958e11be8686]# make && make install

../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

 

[root@node1 Heartbeat-3-0-958e11be8686]# vim /usr/local/heartbeat/include/heartbeat/glue_config.h

define HA_HBCONF_DIR "/usr/local/heartbeat/etc/ha.d/"

#删除最后一行即上行内容

5、复制配置文件至/etc//heartbeat/ha.d中


[root@node1 Heartbeat-3-0-958e11be8686]# cp doc/ha.cf /etc/heartbeat/ha.d/

[root@node1 Heartbeat-3-0-958e11be8686]# cp doc/haresources /etc/heartbeat/ha.d/

[root@node1 Heartbeat-3-0-958e11be8686]# cp doc/authkeys /etc/heartbeat/ha.d/

6、将heartbeat加入系统服务,并开机启动


[root@node1 ~]# chkconfig --add heartbeat


#之后可以用service来进行start|stop操作了


[root@node1 ~]# chkconfig heartbeat on


7、修改认证文件权限为600,不然heartbeat无法工作


[root@node1 ~]# chmod 600  /etc/heartbeat/ha.d/authkeys

8、为resource-agents建立脚本软连接


[root@node1 ~]# ln -s /usr/local/heartbeat/usr/lib/ocf /usr/lib/ocf



1、配置authkeys文件,指明启用何种算法,使用何种密钥,本文件须更改权限为400

auth 2

#1 crc

2 sha1 2SIEok+gXAvB6G4seA8mhw

#3 md5 Hello!

  

生成随机字符串作为密钥

[root@node2 ~]# openssl rand -base64 16

2SIEok+gXAvB6G4seA8mhw==

  

  

2、配置ha.cf文件,定义高可用集群的基本工作方式

  

定义日志文件位置(二选一) logfacility为将日志交由syslog管理     

logfile        /var/log/ha-log

#logfacility     local0

多长时间发送一次心跳信息,默认为2秒

#keepalive 2

多长时间宣布某节点死亡,默认30秒

#deadtime 30

多长时间警告对方心跳信息延迟了,默认10秒

#warntime 10

第一次死去时间,避免因网络问题导致宣布死亡

#initdead 120

使用udp694端口传递心跳,并选择哪种方式传递心跳

#udpport        694

串行线缆传递心跳

#serial /dev/ttyS0      # Linux

#serial /dev/cuaa0      # FreeBSD

#serial /dev/cuad0      # FreeBSD 6.x

#serial /dev/cua/a      # Solaris

串行线缆的工作频率

#baud   19200

广播传递心跳

#bcast  eth0            # Linux

#bcast  eth1 eth2       # Linux

#bcast  le0             # Solaris

#bcast  le1 le2         # Solaris

多播传递心跳,网卡必须支持多播,ifconfig | grep MULTICAST

mcast eth0 225.0.0.1 694 1 0          #端口694,TTL为1,不允许回传为0

#启用网卡支持多播

[root@node1 ha.d]# ip link set eth0 multicast on

  

单薄传递心跳

#ucast eth0 192.168.1.2

自动故障转回

auto_failback on

指明节点

#node   ken3

#node   kathy

node    node1

node    node2

指明网关为ping node设备(仲裁设备)

#ping 10.10.10.254

ping 192.168.0.1

指明一个组为ping node设备(仲裁设备)

#ping_group group1 10.10.10.254 10.10.10.253

指明节点间传送的压缩算法

compression     bz2

指明节点间传送数据压缩的最小数据为2KB

compression_threshold 2

 

3、配置haresources文件,定义集群资源直接加入资源

node1 192.168.0.17/24/eth0/192.168.0.255 httpd

 

4、将httpd设置为开机不启动

[root@node1 ha.d]# chkconfig httpd off

 

5、启动服务

[root@node1 ~]# service heartbeat start