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

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

高可用群集HA_第1张图片

实现方法:

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

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

3.corosync/openais +paceker

2个节点:

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

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

高可用群集HA_第2张图片

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

HA群集的资源:

ip地址 脚本 服务

群集分裂:

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

群集分裂处理方法:

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

fence:在rhcs中叫法

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

拓扑图:

高可用群集HA_第3张图片

用到的软件:

heartbeat-2.1.4-9.el5.i386.rpm

heartbeat-pils-2.1.4-10.el5.i386.rpm

heartbeat-stonith-2.1.4-10.el5.i386.rpm

libnet-1.1.4-3.el5.i386.rpm

perl-MailTools-1.77-1.el5.noarch.rpm

1.按照拓扑图规划,分别为各个网卡配置ip地址

node1.a.com的ip地址设置:

高可用群集HA_第4张图片

高可用群集HA_第5张图片

node2.a.com的ip地址设置:

高可用群集HA_第6张图片

高可用群集HA_第7张图片

2.由于在做高可用性群集时要解析两台服务器的主机名,所以要更改主机名,还要有名称解析服务,在这里就修改hosts文件

高可用群集HA_第8张图片

高可用群集HA_第9张图片

node1.a.com的/etc/sysconfig/network文件:

高可用群集HA_第10张图片

node2.a.com的/etc/sysconfig/network文件:

高可用群集HA_第11张图片

由于刚刚的修改需要重启系统后才会生效,可以临时将两台服务器的主机名修改正确

高可用群集HA_第12张图片

clip_p_w_picpath015

3.分别在两台服务器上配置yum工具

# vim /etc/yum.repos.d/rhel-debuginfo.repo

高可用群集HA_第13张图片

高可用群集HA_第14张图片

4. 在两台服务器上分别创建挂载点,挂载光盘文件

node1.a.com:

clip_p_w_picpath021

node2.a.com:

clip_p_w_picpath023

5.在两台服务器上分别安装httpd服务

node1.a.com:

clip_p_w_picpath025

node2.a.com:

高可用群集HA_第15张图片

6.为两个服务器分别创建网页,并将httpd服务启动,用于测试httpd是否正确,然后再关闭掉两个服务器的httpd服务,设为开机不启动,交由群集控制器来集中管理httpd服务

node1.a.com:

clip_p_w_picpath028

clip_p_w_picpath030

高可用群集HA_第16张图片

clip_p_w_picpath033

node2.a.com:

clip_p_w_picpath035

clip_p_w_picpath037

高可用群集HA_第17张图片

clip_p_w_picpath039

7.在每个服务器上安装heartbeat服务,使两个服务器成为高可用群集

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

node1.a.com:

clip_p_w_picpath041

node2.a.com:

clip_p_w_picpath043

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

node1.a.com

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

高可用群集HA_第18张图片

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

node1.a.com

clip_p_w_picpath047

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

高可用群集HA_第19张图片

高可用群集HA_第20张图片

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

#auth 1 采用的验证方式为1

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

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

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

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

高可用群集HA_第21张图片

clip_p_w_picpath054

12.

编辑文件haresources ,资源管理文件,用于定义哪些是资源,便于群集控制这些资源

下图说明:

node1.a.com:刚开始启动的节点名称

192.168.145.101/24:ip资源,此处为vip地址

eth0:该地址在eth0接口上配置着

192.168.145.255:该ip资源的广播地址,可省略

httpd 服务资源,

clip_p_w_picpath056

13.将httpd脚本复制到resource.d目录下

# cp /etc/rc.d/init.d/httpd /etc/ha.d/resource.d/
clip_p_w_picpath058

14.同理在node2.a.com上将/usr/share/doc/heartbeat-2.1.4下的文件ha.cf haresources authkeys 复制到/etc/ha.d下

高可用群集HA_第22张图片

15.修改文件.etc/ha.cf

高可用群集HA_第23张图片

高可用群集HA_第24张图片

16.修改authkeys文件

高可用群集HA_第25张图片

clip_p_w_picpath065

17.编辑文件haresources

高可用群集HA_第26张图片

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

clip_p_w_picpath069

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

高可用群集HA_第27张图片

高可用群集HA_第28张图片

20.此时查看node1.a.com 的网卡,出现群集ip地址;在node2.a.com上却没有

高可用群集HA_第29张图片

21. node1.a.com上的httpd服务自动启动,node2.a.com 上没有启动

高可用群集HA_第30张图片

高可用群集HA_第31张图片

22.通过外网访问虚拟ip,访问到了node1.a.com服务器的网页

高可用群集HA_第32张图片

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

# watch -n 1 'service httpd status'
24.模拟节点1失效的情况。使用命令/usr/lib/heartbeat/hb_standby

高可用群集HA_第33张图片

高可用群集HA_第34张图片

25.查看节点2的监控,httpd运行成功

高可用群集HA_第35张图片

此时节点1的httpd已停止

高可用群集HA_第36张图片

26.再次访问vip,访问到了node2.a.com的站点

高可用群集HA_第37张图片

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

 

 

 

案例二:此案例是在上个案例的基础之上做出修改。由于两个节点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服务

拓扑图:

高可用群集HA_第38张图片

1.停用node1.a.com和node2.a.com的heartbeat服务,并卸载httpd服务

高可用群集HA_第39张图片

clip_p_w_picpath006

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

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

高可用群集HA_第40张图片

高可用群集HA_第41张图片

高可用群集HA_第42张图片

3. 先修改arp_announce 和arp_ignore的值,然后在分别配置两台realserver的loopback 的vip,否则将会出现vip地址冲突

使用命令:sysctl -a |grep arp 查看arp_announce和arp_ignore的值

高可用群集HA_第43张图片

需要将arp_announce的值改为2,将arp_ignore的值为1,写入文件/etc/sysctl.conf

高可用群集HA_第44张图片

4.按照拓扑图要求配置realserver1和realserver2的ip地址

realserver1的ip地址:

高可用群集HA_第45张图片

高可用群集HA_第46张图片

vip地址;

高可用群集HA_第47张图片

重启网络服务

高可用群集HA_第48张图片

realserver2的ip地址:

高可用群集HA_第49张图片

高可用群集HA_第50张图片

vip地址:

高可用群集HA_第51张图片

5.在两台realserver上分别配置路由,使到达realserver的请求,但是目的地址为192.168.145.101的数据包交给网卡lo:0来处理即由其向外回复请求。详细请参照我的上一篇博客:LVS负载均衡群集之NAT模型&&DR模型

realserver1:

clip_p_w_picpath022

高可用群集HA_第52张图片

高可用群集HA_第53张图片

realserver2:

高可用群集HA_第54张图片

高可用群集HA_第55张图片

6.使heartbeat来 控制ipvsadm服务,需要将ipvsadm加入heartbeat的资源管理器

分别在node1.a.com和node2.a.com 上执行以下动作:

# vim /etc/ha.d/haresources

高可用群集HA_第56张图片

7.将ipvsadm的脚本复制到/etc/ha.d/resource.d/

clip_p_w_picpath032

8.分别编辑ipvsadm参数,定义服务,添加服务器

高可用群集HA_第57张图片

高可用群集HA_第58张图片

9.保存ipvsadm参数数据,然后关闭服务,交由heartbeat控制

高可用群集HA_第59张图片

高可用群集HA_第60张图片

10.分别启动node1.a.com和node2.a.com的heartbeat服务

高可用群集HA_第61张图片

高可用群集HA_第62张图片

11.此时查看node1.a.com的ipvsadm数据,发现有数据,说明node1.a.com的ipvsadm服务已经启动

高可用群集HA_第63张图片

但是node2.a.com的ipvsadm数据还是为空

高可用群集HA_第64张图片

12.模拟node1.a.com节点失效的情况,先监控node2.a.com的ipvsadm -ln 显示情况,若有信息显示,说明node1.a.com的ipvsadm功能启动

高可用群集HA_第65张图片

高可用群集HA_第66张图片

此时node2.a.com上有数据,说明node2.a.com的ipvsadm启动成功

高可用群集HA_第67张图片

13.下面在realserver1和realserver2上配置httpd服务

realserver1:

clip_p_w_picpath056[1]

产生网页文件,并启动服务器:

高可用群集HA_第68张图片

realserver2:

高可用群集HA_第69张图片

高可用群集HA_第70张图片

14.此时访问192.168.145.101

高可用群集HA_第71张图片

15.模拟node1.a.com失效,然后访问文本服务

高可用群集HA_第72张图片

网页依旧可以访问

高可用群集HA_第73张图片

这样就将node1.a.com和node2.a.com作为高可用性群集,而下游的两台web服务器作为了负载均衡群集

案例三:

上个案例中,两台director中时刻保持有一台处于活动状态,其中维护一个ipvsadm转发表,表中的条目一直不会发生变化,若下游的某台realserver忽然失效,但是director上的ipvsadm转发表将依旧把请求发送至失效的服务器来处理数据,将会出现网页访问失败的情况。所以,应该有一种机制,用来探测下游的服务器是否处于活动状态,若某台服务器失效,则自动修改ipvsadm转发表,将该发送给失效服务器的请求发送至活动的服务器来处理。

1.将realserver1 的httpd访问停掉,访问192.168.145.101将会出现网页访问不到的情况(只能访问web2)

clip_p_w_picpath067[1]

高可用群集HA_第74张图片

高可用群集HA_第75张图片

2.发送至realserver1的转发条目依旧存在

高可用群集HA_第76张图片

3.要想实现一种动态的ipvsadm转发规则表,需要安装heartbeat-ldirectord ,它能够将heartbeat与LVS紧密结合,而且能够探测后方的服务器状态,当服务器失效时,自动删除该条转发条目

在两台director:node1.a.com和node2.a.com上安装heartbeat-ldirectord

高可用群集HA_第77张图片

高可用群集HA_第78张图片

4.拷贝heartbeat-ldirectord的配置文件/usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf 到/etc/ha.d下,编辑该文件

checkinterval=1 每一秒检查一次后方服务器

checktimeout=3 三秒检测不到服务器就删除到该服务器的转发条目

autoreload=yes 修改该文件后,不用重启服务就进行加载该文件内容

fallback=127.0.0.1:80 如果后方的服务器全都无法探测到的话,就将本机作为服务器提供服务,不过本机的服务要处于停止状态,有heartbeat进行控制

logfile="local0" 将ldirectord的日志和/var/log/messages混合

quiescent=yes 静默模式 当无法探测到后方的服务器时就调整到该服务器的条目的权重为0,而不删除该条目,则该服务器将不能访问

virtual=192.168.145.101:80 director虚拟出的ip地址

real=192.168.145.200:80 gate 转发到该服务器的80 端口 ,使用直接路由模型

real=192.168.145.201:80 gate 转发到该服务器的80 端口 ,使用直接路由模型

#fallback=127.0.0.1:80 gate 和上面的fallback用处一样

service=http 提供的服务

request=".test.html" 探测页面名字

receive="Test Page" 探测页面的文件内容

scheduler=rr 使用轮循调度算法,

protocol=tcp 协议tcp,相当于ipvsadm 的 -t 选项

5.修改资源文件/etc/ha.d/haresources,定义HA群集的资源

定义node1.a.com为主节点,虚拟ip为145.101 ,将该虚拟地址添加到eth0上,eth0:0 ;资源2为 ldirectord,他的、、它的配置文件名称为ldirectord.cf

clip_p_w_picpath077[1]

6.删除ipvsadm的转发数据

高可用群集HA_第79张图片

7.在node2.a.com ,将/usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf 复制到/etc/ha.d/下

clip_p_w_picpath081

8.编辑/etc/ha.d/ldirectord.cf文件

高可用群集HA_第80张图片

9.修改node2.a.com的资源文件,清空ipvsadm规则

clip_p_w_picpath084

clip_p_w_picpath086

10.分别重启两台节点的heartbeat 服务

高可用群集HA_第81张图片

高可用群集HA_第82张图片

11.在node1.a.com上查看哪个网卡使用vip

高可用群集HA_第83张图片

12.查看node1.a.com 的ipvsadm的转发表,发现权重都变为0,默认为1;这会由于调整的静默模式为开启,而测试页面不存在,所以将两个转发条目权重调小

高可用群集HA_第84张图片

13.在realserver1和realserver2 上创建探测页面:.test.html文件

高可用群集HA_第85张图片

高可用群集HA_第86张图片

14.再次查看node1.com 的ipvsadm -ln 显示结果,权重变为1

高可用群集HA_第87张图片

15.两个web页面都能访问成功

高可用群集HA_第88张图片

高可用群集HA_第89张图片

16.若此时realserver1 的httpd访问关闭掉,则会自动将转发到该服务器的条目权重变为0,就不会访问该服务器,就不会出现页面访问不到的情况出现

clip_p_w_picpath102

查看权重

高可用群集HA_第90张图片

再访问网页将只会出现web2的页面

高可用群集HA_第91张图片

17.若后方的两台服务器都失效,则用户将无法访问到页面。这是可以使用回滚fallback,将请求发送到本机(director1)上进行处理。所以在director1和director2上安装httpd服务,并将该服务处于停止状态,然后将httpd加入haresource文件,成为一种资源,然后将/etc/init.d/httpd 复制到 /etc/ha.d/resource.d 下

两台director上分别安装httpd服务,并产生页面,将httpd服务处于关闭状态

此处省略。。。。。

修改/etc/ha.d/ldirectord.cf文件

高可用群集HA_第92张图片

修改/etc/ha.d/resources,添加httpd

clip_p_w_picpath108

将httpd的控制脚本复制到/etc/ha.d/resource.d

clip_p_w_picpath110

重新启动heartbeat服务,然后停用后方的两台web服务器

高可用群集HA_第93张图片

clip_p_w_picpath114

clip_p_w_picpath116

此时查看director的转发表和httpd的状态,出现本机的条目

高可用群集HA_第94张图片

高可用群集HA_第95张图片

clip_p_w_picpath120

此时访问页面能访问到node1.a.com的页面

高可用群集HA_第96张图片

若此时后方两台服务器恢复服务,此时将会停掉director1(node1.a.com)的httpd服务

自动删除到本地的转发条目

高可用群集HA_第97张图片

 

本文持续撰写中……..