RHEL6.6_x86_64
主要软件:
keepalived-1.2.16.tar.gz
ipvsadm-1.26-4.el6.x86_64.rpm
Keepalived是一种高性能的服务器高可用解决方案,架构不同于corosync和heartbeat。Keepalived的实现是基于VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议),VRRP是一种容错协议。一个网络内的所有主机都设置有一条默认路由,这样,主机发出的目的地址不在本网段的报文将通过默认路由发送往RouterA,从而实现主机与外网通信。当RouterA挂掉,本网段中所有以RouterA为默认路由下一跳的主机将不能与外网通信。VRRP就是解决这一问题而出现的。
VRRP将局域网的(两台或以上)路由器虚拟成一个设备,对外提供虚拟路由器IP,在路由器组内部,若实际拥有这个对外IP的路由器工作正常的话就是MASTER,MASTER实现针对虚拟路由器IP的各种网络功能,如ARP请求,ICMP,数据转发等。其他设备不拥有该IP,则是BACKUP,BACKUP只接收MASTER的VRRP状态通告信息。当MASTER宕掉,BACKUP接管MASTER的网络功能。
在这个结构图里,处于下端的是内核空间,它包括 ipvs 和 NETLINK 两个部分。netlink 提供高级路由及其他相关的网络功能,如果我们在负载均衡器上启用 netfilter/iptable,将会直接影响它的性能。出于图形上方的组件为用户空间,
1、 WatchDog 负责监控 checkers 和 VRRP 进程的状况。
2、 Checkers 负责真实服务器的健康检查 healthchecking,是 keepalived 最主要的功能。
3、 VRRP Stack 负责负载均衡器之间的失败切换 FailOver. 如果只用一个负载均衡器,则VRRP 不是必须的。
4、 IPVS wrapper 用来发送设定的规则到内核 ipvs 代码。
5、 Netlink Reflector 用来设定 vrrp 的 vip 地址等。
Master_DS : 192.168.1.5
Backup_DS : 192.168.1.8
RS1:192.168.1.6
RS2: 192.168.1.7
VIP: 192.168.1.10
编译安装keepalived
# tar xf keepalived-1.2.16.tar.gz
# cd keepalived-1.2.16
# ./configure --prefix=/usr/local/keepalived --sysconfdir=/etc
# make
# make install
配置keepalived
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email { #keepalived状态切换时通知email出现故障,邮件报警
root@localhost
}
notification_email_from keepalived@localhost #指定发件人
smtp_server 127.0.0.1 #smtp服务器地址
smtp_connect_timeout 30 #smtp连接超时时间
router_id LVS_DEVEL #运行keepalived机器的一个标识
}
vrrp_instance VI_1 {
state MASTER #配置为主
interface eth1 #通讯网卡
virtual_router_id 51 #路由标识
priority 100 #优先级
advert_int 1 #通告时间间隔:发送通告报文的时间间隔。在VRRPVersion2中单位为秒,默认值为1秒。
authentication {
auth_type PASS
auth_pass 1111 #验证密码,通讯主机间验证
}
virtual_ipaddress { #虚拟IP地址
192.168.1.10/24 dev eth1 label eth1:0
}
}
virtual_server 192.168.1.10 80 {
delay_loop 6
lb_algo rr # rr调度算法, 有rr|wrr|lblc|sh|sh
lb_kind DR # DR模型
nat_mask 255.255.255.0
#persistence_timeout 50
protocol TCP
sorry_server 127.0.0.1 80 #所有RS故障,重定向到本机
real_server 192.168.1.6 80 {
weight 1 #权重,0为失效
TCP_CHECK {
connect_timeout 3 #连接超时时间
nb_get_retry 3 #重试次数
delay_before_retry 3#重试时间间隔
}
}
real_server 192.168.1.7 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
# yum install ivsadm
192.168.1.8主机中
安装keepalived同192.168.1.5
配置文件中:
将“state MASTER" 改为 ”state BACKUP"
将"priority 100"改为比100小的值,这里改为“priority 70".
# yum install ipvsadm
配置Real server
编写Real Server脚本
#/bin/bash
# Author xiaoming
# mail: [email protected]
VIP=192.168.1.10
. /etc/init.d/functions
case "$1" in
start)
echo "Start Real Server "
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
route add -host $VIP dev lo:0
echo 1 > /proc/sys/net/ipv4/conf/eth1/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/eth1/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
echo "Stop Real Server"
/sbin/ifconfig lo:0 down
route del $VIP
echo 0 > /proc/sys/net/ipv4/conf/eth1/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/eth1/arp_announce
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
分别在Real Server1和Real Server2上执行此脚本
配置完毕,分别在director server上启动keepalived服务,
# service keepalivedstart
查看LVS路由表信息
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.10:80 rr
-> 192.168.1.6:80 Route 1 0 0
-> 192.168.1.7:80 Route 1 0 0