实验介绍:
系统Centos6.4
keepalived的主配置文件 /etc/keepalived/keepalived.conf
keepalived的服务脚本 /etc/rc.d/init.d/keepalived
172.16.4.1 cont.magedu.com cont (作为控制节点,控制no1、no2)
Master 172.16.4.7 no1.magedu.com no1
Backup 172.16.4.11 no2.magedu.com no2
Real server1 172.16.4.5 no3.magedu.com no3
Real server2 172.16.4.15 no4.magedu.com no4
Vip: 172.16.4.55
Cont节点
#ssh-keygen -t rsa -P ‘’
#ssh-copy-id -i .ssh/id_rsa.pub root@No1.magedu.com
#ssh-copy-id -i .ssh/id_rsa.pub root@No2.magedu.com
No1、no2
#ssh-keygen -t rsa -P ‘’
#ssh-copy-id -i .ssh/id_rsa.pub root@cont.magedu.com
# ansible all -a 'date' #查看时间是否同步
# ansible all -m yum -a 'name=keepalived state=present'
一 、主从两个节点安装keepalived ipvsadm
#yum -y install keepalived ipvsadm
二、编辑主配置文件/etc/keepalived/keepalived.conf
global_defs { #全局配置段
notification_email {
root@localhost #邮件接收方
}
notification_email_from keepadmin@localhost #邮件发送方
smtp_server 127.0.0.1 #邮件服务器地址
smtp_connect_timeout 30 #连接超时时间
router_id LVS_DEVEL #路由器的标示
}
vrrp_instance VI_1 { #定义虚拟路由器(虚拟路由器的实例名称)
state MASTER #状态
interface eth0 #通告信息通过哪个接口进行
virtual_router_id 51 #虚拟路由id
priority 100 #初始优先级
advert_int 1 #初始化通告
authentication { # 认证机制
auth_type PASS #明文认证
auth_pass 1111 #认证密码
}
virtual_ipaddress { #定义虚拟ip地址
172.16.4.55
}
}
virtual_server 172.16.4.55 80 { #定义虚拟服务器,需指定虚拟ip和端口
delay_loop 6 #设置健康检查时间,单位为秒
lb_algo wrr #设置负载调度算法,此处为加权轮叫算法
lb_kind DR #设置LVS实现负载均衡的模式
nat_mask 255.255.0.0 #设置子网掩码
protocol TCP #设置转发协议的类型
real_server 172.16.4.5 80 { #定义realserver,需指定ip和端口
weight 1 #指定权重
HTTP_GET { #设置检测后端realserver的方式为获取http协议报文
url {
path /
status_code 200 #状态码为200则证明后端服务器是在线的
}
connect_timeout 3 #设置超时时间
nb_get_retry 3 #设置超时时候重试几次
delay_before_retry 3 #在重试的时候的时间间隔
}
}
real_server 172.16.4.15 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
可以将配置文件发送给backup节点,然后修改下面的选项:
state BACKUP
priority 99
#man keepalived.conf #查看各个配置的相关信息说明
#ansible all -m shell -a ‘service keepalived restart’ #在控制节点执行
#ip addr show #查看定义的虚拟ip
三、在两台Realserve上安装并启动httpd服务
1、安装httpd
这里我们就不演示了,参考http://qidian510.blog.51cto.com/7319882/1282663
# yum -y install httpd
# chkconfig httpd on
# vim /var/www/html/index.html
<h1>web1.test.com</h1>
# service httpd start
2、为两台Realserver提供Sysv格式的脚本来自动修改内核参数与虚拟IP并运行脚本
# mkdir src
# cd src/
# vim realserver.sh #编写脚本
#!/bin/bash
#
# Script to start LVS DR real server.
# description: LVS DR real server
. /etc/rc.d/init.d/functions
VIP=172.16.455 #修改你的VIP
host=`/bin/hostname`
case "$1" in
start)
# Start LVS-DR real server on this machine.
/sbin/ifconfig lo down
/sbin/ifconfig lo up
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
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
;;
stop)
# Stop LVS-DR real server loopback device(s).
/sbin/ifconfig lo:0 down
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
;;
status)
# Status of LVS-DR real server.
islothere=`/sbin/ifconfig lo:0 | grep $VIP`
isrothere=`netstat -rn | grep "lo:0" | grep $VIP`
if [ ! "$islothere" -o ! "isrothere" ];then
# Either the route or the lo:0 device
# not found.
echo "LVS-DR real server Stopped."
else
echo "LVS-DR real server Running."
fi
;;
*)
# Invalid entry.
echo "$0: Usage: $0 {start|status|stop}"
exit 1
;;
esac
#chmod +x realserver.sh #给脚本执行权限
# ./realserver.sh start
3、查看相关配置
# cat /proc/sys/net/ipv4/conf/lo/arp_ignore
1
# cat /proc/sys/net/ipv4/conf/lo/arp_announce
2
# cat /proc/sys/net/ipv4/conf/all/arp_ignore
1
# cat /proc/sys/net/ipv4/conf/all/arp_announce
2
四、测试验证
1、主节点查看规则
2、Master服务器损坏后,虚拟IP地址与LVS规则会配置到backup上
3、Master服务器重新上线,虚拟IP地址与LVS规则会重新配置到Master服务器上而在Backup服务器上删除
4、在浏览器测试
访问172.16.4.55即可,当我们刷新网页时,会看到在两个real server之间进行切换,当节点不能服务时,我们访问网页仍然不受影响,这样验证了我们的高可用配置实现了。