HA高可用集群

HA(high available)高可用,又被叫做双机热备,用于关键性业务。简单理解,两台机器Web1和Web2,正常是Web1提供服务,Web2待命闲置,当Web1宕机或者服务宕掉,会自动切换到Web2机器继续提供服务,Web1和Web2之间有一根心跳线,检查对方的存活状态,流动IP,也叫作vip,是对外提供服务的IP,正常情况下,vip是配置在Web1上,Web1宕机之后,Web2会自动配置该vip。实现高可用的开源软件有heartbeat和keepalived,其中keepalived有负载均衡的功能。

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

一、设置主机名 ,关闭防火墙,添加hosts,相同的方法设置master和slave

设置主机名

[root@daixuan ~]# hostname master

[root@daixuan ~]# bash

关闭防火墙:

[root@master ~]# iptables -F  //先清空iptables的规则

[root@master ~]# iptables -nvL //查看iptables规则,空

[root@master ~]# getenforce   //使用getenforce获得Selinux的状态,Disabled为关闭

Disabled //vim /etc/selinux/config状态为enforcing,使用setenforce 0关闭,1开

设置hosts

[root@master ~]# vim /etc/hosts

192.168.101.230 master

192.168.101.231 slave


另外需要配置一个IP地址作为集群IP(cluster IP),该IP是集群系统对外提供服务的接口

注意:主机地址与集群地址一定不能重复

etho

192.168.101.230 master

192.168.101.231 slave

eth1

192.168.101.234 master

192.168.101.235 slave


如何配置一个网卡的多个IP?配置方法如下:

[root@master ha.d]# cd /etc/sysconfig/network-scripts/

[root@master network-scripts]# ls

ifcfg-eth0   

[root@master network-scripts]# cp ifcfg-eth0 ifcfg-eth0\:1

[root@master network-scripts]# vim !$

vim ifcfg-eth0\:1

DEVICE=eth0:1

HWADDR=00:0C:29:72:15:45

TYPE=Ethernet

UUID=9c82314b-32ef-4e1f-af8d-540310fd74c6

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=static

IPADDR=192.168.101.234

NETMASK=255.255.255.0

GATEWAY=192.168.101.254

[root@master network-scripts]# /etc/init.d/network restart


二、安装heartbeat

首先安装epel扩展源

[root@master ~]# wget http://www.apelearn.com/bbs/data/p_w_upload/forum/epel-release-6-8_32.noarch.rpm

[root@slave ~]# rpm -ivh epel-release-6-8_32.noarch.rpm

安装heartbeat和libnet

[root@slave ~]# yum install -y heartbeat

[root@slave ~]# yum install -y libnet


三、配置heartbeat

1、拷贝样例

[root@master ~]# cd /usr/share/doc/heartbeat-3.0.4/

[root@master heartbeat-3.0.4]# ls

apphbd.cf  AUTHORS    COPYING       ha.cf        README

authkeys   ChangeLog  COPYING.LGPL  haresources

[root@master heartbeat-3.0.4]# cp authkeys ha.cf haresources /etc/ha.d/

[root@master heartbeat-3.0.4]# cd /etc/ha.d/


2、编辑主从通信的验证文件,

[root@master ha.d]# vim authkeys

auth 3      //主从之间通信的加密的安全度级别

#1 crc      //最简单

#2 sha1 HI!   

3 md5 Hello!   //最复杂

[root@master ha.d]# chmod 600 authkeys //编辑权限,只能让root用户有权限读取该文件,否则heartbeat服务启动不了


3、修改流动IP配置文件

[root@master ha.d]# vim haresources

master  192.168.101.233/24/eth0:0 nginx //设置nginx服务HA的对象

master为主节点的hostname,192.168.101.233为vip,/24为24位网段,eth0:0为vip的设备名,nginx为heartbeat监控的服务,也是两台机器对外提供的核心服务


[root@master ha.d]# vim ha.cf

[root@master ha.d]# > ha.cf   //清空ha.cf的配置,

[root@master ha.d]# vim ha.cf  //编辑ha.cf配置

debugefile /var/log/ha-debug   //排障文件,保存heartbeat的调试信息

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

logfacility     local0

keepalive 2              //2s去探测一次

deadtime 30              //30sping不通对方认为宕机

warntime 10              //10sping不通对方,警告记录到logfile

initdead 60              //重启预留60s,取值至少为deadtime的2倍

udpport 694              //udp广播通信的端口

ucast eth0 192.168.101.231    //配置对方(slave)心跳检测的网卡和IP

auto_failback on           //on表示如果从被启动了,当主再次激活时候,切换回来取代从

node    master

node    slave

ping 192.168.101.254          //仲裁地址

respawn hacluster /usr/lib/heartbeat/ipfail //检测网络的联通性


4、拷贝三个配置文件到slave从主机上

[root@master ha.d]# scp authkeys haresources ha.cf slave:/etc/ha.d/   //验证从密码即可


5、修改从主机的配置文件

[root@slave ~]# cd /etc/ha.d/

[root@slave ha.d]# vim ha.cf

ucast eth0 192.168.101.230  //修改为master的IP地址


6、主从服务器安装服务nginx

[root@master ha.d]# yum install -y nginx

[root@slave ha.d]# yum install -y nginx


四、测试heartbeat

测试方法:建立防火墙规则,禁用ping服务,切换主从服务器,查看web浏览器访问结果


1、先主后从的顺序启动heartbeat

[root@master ha.d]# /etc/init.d/heartbeat start

Starting High-Availability services: INFO:  Resource is stopped

Done.

[root@slave network-scripts]# /etc/init.d/heartbeat start

Starting High-Availability services: INFO:  Resource is stopped

Done.

在主服务器上可以看到已经监听流动vipeth0:0192.168.101.233 

[root@master ha.d]# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:72:15:45

          inet addr:192.168.101.230  Bcast:192.168.101.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fe72:1545/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:364396 errors:0 dropped:0 overruns:0 frame:0

          TX packets:45272 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:89485897 (85.3 MiB)  TX bytes:10432895 (9.9 MiB)

          Interrupt:19 Base address:0x2024


eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:72:15:45

          inet addr:192.168.101.233  Bcast:192.168.101.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          Interrupt:19 Base address:0x2024


eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:72:15:45

          inet addr:192.168.101.234  Bcast:192.168.101.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          Interrupt:19 Base address:0x2024


主的nginx启动之后,从的nginx不会启动

[root@master ha.d]# ps aux | grep nginx //查看nginx的进程

nobody   12583  0.0  0.1   6416  2604 ?   S    Jan13   0:00 nginx: worker process

nobody   12584  0.0  0.1   6416  2196 ?   S    Jan13   0:16 nginx: worker process

[root@slave network-scripts]# ps aux | grep nginx

root     20005  0.0  0.0   6048   780 pts/0    S+   17:15   0:00 grep nginx


2、在浏览器中输入http://192.168.101.233,默认打开master服务器上的Discuz论坛

在从上添加默认nginx的页面内容

[root@slave network-scripts]# echo "HAslave" > /usr/share/nginx/html/index.html

添加防火墙规则

[root@master ha.d]# iptables -A INPUT -p icmp -j DROP

浏览器打开为:HAslave

验证成功,查看日志,ha主停止,从启动的过程记录下来了

[root@master ha.d]# cat /var/log/ha-log

[root@slave ha.d]# cat /var/log/ha-log