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