HA即(high available)高可用,又被叫作双机热备,用于关键性业务。简单理解就是,有2台机器 A 和 B,正常是 A 提供服务,B 待命闲置,当 A 宕机或服务宕掉,会切换至B机器继续提供服务。常见的实现高可用的开源软件有 heartbeat 和 keepalived。node
这样,一台 web 服务器一天24小时提供web服务,不免会存在 web 服务挂掉或服务器宕机宕机的状况,那么用户就访问不了服务了,这固然不是咱们指望的。若是这样,有2台服务器,A对外提供 web 服务,B做为备用,若是A挂掉,那么B马上替代A的位置去提供 web 服务,这样对用户来讲是透明的。可是有个问题,服务器A的 ip 是 10.0.0.100,服务器B的 ip 是 10.0.0.101,显然向用户提供A或B的ip地址是不可行的,由于用户总不能去切换ip来访问的吧。这时heartbeat或keepalived能够提供一个虚拟IP:10.0.0.102,用户只须要访问 10.0.0.102,当A提供服务时,VIP 会设置在A服务器上,当B提供服务时,VIP会设置在B服务器上,这样就可让用户经过访问 10.0.0.102 来获取web服务,即便A或B服务器切换也不影响用户的正常访问。linux
HA=high availablenginx
VIP=虚拟IPweb
服务器DBMaster:vim
主机名:dbmaster
操做系统:CentOS6.5
eth0 IP0:192.168.150.3
eth0 IP1:192.168.150.33tomcat
服务器DBSlave:服务器
主机名:slave
操做系统:CentOS6.5
eth0 IP0:192.168.150.4
eth0 IP1:192.168.150.44网络
漂移VIP:192.168.150.253(也就是要访问的IP)测试
dbmaster节点设置hostnamespa
#hostname dbmaster #vim /etc/sysconfig/network 编辑配置文件: HOSTNAME=dbmaster
dbslave节点设置hostname
# hostname dbslave # vim /etc/sysconfig/network 编辑配置文件: HOSTNAME=dbslave
关闭iptables
# iptables -F # service iptables save # service iptables stop
关闭selinux:
# setenforce 0 # sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# vim /etc/hosts 增长内容以下: 192.168.150.3 dbmaster 192.168.150.4 dbslave
# yum install -y epel-release
# yum install -y heartbeat* libnet nginx
#rpm -ivh http://www.lishiming.net/data/attachment/forum/epel-release-6-8_32.noarch.rpm yum list|grep heartbeat yum -y install heartbeat* 安装资源包nginx和heartbeat的依赖包libnet和libxml yum -y install nginx yum -y install libnet*
一、拷贝配置文件:
# cd /usr/share/doc/heartbeat-3.0.4/ # cp authkeys ha.cf haresources /etc/ha.d/ # cd /etc/ha.d
二、修改authkeys
# vim authkeys 更改或增长以下内容: auth 3 3 md5 Hello! 而后修改其权限 # chmod 600 authkeys
三、编辑haresources文件
# vim haresources 加入下面一行: dbmaster 192.168.150.253/24/eth0:0 nginx
说明:dbmaster为主节点hostname,192.168.150.253为飘vip,/24为掩码为24的网段,eth0:0为vip的设备名,nginx为heartbeat监控的服务,也是两台机器对外提供的核心服务。
四、编辑ha.cf
# vim ha.cf 修改成以下内容: debugfile /var/log/ha-debug logfile /var/log/ha-log logfacility local0 keepalive 2 deadtime 30 warntime 10 initdead 60 udpport 694 ucast eth0 192.168.150.44 auto_failback on node dbmaster node dbslave ping 192.168.150.253 respawn hacluster /usr/lib64/heartbeat/ipfail
五、配置说明:
debugfile /var/log/ha-debug:该文件保存heartbeat的调试信息。
logfile /var/log/ha-log:heartbeat的日志文件。
keepalive 2:心跳的时间间隔,默认时间单位为秒s。
deadtime 30:超出该时间间隔未收到对方节点的心跳,则认为对方已经死亡。
warntime 10:超出该时间间隔未收到对方节点的心跳,则发出警告并记录到日志中。
initdead 60:在某系统上,系统启动或重启以后须要通过一段时间网络才能正常工做,该选项用于解决这种状况产生的时间间隔,取值至少为deadtime的2倍。
udpport 694:设置广播通讯使用的端口,694为默认使用的端口号。
ucast eth0 192.168.150.44:设置对方机器心跳检测的网卡和IP。
auto_failback on:heartbeat的两台主机分别为主节点和从节点。主节点在正常状况下占用资源并运行全部的服务,遇到故障时把资源交给从节点由从节点运行服务。在该选项设为on的状况下,一旦主节点恢复运行,则自动获取资源并取代从节点,不然不取代从节点。
ping 192.168.150.253:设置的漂移IP。
respawn heartbeat /usr/lib/heartbeat/ipfail:指定与heartbeat一同启动和关闭的进程,该进程被自动监视,遇到故障则从新启动。最经常使用的进程是ipfail,该进程用于检测和处理网络故障,须要配合ping语句指定的ping node来检测网络链接。若是你的系统是64bit,请注意该文件的路径。
# cd /etc/ha.d # scp authkeys ha.cf haresources dbslave:/etc/ha.d
# vim /etc/ha.d/ha.cf 只须要更改一个地方以下:以下IP为对方机器的心跳IP ucast eth0 192.168.150.33
配置完毕后,先master启动,后slave启动。启动后要稍后5-10秒左右能够看到nginx的进程。
# service heartbeat start
# ifconfig 看是否有接口 eth0:0 # ps aux | grep nginx 看是否有nginx进程
主节点中止heartbeat服务
# service heartbeat stop
一、我是在两台服务器上分别部署了tomcat,同样的部署方式及同样的程序,仅是首页的出现的问题一个是dbmaster另外一个是dbslave,使用第三台机器访问“http://192.168.150.253:端口/项目名”时能够发现首页的文字是dbmaster,当停掉master服务器的heartbeat时,再刷新页面会发现已是slave字样。
二、若是启动heartbeat过程当中出现 Resource is stopped 能够忽略。