得之坦然,失之淡然,争其必然,顺其自然!
分类:
2012-12-06 16:16:00
原文地址:LVS+Keepalived 作者:黑腾小于
LVS+Keepalived
keepalived 作用
如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。
Keepalived的代码结构和工作图示:
keepalived依赖包
ipvsadm
libpopt0
libssl-dev
VRRP协议
虚拟路由器冗余协议(VRRP)是一种选择协议,VRRP通过优先级来确定由谁当master,谁当backup。
LVS
是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。
十种调度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。
LVS结构与工作原理:
LVS由前端的负载均衡器(Load Balancer,LB)和后端的真实服务器(Real Server,RS)群组成。RS间可通过局域网或广域网连接。LVS的这种结构对用户是透明的,用户只能看见一台作为LB的虚拟服务器(Virtual Server),而看不到提供服务的RS群。
当用户的请求发往虚拟服务器,LB根据设定的包转发策略和负载均衡调度算法将用户请求转发给RS。RS再将用户请求结果返回给用户。同请求包一样,应答包的返回方式也与包转发策略有关。
LVS转发策略:
NAT (Network Address Translation)模式。
IP隧道 (IP Tunneling)模式。
DR(Direct Routing)模式。 我们这里,最常见的,使用最多的是DR模式
MASTER
root@example:~# apt-get install libssl-dev libpopt-dev \\安装openssl及popt
root@example:~# apt-get install keepalived
root@example:~# vim /etc/keepalived/keepalived.conf \\创建keepalived的配置文件进行编写
!Configuration File for keepalived
global_defs {
notification_email {
root@example.com \\当出现问题时,发送的收件人地址
}
notification_email_from
smtp_server 127.0.0.1 \\邮件服务器地址
smtp_connect_timeout 30 \\ 连接邮件服务器超时的时间
router_id LVS_DEVEL \\ 主管lvs的名字
}
vrrp_instance VI_1 {
state MASTER \\主服务器
interface eth0 \\选择设备
virtual_router_id 51 \\+ 虚拟路由标识,这个标识是一个数字,并且同一个vrrp实例使用唯一的标,同backup中的是一致的,与整个vrrp中也是一致的
priority 100 \\ 优先级,数越大,优先级越高
advert_int 1
authentication { \\ 类型主要有PASS、AH两种,通常使用的类型为PASS
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { \\ 浮动IP 虚拟IP地址
192.168.1.104
}
}
virtual_server 192.168.1.104 80 { \\ 虚拟服务器virtual_server定义块
delay_loop 6 \\健康检查时间间隔
lb_algo wrr \\负载均衡调度算法
lb_kind DR \\负载均衡转发规则
persistence_timeout 60 \\会话保持时间
protocol TCP 转发协议
real_server 192.168.1.101 80 { \\ 服务器池
weight 3 \\ 权重值数值越大,权重越高
TCP_CHECK { \\ Tcp检查
connect_timeout 10 \\ 连接超时
nb_get_retry 3 \\ 重连次数
delay_before_retry 3 \\ 重连间隔时间
connect_port 80 \\ 连接端口
}
}
real_server 192.168.1.102 80 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
BACKUP
root@example1:~# apt-get install libssl-dev libpopt-dev
root@example1:~# apt-get install keepalived
root@example1:~# vim /etc/keepalived/keepalived.conf
!Configuration File for keepalived
global_defs {
notification_email {
root@example.com
}
notification_email_from
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP \\备份服务器
interface eth0
virtual_router_id 51
priority 99 \\优先级比master小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.104
}
}
virtual_server 192.168.1.104 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.1.101 80 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.1.102 80 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
两边配置好后,启动keepalived服务, 环境需要脚本支持,
example和example1上分别启动real.sh脚本 代理机启动lvs-dr.sh脚本 并且打开watch -n 1 'ipvsadm -ln' 进行查看,下面附加两个网上参考脚本 已测试 可以使用 但需要因人 进行稍加修改
vim /etc/keepalived/lvs-dr.sh
#!/bin/bash
# description: start LVS of DirectorServer
#Written by :NetSeek [url][/url]
GW=192.168.1.1
# website director vip.
SNS_VIP=192.168.1.104
SNS_RIP1=192.168.1.101
SNS_RIP2=192.168.1.102
logger $0 called with $1
case "$1" in
start)
# set squid vip
/sbin/ipvsadm --set 30 5 60
/sbin/ifconfig eth0:0 $SNS_VIP broadcast $SNS_VIP netmask 255.255.255.0
# broadcast $SNS_VIP up
/sbin/route add -host $SNS_VIP dev eth0:0
/sbin/ipvsadm -A -t $SNS_VIP:80 -s wrr -p 3
/sbin/ipvsadm -a -t $SNS_VIP:80 -r $SNS_RIP1:80 -g -w 1
/sbin/ipvsadm -a -t $SNS_VIP:80 -r $SNS_RIP2:80 -g -w 1
touch /var/lock/subsys/ipvsadm >/dev/null 2>&1
;;
stop)
/sbin/ipvsadm -C
/sbin/ipvsadm -Z
ifconfig eth0:0 down
ifconfig eth0:1 down
route del $SNS_VIP
route del $SS_VIP
rm -rf /var/lock/subsys/ipvsadm >/dev/null 2>&1
echo "ipvsadm stoped"
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ];then
echo "ipvsadm stoped"
exit 1
else
echo "ipvsadm OK"
fi
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1
esac
exit 0
root@example:~# vim /etc/keepalived/real.sh
#!/bin/bash
# description: Config realserver lo and apply noarp
#Written by :NetSeek [url][/url]
SNS_VIP=192.168.1.104
. /etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.0 broadcast $SNS_VIP
/sbin/route add -host $SNS_VIP dev lo:0
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
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $SNS_VIP >/dev/null 2>&1
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
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
参考 本部门经理文档
网上参考资料