您的位置:首页 > 运维架构 > 网站架构

基于lvs-DR模型实现Director高可用

2012-11-29 22:10 537 查看
对Director的高可用分为两部分完成:

一:配置好LVS-DR模型的负载均衡
二:配置一台Director对已有Director做高可用

做如下规划:
有两台real server;分别为rs1;rs2;主用调度器为dr1;做高可用的调度器为dr2

主机 IP类型 IP地址   网络连接
rs1 RIP172.16.14.10  桥接
lo:0 172.16.14.2
rs2 RIP172.16.14.11 桥接
lo:0 172.16.14.2
dr1 DIP 172.16.14.100  桥接
VIP eth0:0 172.16.14.2
dr2 VIP 172.16.14.99   桥接
DIP eth0:0 172.16.14.2
CIP 192.168.0.243


确保所有主机关闭selinux;
setenforce 0

一:配置DR模型的lvs负载均衡

1、配置rs1:

ifconfig eth0 172.16.14.10/16

添加lo:0使客户端访问VIP,让VIP来响应客户端:

ifconfig lo:0 172.16.14.2 broadcast 172.16.14.2
netmask 255.255.255.255
route add -host 172.16.14.2 dev lo:0

修改两个内核参数,用于隐藏rs1的RIP:

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce


安装httpd:
yum -y insatll httpd

建立测试页面:
vim /var/www/html/index.html
添加:<h1>real server1</h1>


启动httpd服务,测试页面
service httpd start

2、配置rs2

ifconfig eth0 172.16.14.11/16
添加lo:0使客户端访问VIP,让VIP来响应客户端:
ifconfig lo:0 172.16.14.2 broadcast 172.16.14.2 netmask 255.255.255.255 route add -host 172.16.14.2 dev lo:0隐藏rs2的RIP:
echo 1 >
/proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 >
/proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 >
/proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 >
/proc/sys/net/ipv4/conf/all/arp_announce

安装httpd
yum -y insatll httpd
为了测试结果的明显,将rs2的测试页面为:
vim /var/www/html/index.html
添加:<h1>real server2</h1>
启动服务,测试页面

3、dr1作为主用调度器

ifconfig eth0 172.16.14.100/16
ifconfig lo:0 172.16.14.2 broadcast 172.16.14.2 netmask 255.255.255.255 route add -host 172.16.14.2 dev lo:0

开启内核转发功能:

echo 1 > /proc/sys/net/ipv4/ip_forward

4、安装ipvsadm:

yum -y insatll ipvsadm

添加集群及服务:

ipvsadm -A -t 172.16.14.2:80 -s rr
ipvsadm -a -t 172.16.14.2:80 -r 172.16.14.10 -g
ipvsadm -a -t 172.16.14.2:80 -r 172.16.14.11 -g
ipvsadm -Ln

在本地浏览器中测试负载均衡结果

二:配置一台Director对已有Director做高可用
dr2对dr1高可用;除ip外其资源配置与dr1一致:

ifconfig eth0 172.16.14.99/16
ifconfig lo:0 172.16.14.2 broadcast 172.16.14.2 netmask 255.255.255.255 route add -host 172.16.14.2 dev lo:0开启内核转发功能:
echo 1 > /proc/sys/net/ipv4/ip_forward安装ipvsadm:
yum -y insatll ipvsadmipvsadm -C
添加规则:
ipvsadm -A -t 172.16.14.2:80 -s rr ipvsadm -a -t 172.16.14.2:80 -r 172.16.14.10 -g ipvsadm -a -t 172.16.14.2:80 -r 172.16.14.11 -g ipvsadm -Ln


不要让ipvsadm开机启动:
chkconfig ipvsadm off

进行高可用前的主要步骤:

1、DNS域名解析
用uname -n的结果来识别对方的名字

使dr1,dr2的uname -n分别为:
dr1.magedu.com
dr2.magedu.com

hostname dr1.magedu.com
vim /etc/sysconfig/network
HOSTNAME=dr1.magedu.com

hostname dr2.magedu.com
vim /etc/sysconfig/network
HOSTNAME=dr2.magedu.com

vim /etc/hosts添加:
172.16.14.10 dr1.magedu.com dr1
172.16.14.11 dr2.magedu.com dr2


2、设定两个节点可以基于密钥进行ssh通信,

dr1:
# ssh-keygen -t rsa
# ssh-copy-id -i ~/.ssh/id_rsa.pub root@dr2

dr2
# ssh-keygen -t rsa
# ssh-copy-id -i ~/.ssh/id_rsa.pub root@dr1


3、两个节点时间同步

# date 112322022012;ssh dr2 'date 112322022012'

4、在两个主机上安装以下rpm包:

yum -y --nogpgcheck 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

查看配置文件:

cd /usr/share/doc/heartbeat-2.1.4/
cp ha.cf haresources authkeys /etc/ha.d/
cd /etc/ha.d/
##ha.cf  主配置文件
##haresources 资源配置文件
##authkeys  认证文件

修改authkeys:
把authkeys权限改为600
chmod 600 authkeys
vim authkeys
auth 3      ##启用加密方式3
3 md5 Hello!

生成一串密码,把md5后的hello!替换掉:
dd if=/dev/urandom count=1 bs=512 |md5sum
5bd1ebacb939d34261ff2b2e6730a8d9  -
##用该行替换Hello!

修改ha.cf

vim ha.cf      ##启用如下项:
keepalive 2    ##两个心跳信息的间隔时间
deadtime 30    ##多长认为主机dead
warntime 6     ##在发出最后一个心跳信息的警告时间
initdead 120   ##开机时等待时间;用于增强容错能力
udpport 694     ##默认使用的端口(单播)
mcast eth0 224.2.2.14 694 1 0  ##组播地址
auto_failback on    ##当主节点重新上线后,是否回到主节点
crm on             ##启用crm
node dr1.magedu.com  ##添加两个节点信息
node dr2.magedu.com
ping 172.16.0.1    ##两个节点集群时的仲裁设备
compression bz2    ##压缩类型
compression_threshod 2    ##大于多少KB才压缩

5、安装配置ldirectord

yum -y  --nogpgcheck  localinstall
perl-MailTools-1.77 heartbeat-ldirectord-2.1.4.9

查看信息:
rpm -ql heartbeat-ldirectord

chkconfig --list|grep ldirectord
显示3,5级别为on,需要关闭
chkconfig ldirectord off

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

cp ldirectord.cf  /etc/ha.d/

vim ldirectord.cf 做如下修改:
checktimeout=3       ##检测时间
checkinterval=1      ##平均检测间隔时间
logfile="/var/log/ldirectord.log"  ##启用日志

virtual=172.16.14.2:80      ##定义虚拟主机服务 VIP的地址
real=172.16.14.10:80 gate   ##节点IP;gate表示DR模型
real=172.16.14.11:80 gate
service=http               ##服务类型
request=".health.html"     ##健康检测页面;必须在节点上
receive="OK"               ##检测页面内容
scheduler=rr
#persistent=600
#netmask=255.255.255.255
protocol=tcp               ##协议
checktype=negotiate        ##检测类型
checkport=80               ##检测端口

然后启动ldirectord测试
service  ldirector start

将上述操作同步到dr2上:
/usr/lib/heartbeat/ha_propagete

在两个节点主机上建立测试页面:
cd /var/www/htdocs
vim .health.html
写入:OK


三、运行gui界面:

hb_gui    ##打开gui界面
为hacluster设置一个密码

1、添加资源




dr1运行,dr2为standby





dr2运行,dr1为standby




再添加一个VIP资源








使用ip addr show查看:




将Director和VIP进行排序约束:




四、测试结果:
1、dr1为active,dr2为standby:




说明资源约束生效,
访问页面时根据设定好的调度算法变换,说明负载均衡正常

2、dr2为active,dr2为standby:




说明资源切换成功,高可用有效,
通过访问页面,负载均衡也正常工作

3、把rs1的httpd服务停止
service httpd stop
访问页面时只显示rs2的页面结果,
说明Director通过健康状态监控发现rs1故障,把请求只发送到rs2上
重新启动rs1的httpd服务后,负载均衡恢复正常,

停掉rs2的httpd服务时,反之亦然
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息