一 基础知识:

1 HA(High Available),高可用性群集;

    当集群中的一个系统发生故障时,集群软件迅速做出反映,将该系统的任务分配到集群中其它正在工作的系统上执行。

    应用于企业网中高可用性体系,提供时时的在线服务99.999%;

2 LVS-DR模型:直接路由模型;

    特点:能够处理比nat模型更过的节点;

    数据包流向:CIP-DGW-VIP-RIP-DGW-CIP

    Rip和dip需在同一个网络中;

    Realserver的网关不再是rip;

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第1张图片

3 为了实现LVS-DR模型需要解决相关问题:

3.1 每个real server上都需要配置vip;vip配置在lookback接口上;

3.2 解决多个相同vip导致的arp应答混乱;

3.3 通过arp_arpannounce和arp_ignore来控制realserver的arp应答;

3.4 解决realserver的应答报文的源地址,源地址应该为VIP;

4 群集调度算法

4.1 固定调度算法:四种

4.1.1 轮训调度(RR);

4.1.2 加权轮训(WRR);根据能力的不同,分配不同的任务量;

4.1.3 目标哈希(DH);一个用户的请求发送给相同的server;

4.1.4 来源哈希(SH);确保返回的包到同一台路由器;

4.2 动态调度算法:六种,(需要考虑活动数量和非活动数量)

4.2.1 最少连接数(LC);最少任务次数的优先分配;

4.2.2 权重最少连接数(WLC);能力比较强,且最少任务次数的优先分配;

4.2.3 最少的期望延迟(SED);

4.2.4 永不排队(NQ);发现没有活动的Rserver,优先考虑

4.2.5 LBLC

4.2.6 LBLCR

5 通过一下软件实现HA:

5.1 heartbeat  v1  v2  v3

5.2 rhcs  红帽集群套件

5.3 corosync/openais  +  paceker

5.4 keepalives

6 HA群集的两节点的模式:

6.1 主备模式;

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第2张图片

6.2 主主模式:容易形成群集分裂;

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第3张图片

7 Heartbeat

     Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能。下面描述了 heartbeat 模块的可靠消息通信机制,并对其实现原理做了一些介绍。

8 心跳线:备份的Director探测主Director的心跳;

7.1 使用双绞线;

7.2 光钎跳线;

7.3 serial(串行)

二 案例一

1 拓扑图

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第4张图片

2 案例说明

    实现基于HA高可用性的群集系统;

    实现LVA-DR直接路由模型模型;

3 配置director1群集服务器:

3.1 配置director1的网卡地址:

3.1.1 外出接口网卡:

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第5张图片

3.1.2 心跳网卡:

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第6张图片

3.1.3重启网络服务:

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第7张图片

3.2 配置director1的主机名:

# vim /etc/sysconfig/network

wps_clip_p_w_picpath-6527

# hostname dir1.abc.com //配置后需要注销一次;

wps_clip_p_w_picpath-23195

3.3 配置director1的本地DNS解析:

# vim /etc/hosts

wps_clip_p_w_picpath-17755

3.4 将heartbeat的安装包使用ftp导入director1:

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第8张图片

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第9张图片

3.5 挂载光盘:

# mkdir /mnt/cdrom

# mount /dev/cdrom /mnt/cdrom

3.6 使用yum安装heartbeat相应的软件包:

# yum localinstall -y 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

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第10张图片

3.7 拷贝heartheat的配置文件到相应的位置:

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

# cp ha.cf /etc/ha.d/

# cp haresources /etc/ha.d/

# cp authkeys /etc/ha.d/

3.8 编辑心跳探测配置文件ha.cf:

# cd /etc/ha.d/

# vim ha.cf

wps_clip_p_w_picpath-6320

//定义心跳网卡;

wps_clip_p_w_picpath-10782

//声明群集的节点;

3.9 配置验证钥匙(为了实现双方身份验证):

# vim authkeys

wps_clip_p_w_picpath-14320

3.10 改变authkeys的权限:

# chmod 600 authkeys

3.11 编辑heartbeat资源管理器:(用于管理Director上的服务,比如httpd的启动)

# vim haresources

wps_clip_p_w_picpath-8988

//192.168.10.10是VIP,ipvsadm是heartbeat控制的服务类资源;

3.12 安装ipvsadm服务:

# yum install ipvsadm

3.13 编写ipvs转发表格:

# ipvsadm -A -t 192.168.10.10:80 -s rr

# ipvsadm -a -t 192.168.10.10:80 -r 192.168.10.101 -g

# ipvsadm -a -t 192.168.10.10:80 -r 192.168.10.102 -g

3.14 保存ipvs规则到/etc/sysconfig/ipvsadm:

# service ipvsadm save

3.16 将ipvsadm的控制脚本复制到heartbeat资源管理目录:

# cp /etc/init.d/ipvsadm /etc/ha.d/resource.d/

//为了使heartbeat能对ipvsadm进行控制;

3.17 启动heartbeat服务:

# service heartbeat start

wps_clip_p_w_picpath-21216

3.18 查看ipvsadm的状态:

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第11张图片

    //此时director1处于主控状态;director1处于备份状态;

4 配置director2群集服务器:

4.1 配置director2的网卡地址:

4.1.1 外出接口网卡:

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第12张图片

4.1.2 心跳网卡:

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第13张图片

4.1.3 重启网络服务:

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第14张图片

4.2 配置director1的主机名:

# vim /etc/sysconfig/network

wps_clip_p_w_picpath-11854

# hostname dir2.abc.com //配置后需要注销一次;

wps_clip_p_w_picpath-32025

3.3 配置director1的本地DNS解析:

# vim /etc/hosts

wps_clip_p_w_picpath-28711

4.4 将heartbeat的安装包使用ftp导入director1:

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第15张图片

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第16张图片

4.5 挂载光盘:

# mkdir /mnt/cdrom

# mount /dev/cdrom /mnt/cdrom

4.6 使用yum安装heartbeat相应的软件包:

# yum localinstall -y 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

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第17张图片

4.7 拷贝heartheat的配置文件到相应的位置:

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

# cp ha.cf /etc/ha.d/

# cp haresources /etc/ha.d/

# cp authkeys /etc/ha.d/

4.8 编辑心跳探测配置文件ha.cf:

# cd /etc/ha.d/

# vim ha.cf

wps_clip_p_w_picpath-29634

    //定义心跳网卡;

wps_clip_p_w_picpath-14112

    //声明群集的节点;

4.9 配置验证钥匙(为了实现双方身份验证):

# vim authkeys

wps_clip_p_w_picpath-9027

4.10 改变authkeys的权限:

# chmod 600 authkeys

4.11 编辑heartbeat资源管理器:(用于管理Director上的服务,比如httpd的启动)

# vim haresources

wps_clip_p_w_picpath-25364

    //192.168.10.10是VIP,ipvsadm是heartbeat控制的服务类资源;

4.12 安装ipvsadm服务:

# yum install ipvsadm

4.13 编写ipvs转发表格:

# ipvsadm -A -t 192.168.10.10:80 -s rr

# ipvsadm -a -t 192.168.10.10:80 -r 192.168.10.101 -g

# ipvsadm -a -t 192.168.10.10:80 -r 192.168.10.102 -g

4.14 保存ipvs规则到/etc/sysconfig/ipvsadm:

# service ipvsadm save

4.15 将ipvsadm的控制脚本复制到heartbeat资源管理目录:

# cp /etc/init.d/ipvsadm /etc/ha.d/resource.d/

    //为了使heartbeat能对ipvsadm进行控制;

4.16 启动heartbeat服务:

# service heartbeat start

wps_clip_p_w_picpath-25126

4.17 查看ipvsadm的状态:

wps_clip_p_w_picpath-2000

    //ipvsadm没有被启用;

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第18张图片

    //没有VIP;

5 配置realserver1

5.1 在系统控制文件sysctl.conf中添加arp内核参数:

wps_clip_p_w_picpath-3968

wps_clip_p_w_picpath-19046

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第19张图片

5.2 在eth0网卡上配置RIP:

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第20张图片

5.3 在loopback接口上配置VIP:

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第21张图片

5.4 重启网络服务:

wps_clip_p_w_picpath-16792

5.5 添加路由:

wps_clip_p_w_picpath-32398

    //为了实现使用vip来对访问进行应答,需要使从realserver1到任何地址的数据包从lo:0的接口使用vip发送;

5.6 挂在光盘:

wps_clip_p_w_picpath-17898

5.7 安装realserver1的httpd服务:

wps_clip_p_w_picpath-27917

5.8 创建realserver1的测试页:

wps_clip_p_w_picpath-22572

5.9 启动httpd服务:

wps_clip_p_w_picpath-11435

6 配置realserver2

6.1 在系统控制文件sysctl.conf中添加arp内核参数:

wps_clip_p_w_picpath-1869

wps_clip_p_w_picpath-25078

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第22张图片

6.2 在eth0网卡上配置RIP:

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第23张图片

6.3 在loopback接口上配置VIP:

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第24张图片

6.4 重启网络服务:

wps_clip_p_w_picpath-31921

6.5 添加路由:

wps_clip_p_w_picpath-27043

    //为了实现使用vip来对访问进行应答,需要使从realserver1到任何地址的数据包从lo:0的接口使用vip发送;

6.6 挂在光盘:

wps_clip_p_w_picpath-10141

6.7 安装realserver1的httpd服务:

wps_clip_p_w_picpath-14058

6.8 创建realserver1的测试页:

wps_clip_p_w_picpath-26184

6.9 启动httpd服务:

wps_clip_p_w_picpath-21907

7 测试:

7.1 当群集服务器都正常运行时:

7.1.1 查看director1初始的ipvsadm状态:

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第25张图片

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第26张图片

    //此时director1处于主控状态;director1处于备份状态;

7.1.2 查看director2初始的ipvsadm的状态:

wps_clip_p_w_picpath-13411

    //ipvsadm没有被启用;

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第27张图片

    //没有启用VIP;

7.1.3 使用http访问192.168.10.10:

7.1.4 刷新后:

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第28张图片

    //群集可以正常使用

7.1.5 查看ipvs规则的匹配:

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第29张图片

7.2 当群集服务器的状态发生变化时:

7.2.1 使director1失去主控模式:

# cd /usr/lib/heartbeat/

# ./hb_standby

wps_clip_p_w_picpath-8421

7.2.2 查看director1的ipvsadm状态:

wps_clip_p_w_picpath-6970

    //此时director1处于备份状态;director1处于主控状态;

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第30张图片

    //没有启用VIP;

7.2.3 查看director2的ipvsadm的状态:

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第31张图片

    //ipvsadm没有被启用;

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第32张图片

    //启用VIP;

7.2.4 使用http访问192.168.10.10:

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第33张图片

7.2.5 刷新后:

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第34张图片

    //群集可以正常使用

7.2.6查看ipvs规则的匹配:

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第35张图片

案例二:(此案例基于案例一)

1 拓扑图

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第36张图片

2 案例说明

2.1 实现基于HA高可用性的群集系统;

2.2 实现LVA-DR直接路由模型模型;

2.3 通过heartbeat的ldirectord服务实现动态ipvs规则表;

3 配置步骤

3.1 在director1上配置

3.1.1 安装ldirectord:

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第37张图片

# rpm -ivh heartbeat-ldirectord-2.1.4-9.el5.i386.rpm

3.1.2 删除原来ipvsadm规则条目:

# mv /etc/sysconfig/ipvsadm /etc/sysconfig/ipvsadm.old

3.1.3 关闭heartbeat服务:

# service heartbeat stop

3.1.4 将ldirectord的控制脚本复制到heartbeat资源控制目录中:

# cp /etc/init.d/ldirectord /etc/ha.d/resource.d/

3.1.5 编辑ldirectord控制脚本:

# cd /etc/ha.d/resource.d/

# vim /etc/ha.d/resource.d/ldirectord.cf

wps_clip_p_w_picpath-27240

    //当不使用静默模式时:当服务不可用时,对应的ipvs条目会被删除;

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第38张图片

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第39张图片

3.1.6改变heartbeat的资源管理文件:

# vim /etc/ha.d/haresources

wps_clip_p_w_picpath-22301

    //资源一是:地址192.168.10.10

    //资源二是:服务ldirectord,后跟上服务的对应配置脚本;

3.1.7 启动heartbeat服务:

# service heartbeat start

3.2 在director2上配置

3.2.1 安装ldirectord:

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第40张图片

# rpm -ivh heartbeat-ldirectord-2.1.4-9.el5.i386.rpm

3.2.2 删除原来ipvsadm规则条目:

# mv /etc/sysconfig/ipvsadm /etc/sysconfig/ipvsadm.old

3.2.3 关闭heartbeat服务:

# service heartbeat stop

3.2.4 将ldirectord服务的配置脚本复制到heartbeat管理目录中:

# cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf /etc/ha.d/resource.d/

3.2.5 将ldirectord的控制脚本复制到heartbeat资源控制目录中:

# cp /etc/init.d/ldirectord /etc/ha.d/resource.d/

3.2.6 编辑ldirectord控制脚本:

# cd /etc/ha.d/resource.d/

# vim ldirectord.cf

wps_clip_p_w_picpath-28768

    //当不使用静默模式时:当服务不可用时,对应的ipvs条目会被删除;

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第41张图片

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第42张图片

3.2.7 改变heartbeat的资源管理文件:

# vim /etc/ha.d/haresources

wps_clip_p_w_picpath-6528

    //资源一是:地址192.168.10.10

    //资源二是:服务ldirectord,后跟上服务的对应配置脚本;

3.2.8 启动heartbeat服务:

# service heartbeat start

3.3 在realserver1中创建测试页面:

# cd /var/www/html/

# echo "test" >.test.html

wps_clip_p_w_picpath-17404

3.4 在realserver2中创建测试页面:

# cd /var/www/html/

# echo "test" >.test.html

wps_clip_p_w_picpath-17105

4 测试:

4.1 当realserver的httpd服务正常运行时:

4.1.1 查看主群集服务器的网络地址:

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第43张图片

4.1.2 查看备份群集服务器的网络地址:

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第44张图片

4.1.3 查看主群集服务器的ipvs规则条目:

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第45张图片

4.2 当关闭realserver1的httpd服务后:

4.2.1 停止realserver1的httpd服务:

wps_clip_p_w_picpath-16889

4.2.2 查看主群集服务器的ipvs规则条目:

HA 高可用性群集--(heartbeat,LVA-DR,ldirectord)_第46张图片

    //realserver1的ipvs规则消失了!

4.3 当关闭realserver2的httpd服务后:

4.3.1 停止realserver1的httpd服务:

wps_clip_p_w_picpath-8282

4.3.2 查看主群集服务器的ipvs规则条目:

wps_clip_p_w_picpath-21430

    //realserver2的ipvs规则消失了!

实验完毕!!