首页 > 代码库 > HA集群配置

HA集群配置

高可用

高可用 high available 也称为双机热备,用户关键性业务(一台机器挂了会影响到大部分业务)

有两台服务器AB,正常时A提供服务B待命,当A宕机或服务宕掉时,B继续提供服务。

常用开源软件heartbeat和keepalived,其中keepalived有负载均衡的功能。

技术分享

心跳线:最好选择串口线或独立网卡直连

此操作需要AB服务器都操作(在干净的环境操作实验)

前期准备:

## 设置一下hostname(主和从)

[root@wy ~]# hostname master

[root@wy ~]# bash

[root@master ~]#

 

[root@y2 ~]# hostname slave

[root@y2 ~]# bash

[root@slave ~]#

 

## 关闭防火墙、selinux(主和从)

[root@master ~]# iptables -F

[root@master ~]# vim /etc/selinux/config

SELINUX=disabled

## 编辑hosts文件(主和从)

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

192.168.219.129 master

192.168.219.128 slave

安装:

## 查看是否有heartbeat包(主和从)

[root@master ~]# yum list | grep heartbeat

解释说明:

若是没有先要安装一下扩展源 wget www.lishiming.net/data/attachment/forum/epel-release-6-8_64.noarch.rpm

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

或者直接yum安装 yum install -y epel-release

## 安装heartbeat(主和从)

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

 

## 安装libnet(主和从)

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

解释说明:

heartbeat依赖于此包


配置: 

## 拷贝配置文件样例

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

[root@master heartbeat-3.0.4]# ls ha.cf haresources authkeys

authkeys  ha.cf  haresources

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

 

## 修改配置文件

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

1、authkeys

[root@master ha.d]# vim authkeys

auth 3

#1 crc

#2 sha1 HI!

3 md5 Hello!

解释说明:

它是用来验证的,两个机器主从它们之间需要去通信,验证对方有没有存活,但是这个通信最好是加密的。从简单到难:1 3 2

 

[root@master ha.d]# chmod 600 authkeys

 

2、haresources

[root@master ha.d]# vim haresources

master 192.168.219.110/24/eth0:0 nginx 

解释说明:

用来指定主节点,虚拟ip,服务

对外提供服务的ip

eth0:0虚拟ip

nginx表示/etc/init.d/nginx服务,也就是指定资源

3、ha.cf

[root@master ha.d]# 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.219.128

auto_failback on

node master

node slave

ping 192.168.219.1

respawn hacluster /usr/lib64/heartbeat/ipfail

解释说明:

debugfile /var/log/ha-debug 调试日志文件

logfile /var/log/ha-log 日志

logfacility  local0   与log相关的日志级别

keepalive 2 检测间隔时长

deadtime 30 响应时间,超时判定为死掉了

warntime 10 指定时间内不通发送警告,且记录日志

initdead 60 重启过程中所等待的时间

udpport 694 广播端口形式检测对方心跳是否存活

ucast eth0 192.168.219.128 设置对方ip检测心跳线

auto_failback on 当从检测到主恢复后交权

node    master    主host

node    slave     从host

ping 192.168.219.1 仲裁地址

respawn hacluster /usr/lib64/heartbeat/ipfail      注:系统是32位的就写lib,64的就写lib64

       respawn  当/usr/lib64/heartbeat/ipfail进程死掉的时候,自动把它拉起来

       hacluster 是启动heartbeat的用户

       ipfail 用与检测网络连通性的服务

## 将主配置文件拷贝给从

[root@master ha.d]# scp authkeys haresources ha.cf slave:/etc/ha.d/

## 从上编辑ha.cf

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

ucast eth0 192.168.219.129

## 安装nginx(主和从)

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


启动: 

## 先启动主

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

Starting High-Availability services: INFO:  Resource is stopped

Done

## 再启动从

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

验证: 

## 查看虚拟ip

[root@master ha.d]# ip add

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN

   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

   inet 127.0.0.1/8 scope host lo

   inet6 ::1/128 scope host

      valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

   link/ether 00:0c:29:72:12:f5 brd ff:ff:ff:ff:ff:ff

   inet 192.168.219.129/24 brd 192.168.219.255 scope global eth0

   inet 192.168.219.110/24 brd 192.168.219.255 scope global secondary eth0:0

   inet6 fe80::20c:29ff:fe72:12f5/64 scope link

      valid_lft forever preferred_lft forever

[root@master ha.d]# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:72:12:F5  

         inet addr:192.168.219.129  Bcast:192.168.219.255  Mask:255.255.255.0

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

         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

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

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

         collisions:0 txqueuelen:1000

         RX bytes:88757 (86.6 KiB)  TX bytes:89816 (87.7 KiB)

eth0:0   Link encap:Ethernet  HWaddr 00:0C:29:72:12:F5  

         inet addr:192.168.219.110  Bcast:192.168.219.255  Mask:255.255.255.0

         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

lo        Link encap:Local Loopback  

         inet addr:127.0.0.1  Mask:255.0.0.0

         inet6 addr: ::1/128 Scope:Host

         UP LOOPBACK RUNNING  MTU:16436  Metric:1

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

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

         collisions:0 txqueuelen:0

         RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

解释说明:

从上不会看到

## 主上查看nginx进程

[root@master ha.d]# ps aux|grep nginx

root      2212  0.0  0.2 109340  2176 ?        Ss   02:00   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf

nginx     2214  0.0  0.2 109764  2828 ?        S    02:00   0:00 nginx: worker process                  

root      2234  0.0  0.0 103248   868 pts/0    S+   02:00   0:00 grep nginx

## 从上查看nginx进程

[root@slave ha.d]# ps aux|grep nginx

root      1824  0.0  0.1 103252   880 pts/0    S+   18:08   0:00 grep nginx

解释说明:

它是不可能启动的,如果它真启动了nginx,说明这个HA做得不成功,想一想,怎么两个一主一从都可以

给你提供服务呢,做的又不是负载均衡,而是高可用,这点需要注意。

测试:

 ## 主上修改nginx的index.html

[root@master ha.d]# echo "11111111111master" > /usr/share/nginx/html/index.html

 ## 页面访问一下

技术分享

 ## 从上修改nginx的index.html

[root@slave ha.d]# echo "222222222222slave" > /usr/share/nginx/html/index.html

## 屏蔽icmp

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

解释说明:

检测网络连通性它用的一个本职的工具其实就是ping ,那我们不妨把icmp给屏蔽掉。

## 主上查看日志

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

## 从上查看日志

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

## 访问页面

技术分享

## 从上查看是否监听了80端口,启动了nginx

[root@slave ha.d]# ps aux|grep nginx

root      2235  0.0  0.4 109344  2176 ?        Ss   18:40   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf

nginx     2241  0.0  0.5 109768  2824 ?        S    18:40   0:00 nginx: worker process                  

root      2254  0.0  0.1 103252   880 pts/0    S+   18:40   0:00 grep nginx

## 从上是否有了虚拟ip

[root@slave ha.d]# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:0F:4B:99  

         inet addr:192.168.219.128  Bcast:192.168.219.255  Mask:255.255.255.0

         inet6 addr: fe80::20c:29ff:fe0f:4b99/64 Scope:Link

         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

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

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

         collisions:0 txqueuelen:1000

         RX bytes:1844436 (1.7 MiB)  TX bytes:895624 (874.6 KiB)

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:0F:4B:99  

         inet addr:192.168.219.110 Bcast:192.168.219.255  Mask:255.255.255.0

         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

## 去掉icmp这条规则

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

## 从上查看nginx服务

[root@slave ha.d]# ps aux|grep nginx

root      2510  0.0  0.1 103252   880 pts/0    S+   18:51   0:00 grep nginx

## 主上再查看nginx服务已经启动了

[root@master ha.d]# ps aux|grep nginx

root      3008  0.0  0.2 109340  2176 ?        Ss   02:51   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf

nginx     3010  0.0  0.2 109764  2828 ?        S    02:51   0:00 nginx: worker process                  

root      3012  0.0  0.0 103248   868 pts/0    S+   02:51   0:00 grep nginx

## 再访问页面

技术分享

## 主上把heartbeat服务停掉

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

## 主上查看到nginx服务已停掉

[root@master ha.d]# ps aux|grep nginx

## 再访问页面

技术分享

备注:屏蔽icmp这条规则的操作没起作用,没做成功,不知道哪里出了问题?(低版本可能可以,新版本对icmp就不起作用了)


本文出自 “linux” 博客,转载请与作者联系!

HA集群配置