高可用群集HA综合案例详解(High Available)

高可用群集:在同一时刻只有一台机器处于活动状态,另一台处于备份状态

通常采用下图做法,将director做成高性能群集,使任何时候都有一台处于活动状态;将下层的服务器做成负载均衡群集使请求交与多台服务器进行处理

实现方法:

1.heartbeat :比较常用 版本 v1 v2 v3

2.rhcs :redhat 集群套件--redhat cluster suite 图形界面,实现方便,可有100多个节点

3.corosync/openais +paceker

2个节点:

采用主备模式:一台激活,另一台备份,对外呈现一个虚拟ip地址。两个节点之间采用心跳线,备份节点使用心跳线来探测活动节点是否处于活动状态。

心跳线:双绞线 或光纤跳线或 serial线

采用主主模式:两个节点,在提供web服务时,左侧为激活状态,右侧为备份状态;在实现mail服务时, 一个为激活状态,一个为备份状态

HA群集的资源:

ip地址 脚本 服务

群集分裂:

当一台活动节点处于假死状态(可能是心跳线故障,使备份节点自动激活),备份节点自动激活,两个节点将出现抢占资源状态。 split-brain

群集分裂处理方法:

stonth :shoot the other in the head 使用电源交换机,当出现资源争抢时,自动切断另一台节点的电源

fence:在rhcs说法

案例一:两个节点node1.a.com和node2.a.com ,都有web服务,二者之间用心跳线进行监控,使同一时刻只有一台服务器提供web服务,另一台作为备份。对外呈现唯一的一个ip地址10.101 (主备模式)

拓扑图:

正确配置node1和node2的ip地址:

1.做高可用群集要求两台机器能够互相进行解析,先把node的名字对应的修改一下,这里就修改hosts值,也可以实现解析的功能。

[root@localhost ~]# vim /etc/sysconfig/network

NETWORKING=yes

NETWORKING_IPV6=no

HOSTNAME=node1.a.comtest

[root@localhost ~]# vim /etc/sysconfig/network

NETWORKING=yes

NETWORKING_IPV6=no

HOSTNAME=node2.a.comtest

2.设置hosts值

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

192.168.10.201   node1.a.com

192.168.10.202   node2.a.com

挂载光盘并配置yum源

[root@localhost ~]# mount /dev/cdrom /mnt/cdrom

3.安装httpd服务并且启动服务。

创建的网页 分别为test1  test2

测试网页正常后关闭httpd服务,以便后面的测试。

.在每个服务器上安装heartbeat服务,使两个服务器成为高可用群集(需要以下几个包)

yum localinstall  heartbeat-2.1.4-11.el5.i386.rpm heartbeat-pils-2.1.4-11.el5.i386.rpm heartbeat-stonith-2.1.4-11.el5.i386.rpm libnet-1.1.4-3.el5.i386.rpm perl-MailTools-1.77-1.el5.noarch.rpm --nogpgcheck -y

4.安装后在/etc下会生成目录ha.d目录,在这里可以设置心跳在哪个网卡上运行,采用广播、组播还是单播;虚拟ip是多少,刚开始启动时激活的设备是哪台服务器

rpm -ql heartbeat|less 查看安装heartbeat后文件的路径

/usr/share/doc/heartbeat-2.1.4/authkeys      #群集成员之间的验证,验证是否是合法成员。

/usr/share/doc/heartbeat-2.1.4/ha.cf

/usr/share/doc/heartbeat-2.1.4/haresources   #定义群集资源

5.切换至/usr/share/doc/heartbeat-2.1.4,将authkeys haresources ha.cf 文件复制到/etc/ha.d下

cd /usr/share/doc/heartbeat-2.1.4/

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

6.切换至目录/etc/ha.d下,编辑文件ha.cf,该文件主要用来定义心跳探测机制

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

95 bcast eth1    采用广播从eth1上来测试心跳。

213 node  node1.a.com

214 node  node2.a.com         成员有两个而且要进行域名解析

[root@localhost ha.d]# vim authkeys 

7.编辑文件authkeys ,该文件主要用来验证成员之间的有效性,需要将文件权限设置为600,否则服务将无法启动

#1 crc 验证方式1表示crc校验

#2 sha1 HI! 验证方式2表示采用哈希值 ,“HI!”为密码

#3 md5 Hello! 验证方式3表示md5加密 ,“Hello!”为密码

 24 #1 crc

 25 #2 sha1 HI!

 26 #3 md5 Hello! 

auth 3

3 md5 8a730ebbe9c05ec3a84d16a60506fa49        #两个node使用同一个值

第三种验证即md5验证,需要使用密文密码,可以使用命令# dd if=/dev/random bs=512 count=1 |openssl md5 残生一个随机数,并使用md5加密,然后将该字符串作为成员之间的验证密码

8.修改权限

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

不修改权限会出现如下错误:

heartbeat[4981]: 2012/12/30_02:07:30 ERROR: Bad permissions on keyfile [/etc/ha.d/authkeys], 600 recommended.

9.修改haresources

[root@localhost ha.d]# vim haresources 

45 node1.a.com 192.168.10.101/24/eth0/空格 httpd  

#  node为主(这里在node2上也要设置node1.a.com)不然的话就会出现httpd都在运行

10.将httpd的脚本文件复制到/etc/ha.d/resource.d

[root@localhost ha.d]# cp /etc/init.d/httpd  /etc/ha.d/resource.d

在两个节点上都启用heartbeat服务,并将该服务设置为开机自启动

[root@node1 ~]# service heartbeat start

[root@node1 ~]# chkconfig heartbeat on    #自动启动。

Node2上做同样的设置。

11.验证 通过外网访问虚拟ip

[root@node1 ~]# ifconfig

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:56:00:D6       #群集ip地址。

          inet addr:192.168.10.101  Bcast:192.168.10.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          Interrupt:67 Base address:0x2000 

可以发现node1.a.com上的httpd服务自动启动,node2.a.com 上没有启动

[root@node1 ~]#  service httpd status

httpd (pid  7734) 正在运行...

[root@node2 ha.d]# service httpd status

httpd 已停

12.在node2.a.com上没隔一秒查看一次httpd的状态

# watch -n 1 'service httpd status'

关掉node1 查看

[root@node1 heartbeat]# cd /usr/lib/heartbeat/

[root@node1 heartbeat]# ./hb_standby         关闭 

//也可以使用[root@node1 heartbeat]# service heartbeat stop  

2012/12/30_02:32:30 Going standby [all].

在node2上可以发现

[root@node2 ~]# service httpd status

httpd (pid  8202) 正在运行...

浏览器访问虚拟ip就只能访问到node2

启动node1的heartbeat就会发现node1的httpd服务已经启动,node2的httpd服务已经停止。

两台服务器之间互相备份,同时只有一台服务器运行,符合高可用群集特性

案例二:此案例是在上个案例的基础之上做出修改。

由于两个节点node1.a.com和node2.a.com可以提供高可用性,但是这两台服务器不能够提供负载均衡,所以将两个节点node1.a.com和node2.a.com作为director,然后再开启两台linux作为web服务器,此时node1.a.com和node2.a.com将会有一台工作,并提供负载均衡将请求发送至两台web服务器上。案例使用LVS-DR直接路由模型,使用heartbeat来控制两台director的ipvsadm服务

拓扑图:

1.关闭director上的heartbeat

[root@node1 heartbeat]# service heartbeat stop

[root@node1 heartbeat]# yum remove httpd -y

[root@node2 heartbeat]# service heartbeat stop

[root@node2 heartbeat]# yum remove httpd -y

2.在两个节点node1.a.com和node2.a.com上分别安装ipvsadm工具用于实现LVS

在两个节点上分别配置yum工具

[root@node1 ha.d]# vim /etc/yum.repos.d/rhel-debuginfo.repo 

  1 [rhel-server]

  2 name=Red Hat Enterprise Linux Server

  3 baseurl=file:///mnt/cdrom/Server/

  4 enabled=1

  5 gpgcheck=0

  6 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

  7 [rhel-Cluster]

  8 name=Red Hat Enterprise Linux Cluster

  9 baseurl=file:///mnt/cdrom/Cluster/

 10 enabled=1

 11 gpgcheck=0

 12 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

3.使用yum安装ipvsadm服务。

[root@node1 ~]# yum install ipvsadm -y

[root@node1 ~]# service ipvsadm save

[root@node1 ~]# service ipvsadm start

[root@node1 ~]# ipvsadm -A -t 192.168.10.101:80 -s rr 

[root@node1 ~]# ipvsadm -a -t 192.168.10.101:80 -r 192.168.10.203 -g 

[root@node1 ~]# ipvsadm -a -t 192.168.10.101:80 -r 192.168.10.204 -g 

[root@node1 ~]# service ipvsadm save

Saving IPVS table to /etc/sysconfig/ipvsadm:               [确定]

#LVS 的DR 模式 

[root@node1 ~]# service ipvsadm stop

[root@node1 ~]# chkconfig ipvsadm off  #开机关闭

#群集里的资源是要自动分配的不能自己启动,stop是为了后面的测试。

4.把同样的配置copy到node2上一份。(yes, passwd)

[root@node1 ~]# scp /etc/sysconfig/ipvsadm 192.168.10.202:/etc/sysconfig

修改控制脚本

[root@node1 ha.d]# pwd

/etc/ha.d

[root@node1 ha.d]# vim haresources

45 node1.a.com 192.168.10.101/24/eth0/空格 ipvsadm

[root@node1 ha.d]# scp /etc/init.d/ipvsadm  /etc/ha.d/resource.d/

5.node2 同步

[root@node1 ha.d]# scp /etc/ha.d/haresources node2.a.com:/etc/ha.d

[root@node1 ha.d]# scp /etc/init.d/ipvsadm  node2.a.com:/etc/init.d

6.Director1和director2重启服务重新加入群集

director上查看群集资源,而且规则已经启动

可以发现director1上有了群集资源eth0:0,而director2两者都没有出现。

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:56:00:D6  

          inet addr:192.168.10.101  Bcast:192.168.10.255  Mask:255.255.255.0

[root@node1 ha.d]# ipvsadm

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.10.101:http rr

  -> 192.168.10.203:http          Route   1      0          0         

  -> 192.168.10.204:http          Route   1      0          0 

按照拓扑图要求对realserver1和realserver2 的ip进行配置重点如下:(vip的配置)

而且要安装web服务,并启动。

7.将arp_announce的值改为2,将arp_ignore的值改为为1,/etc/sysctl.conf

[root@node1 ~]# echo "net.ipv4.conf.eth0.arp_announce = 2" >> /etc/sysctl.conf

[root@ node1~]# echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf

[root@node1t ~]# echo "net.ipv4.conf.eth0.arp_ignore = 1" >> /etc/sysctl.conf

[root@node1 ~]# echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf

[root@node1~]# sysctl -p      #使服务生效

net.ipv4.conf.eth0.arp_announce = 2

net.ipv4.conf.all.arp_announce = 2

net.ipv4.conf.eth0.arp_ignore = 1

net.ipv4.conf.all.arp_ignore = 1

8.server1和server2上添加临时路由

[root@server1 ~]# route -add -host 192.168.10.10 dev lo:0

[root@server2 ~]# route add -host 192.168.10.101 dev lo:0

9.验证一下:

现在HA 是主备模式 其中node1是主,node2是备份(基于LVS的DR模式),server1和server2是负载均衡的web群集。

通过浏览器访问vip刷新web1和web2交替出现。说明访问的时候是轮询模式,即用户方vip时server1和server2交替工作,实现负载均衡。

10.查看director可以发现director1已经得到群集资源,而且启动了ipvsadm

[root@node1 ha.d]# ifconfig

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:56:00:D6  

          inet addr:192.168.10.101  Bcast:192.168.10.255  Mask:255.255.255.0

11.[root@node1 ha.d]# watch -n 1 'ipvsadm'     #每一秒钟查看一次

假如director1出现故障。Director2上马上就会获得群集资源,而且ipvsadm也启动。

[root@node1 ha.d]# cd /usr/share/heartbeat/

[root@node1 heartbeat]# ./hb_standby 

#或者[root@node1 ha.d]# service heartbeat stop

[root@node2 ~]# ifconfig

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:44:FB:AA  

          inet addr:192.168.10.101  Bcast:192.168.10.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          Interrupt:67 Base address:0x2000 

12.[root@node2 ~]# watch -n 1 'ipvsadm'      #刷新访问vip 就会出现如下。

13.如果director1恢复正常的话,群集资源就会在director1上。

[root@node1 heartbeat]# ./hb_takeover   启动  或者service heartbeat start

这样就能实现director的高可用性,而且能够实web服务器的负载均衡。

你可能感兴趣的:(高可用群集,HA综合案例详解)