高可用群集HA

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

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

clip_image001

实现方法:

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

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

3.corosync/openais +paceker

2个节点:

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

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

clip_image002

采用主主模式:两个节点,在提供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

拓扑图:

clip_image003

用到的软件:

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地址设置:

clip_image004

clip_image005

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

clip_image006

clip_image007

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

clip_image009

clip_image011

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

clip_image012

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

clip_image013

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

clip_image014

clip_image015

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

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

clip_image017

clip_image019

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

node1.a.com:

clip_image021

node2.a.com:

clip_image023

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

node1.a.com:

clip_image025

node2.a.com:

clip_image026

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

node1.a.com:

clip_image028

clip_image030

clip_image031

clip_image033

node2.a.com:

clip_image035

clip_image037

clip_image038

clip_image039

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_image041

node2.a.com:

clip_image043

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

node1.a.com

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

clip_image045

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

node1.a.com

clip_image047

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

clip_image049

clip_image051

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加密,然后将该字符串作为成员之间的验证密码

clip_image053

clip_image054

12.

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

下图说明:

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

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

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

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

httpd 服务资源,

clip_image056

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

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

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

clip_image060

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

clip_image061

clip_image063

16.修改authkeys文件

clip_image064

clip_image065

17.编辑文件haresources

clip_image067

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

clip_image069

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

clip_image071

clip_image073

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

clip_image075

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

clip_image077

clip_image078

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

clip_image079

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

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

clip_image080

clip_image081

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

clip_image083

此时节点1的httpd已停止

clip_image085

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

clip_image086

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服务

拓扑图:

clip_image002

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

clip_image004

clip_image006

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

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

clip_image008

clip_image009

clip_image010

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

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

clip_image011

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

clip_image013

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

realserver1的ip地址:

clip_image014[1]

clip_image015[1]

vip地址;

clip_image016

重启网络服务

clip_image018

realserver2的ip地址:

clip_image019

clip_image020

vip地址:

clip_image021

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

realserver1:

clip_image022

clip_image023

clip_image025[1]

realserver2:

clip_image026[1]

clip_image028[1]

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

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

# vim /etc/ha.d/haresources

clip_image030[1]

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

clip_image032

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

clip_image034

clip_image036

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

clip_image038

clip_image040

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

clip_image042

clip_image044

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

clip_image046

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

clip_image048

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

clip_image050

clip_image052

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

clip_image054

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

realserver1:

clip_image056[1]

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

clip_image058[1]

realserver2:

clip_image060[1]

clip_image062

14.此时访问192.168.145.101

clip_image063

clip_image064[1]

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

clip_image065[1]

网页依旧可以访问

clip_image063[1]

clip_image064[2]

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

案例三:

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

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

clip_image067[1]

clip_image068

clip_image069

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

clip_image071[1]

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

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

clip_image073[1]

clip_image075[1]

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_image077[1]

6.删除ipvsadm的转发数据

clip_image079

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

clip_image081

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

clip_image082

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

clip_image084

clip_image086

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

clip_image088

clip_image090

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

clip_image092

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

clip_image094

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

clip_image095

clip_image096

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

clip_image098

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

clip_image099

clip_image100

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

clip_image102

查看权重

clip_image104

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

clip_image105

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文件

clip_image106

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

clip_image108

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

clip_image110

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

clip_image112

clip_image114

clip_image116

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

clip_image118

clip_image118[1]

clip_image120

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

clip_image121

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

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

clip_image123

 

本文持续撰写中……..

你可能感兴趣的:(HA,群集)