一 基础知识:
1 HA(High Available),高可用性群集;
当集群中的一个系统发生故障时,集群软件迅速做出反映,将该系统的任务分配到集群中其它正在工作的系统上执行。
应用于企业网中高可用性体系,提供时时的在线服务99.999%;
2 LVS-DR模型:直接路由模型;
特点:能够处理比nat模型更过的节点;
数据包流向:CIP-DGW-VIP-RIP-DGW-CIP
Rip和dip需在同一个网络中;
Realserver的网关不再是rip;
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 主备模式;
6.2 主主模式:容易形成群集分裂;
7 Heartbeat
Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能。下面描述了 heartbeat 模块的可靠消息通信机制,并对其实现原理做了一些介绍。
8 心跳线:备份的Director探测主Director的心跳;
7.1 使用双绞线;
7.2 光钎跳线;
7.3 serial(串行)
二 案例一
1 拓扑图
2 案例说明
实现基于HA高可用性的群集系统;
实现LVA-DR直接路由模型模型;
3 配置director1群集服务器:
3.1 配置director1的网卡地址:
3.1.1 外出接口网卡:
3.1.2 心跳网卡:
3.1.3重启网络服务:
3.2 配置director1的主机名:
# vim /etc/sysconfig/network
# hostname dir1.abc.com //配置后需要注销一次;
3.3 配置director1的本地DNS解析:
# vim /etc/hosts
3.4 将heartbeat的安装包使用ftp导入director1:
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
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
//定义心跳网卡;
//声明群集的节点;
3.9 配置验证钥匙(为了实现双方身份验证):
# vim authkeys
3.10 改变authkeys的权限:
# chmod 600 authkeys
3.11 编辑heartbeat资源管理器:(用于管理Director上的服务,比如httpd的启动)
# vim haresources
//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
3.18 查看ipvsadm的状态:
//此时director1处于主控状态;director1处于备份状态;
4 配置director2群集服务器:
4.1 配置director2的网卡地址:
4.1.1 外出接口网卡:
4.1.2 心跳网卡:
4.1.3 重启网络服务:
4.2 配置director1的主机名:
# vim /etc/sysconfig/network
# hostname dir2.abc.com //配置后需要注销一次;
3.3 配置director1的本地DNS解析:
# vim /etc/hosts
4.4 将heartbeat的安装包使用ftp导入director1:
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
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
//定义心跳网卡;
//声明群集的节点;
4.9 配置验证钥匙(为了实现双方身份验证):
# vim authkeys
4.10 改变authkeys的权限:
# chmod 600 authkeys
4.11 编辑heartbeat资源管理器:(用于管理Director上的服务,比如httpd的启动)
# vim haresources
//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
4.17 查看ipvsadm的状态:
//ipvsadm没有被启用;
//没有VIP;
5 配置realserver1
5.1 在系统控制文件sysctl.conf中添加arp内核参数:
5.2 在eth0网卡上配置RIP:
5.3 在loopback接口上配置VIP:
5.4 重启网络服务:
5.5 添加路由:
//为了实现使用vip来对访问进行应答,需要使从realserver1到任何地址的数据包从lo:0的接口使用vip发送;
5.6 挂在光盘:
5.7 安装realserver1的httpd服务:
5.8 创建realserver1的测试页:
5.9 启动httpd服务:
6 配置realserver2
6.1 在系统控制文件sysctl.conf中添加arp内核参数:
6.2 在eth0网卡上配置RIP:
6.3 在loopback接口上配置VIP:
6.4 重启网络服务:
6.5 添加路由:
//为了实现使用vip来对访问进行应答,需要使从realserver1到任何地址的数据包从lo:0的接口使用vip发送;
6.6 挂在光盘:
6.7 安装realserver1的httpd服务:
6.8 创建realserver1的测试页:
6.9 启动httpd服务:
7 测试:
7.1 当群集服务器都正常运行时:
7.1.1 查看director1初始的ipvsadm状态:
//此时director1处于主控状态;director1处于备份状态;
7.1.2 查看director2初始的ipvsadm的状态:
//ipvsadm没有被启用;
//没有启用VIP;
7.1.3 使用http访问192.168.10.10:
7.1.4 刷新后:
//群集可以正常使用
7.1.5 查看ipvs规则的匹配:
7.2 当群集服务器的状态发生变化时:
7.2.1 使director1失去主控模式:
# cd /usr/lib/heartbeat/
# ./hb_standby
7.2.2 查看director1的ipvsadm状态:
//此时director1处于备份状态;director1处于主控状态;
//没有启用VIP;
7.2.3 查看director2的ipvsadm的状态:
//ipvsadm没有被启用;
//启用VIP;
7.2.4 使用http访问192.168.10.10:
7.2.5 刷新后:
//群集可以正常使用
7.2.6查看ipvs规则的匹配:
案例二:(此案例基于案例一)
1 拓扑图
2 案例说明
2.1 实现基于HA高可用性的群集系统;
2.2 实现LVA-DR直接路由模型模型;
2.3 通过heartbeat的ldirectord服务实现动态ipvs规则表;
3 配置步骤
3.1 在director1上配置
3.1.1 安装ldirectord:
# 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
//当不使用静默模式时:当服务不可用时,对应的ipvs条目会被删除;
3.1.6改变heartbeat的资源管理文件:
# vim /etc/ha.d/haresources
//资源一是:地址192.168.10.10
//资源二是:服务ldirectord,后跟上服务的对应配置脚本;
3.1.7 启动heartbeat服务:
# service heartbeat start
3.2 在director2上配置
3.2.1 安装ldirectord:
# 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
//当不使用静默模式时:当服务不可用时,对应的ipvs条目会被删除;
3.2.7 改变heartbeat的资源管理文件:
# vim /etc/ha.d/haresources
//资源一是:地址192.168.10.10
//资源二是:服务ldirectord,后跟上服务的对应配置脚本;
3.2.8 启动heartbeat服务:
# service heartbeat start
3.3 在realserver1中创建测试页面:
# cd /var/www/html/
# echo "test" >.test.html
3.4 在realserver2中创建测试页面:
# cd /var/www/html/
# echo "test" >.test.html
4 测试:
4.1 当realserver的httpd服务正常运行时:
4.1.1 查看主群集服务器的网络地址:
4.1.2 查看备份群集服务器的网络地址:
4.1.3 查看主群集服务器的ipvs规则条目:
4.2 当关闭realserver1的httpd服务后:
4.2.1 停止realserver1的httpd服务:
4.2.2 查看主群集服务器的ipvs规则条目:
//realserver1的ipvs规则消失了!
4.3 当关闭realserver2的httpd服务后:
4.3.1 停止realserver1的httpd服务:
4.3.2 查看主群集服务器的ipvs规则条目:
//realserver2的ipvs规则消失了!
实验完毕!!