HA即(high available)高可用,又叫做双机热备。简单的理解就是,机器A和机器B,正常是A提供服务,B待命闲置,当A宕机或则服务器宕掉,会切换至B机器继续提供服务,常用实现高可用开源软件有hearbeatkeepalived,其中keepalived有负载均衡的功能。

HA高可用集群_第1张图片

如图所示为一个HA架构,一个交换机下面有两台机器Web1Web2,其中Web1为主节点,正常是它提供服务,而Web2备用节点是闲置的。Web1Web2中间有一根心跳线,检查对方的存活状态。流动IP,也叫vip是对外提供服务的ip,正常情况下是配置在Web1上的,当Web1宕机后,Web2会自动配置该vip,对外提供服务。

原理:

两个web服务器,通过心跳线进行通信,当主节点服出现务异常,备用节点通过探测判断主节点是否存活,若是不存活,就把服务接过来。

实验:使用heartbeatHA集群,并且把nginx服务作为HA对应的服务。准备工作:

两台机器,都是centos6.7,网卡ech0 IP

master 192.168.134.135

slave 192.168.134.138

eth0:1流动IPVIP192.168.134.201

实验准备

hostname分别为masterslave

主:

hostname master

vim /etc/sysconfig/network

HOSTNAME=master                          

从:

hostname slave

vim /etc/sysconfig/network

HOSTNAME=slave

关闭防火墙和安全机制

iptables -F

/etc/init.d/iptables save

setenforce 0

vim /etc/selinux/config

SELINUX=disabled

主从绑定hosts文件

vim /etc/hosts

192.168.134.135 master

192.168.134.138 slave

安装epel扩展源

wget'http://www.lishiming.net/data/p_w_upload/forum/epel-release-6-8_32.noarch.rpm'

rpm -ivh epel-release-6-8_32.noarch.rpm

安装heartbeat

主从都要安装

主:

yum install -y heartbeat

yum install -y libnet

yum install -y nginx

从:

yum install -y heartbeat

yum install -y libnet

yum install -y nginx

 

实验配置

主上:

cd /usr/share/doc/heartbeat-3.0.4

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

cd /etc/ha.d

vim authkeys                                                                                       //用来验证两个机器主从通信

//修改或者增加

auth 3

3 md5 Hello!                                                                                        //不同级别,3居中,1简单,2复杂

chmod 600 authkeys                                                                         //只让root有权限,,提高安全性

vim haresources

//删除或者增加一行

master 192.168.134.201/24/eth0:1 nginx      //IP是流动IPvip),虚拟IP,对外提供服务的IP

//master是主节点的hostname192.168.134.201/24表示一个网段 eth0:1vip设备名 nginx做集群的服务

 

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

auto_failback on

node   master

node   slave

ping 192.168.134.3

respawn hacluster /usr/lib/heartbeat/ipfail

解释含义:

//--debugfile /var/log/ha-debug -- 该文件保存heartbeat

logfile /var/log/ha-log -- heartbeat的日志文件

logfacility    local0 --

keepalive 2 -- 心跳的时间间隔,默认时间单位为秒

deadtime 30 -- 超出该时间时间间隔为收到对方节点的心跳,则认为对方已死亡

warntime 10 -- 超出该时间时间间隔为收到对方节点的心跳,则发出警告并记录到日志中

initdead 60  -- 在某些系统上,系统启动或重启之后需要经过一段时间网络才能恢复正>常工作,该选项用于解决这种情况生产的时间间隔。取值至少为deadtime的两倍

udpport 694 -- 设置广播通信使用的端口,694为默认使用端口。

ucast eth0 192.168.134.138 对方的(主或从)的ip和网卡 -- 设置对方机器心跳检测的

网卡和IP

auto_failback on

node    master 主的主机名

node    slave从的主机名

ping 192.168.134.3 裁判的IP,这个要功能强大的IP,如网关

respawn hacluster /usr/lib/heartbeat/ipfail  -- 指定hearbeat一同启动和关闭的进程,该进程被自动监听,遇到故障则重新启动,最常用的进程是ipfail,改进程用于检测和处理网络异常,需要配合ping语句ping node来检测网络连接。如果系统是64位,需要注意>该文件的路径--//

ucast是心跳线。 haresource里面是vip

yum install –y openssh-clients                                     //scp远程同步命令

scp authkeys ha.cf haresources192.168.134.138:/etc/ha.d/

 

从上:

只修改

vim /etc/ha.d/ha.cf

ucast eth0 192.168.134.138改为ucast eth0 192.168.134.135

实验配置完成

验证实验

主上:

/etc/init.d/heartbeat start

echo "111111111111" >/usr/share/nginx/html/index.html                     //nginx默认界面

ifconfig

//看是否有eth0:1

ps aux |grep mginx

//看是否有nginx进程

从上:

/etc/init.d/heartbeat start

echo "222222222222" >/usr/share/nginx/html/index.html

//在浏览器输入流动IP,这个IP是对外的,用户访问IP,可用apache指定虚拟主机

192.168.134.201

此时显示111111111111

主上:

//当主上服务宕机,流动IP会在slave

/etc/init.d/heartbeat stop

//刷新浏览器

此时显示222222222222

/etc/init.d/heartbeat start

//刷新浏览器

此时显示111111111111