首页 » 高并发 » 正文

Linux架构之HA配置

简介

通过安装该Linux-HA软件,可以实现Linux双机系统的高可用性解决方案,实现双机系统的热备份,并能够做到双机之间的无缝切换,从而对外

提供稳定可靠的服务,最终实现系统高性能RAS(reliability, availability, and serviceability)。


实验环境

wKioL1ht48KxNpH7AAHvvrDzldU315.png-wh_50

这里使用heartbeat来做HA集群,并且把nginx服务作为HA对应的服务。

Chumjtest01 eth0 172.31.24.199 eth0:1   192.168.1.109 VIP: 172.31.24.202
Chumjtest02 eth0 172.31.24.200 eth0:1   192.168.1.110 VIP: 172.31.24.202

实验准备工作

1.编辑修改hosts文件,将两台服务器的IP添加上,

2. 关闭防火墙 iptables -F;
关闭selinux: setenforce 0

3.安装好eprl,安装好heartbeat、libnet


主配置

1
2
3
4
5
6
7
8
9
10
11
[root@chumjtest01 ~]# cd /usr/share/doc/heartbeat-3.0.4/
[root@chumjtest01 heartbeat-3.0.4]# cp  authkeys  ha.cf haresources   /etc/ha.d/
[root@chumjtest01 heartbeat-3.0.4]# cd /etc/ha.d/
[root@chumjtest01 ha.d]# ls
authkeys  ha.cf  harc  haresources  rc.d  README.config  resource.d  shellfuncs
[root@chumjtest01 ha.d]# vim authkeys     //authkeys是验证主从的
auth 3           //选择3 使用md5 验证
#1 crc
#2 sha1 HI!
3 md5 Hello!      //去掉#号,表示打开md5来验证 
[root@chumjtest01 ha.d]# chmod 600 authkeys  //赋予root读写权限。

配置VIP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[root@chumjtest01 ha.d]# cd /etc/sysconfig/network-scripts/
[root@chumjtest01 network-scripts]# cp ifcfg-eth0 ifcfg-eth0:1  //新建一个IP配置文件,同一个网卡可以配置多个IP
[root@chumjtest01 network-scripts]# vim ifcfg-eth0:1    //编辑VIP
DEVICE=eth0:1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=172.31.24.202    //将IP地址改成VIP地址,去掉一些不要的内容。
PREFIX=24
#GATEWAY=172.31.24.1
DEFROUTE=yes
[root@chumjtest01 network-scripts]# service network restart    //重启下网络服务
Shutting down interface eth0:                              [  OK  ]
Shutting down loopback interface:                          [  OK  ]
Bringing up loopback interface:                            [  OK  ]
Bringing up interface eth0:  Determining if ip address 172.31.24.199 is already in use for device eth0...
Determining if ip address 172.31.24.198 is already in use for device eth0...
                                                           [  OK  ]
[root@chumjtest01 network-scripts]# ifconfig     //可以看到VIP网卡已经显示
eth0      Link encap:Ethernet  HWaddr 00:50:56:B3:79:E3  
          inet addr:172.31.24.199  Bcast:172.31.24.255  Mask:255.255.255.0
          inet6 addr: fe80::250:56ff:feb3:79e3/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:22 errors:0 dropped:0 overruns:0 frame:0
          TX packets:24 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2130 (2.0 KiB)  TX bytes:3428 (3.3 KiB)
eth0:1    Link encap:Ethernet  HWaddr 00:50:56:B3:79:E3  
          inet addr:172.31.24.198  Bcast:172.31.24.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)

配置节点文件

1
2
3
4
[root@chumjtest01 /]# cd /etc/ha.d/
[root@chumjtest01 ha.d]# vim haresources
#node1  10.0.0.170 Filesystem::/dev/sda1::/data1::ext2
chumjtest01     172.31.24.198:/24/eth0:0 nginx      //添加主机名、VIP和需要集群的服务

配置ha配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@chumjtest01 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 172.31.24.200    //对方的IP地址
auto_failback on
node    chumjtest01    //node1地址
node    chumjtest02    //node2地址
ping 172.31.24.1        //仲裁地址,一般用路由器或者交换机
respawn hacluster /usr/lib64/heartbeat/ipfail

从机配置

将主机上的配置文件拷贝到从机上

1
2
3
4
5
[root@chumjtest01 ha.d]scp authkeys ha.cf haresources chumjtest02:/etc/ha.d/
只要修改
vi  /etc/ha.d/ha.cf 
 //只需要更改一个地方
ucast eth1 172.31.24.200 改为   ucast eth1 172.31.24.199

启动heartbeat

先启动主,在启动从

主机启动情况:

1
2
3
[root@chumjtest01 ha.d]# service heartbeat start
Starting High-Availability services: INFO:  Resource is stopped
Done.

检查下nginx服务有没有启动

1
2
3
4
5
[root@chumjtest01 ha.d]# ps aux |grep nginx
root      6989  0.0  0.0 109336  2036 ?        Ss   17:40   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx     6990  0.0  0.0 109760  2704 ?        S    17:40   0:00 nginx: worker process                   
nginx     6991  0.0  0.0 109760  2756 ?        S    17:40   0:00 nginx: worker process                   
root      6995  0.0  0.0 103252   824 pts/1    S+   17:41   0:00 grep nginx

从机启动情况:

1
2
3
[root@chumjtest02 ha.d]# service heartbeat start
Starting High-Availability services: INFO:  Resource is stopped
Done.

测试

在主机的nginx下写一个简单的html文件,并且访问下

1
2
3
4
5
[root@chumjtest01 /]# cd /usr/share/nginx/html
[root@chumjtest01 html]# vim 1.html
chumjtest01
[root@chumjtest01 ha.d]# curl http://172.31.24.199/1.html    //测试下显示chumjtest01
chumjtest01

同样在从机上写下一个简单的html文件

1
2
3
4
5
6
7
8
9
10
11
12
[root@chumjtest02 html]# vim 1.html
chumjtest02
[root@chumjtest02 html]# curl http://172.31.24.200/1.html   //网页无法显示,说明Nginx没启动
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /1.html was not found on this server.</p>
<hr>
<address>Apache/2.2.15 (CentOS) Server at 172.31.24.200 Port 80</address>
</body></html>

在测试下VIP访问,说明现在在nginx在主机上运行

1
2
[root@chumjtest01 ha.d]# curl http://172.31.24.202/1.html
chumjtest01

打开防火墙,将主机禁ping

1
[root@chumjtest01 html]# iptables -I INPUT -p icmp -j DROP

查看主机chumjtest01的HA日志,看到“We are dead”,表示主机认为自己已经死了,要切到从机上

1
Jan 05 13:55:29 chumjtest01 ipfail: [21826]: info: NS: We are dead. :<

查看从机chumjtest02的HA日志,从机启动ngix。

1
ResourceManager(default)[3176]: 2017/01/05_13:55:44 info: Running /etc/init.d/nginx  start

在访问下VIP的地址,已经切换到从机上去了。

1
2
[root@chumjtest01 html]# curl http://172.31.24.202/1.html
chumjtest02

注:

heartbeat日志在/var/log/ha-log,如果启动有问题请尽量查看日志。

1.ERROR: Client child command [/usr/lib/heartbeat/ipfail] is not executable

说明64位系统,要在ha.cf下的/usr/lib64/heartbeat/ipfail

2.ERROR: Illegal directive [node ] in /etc/ha.d//ha.cf

ucast eth0 172.31.24.200 要注意在ha.cf下网络端口是否匹配

发表评论