- 论坛徽章:
- 0
|
用keepalived实现lvs--左右手均衡
Drunkard
2010-01-02
闲来无事,我设想了一种lvs的做法. 一般情况下,通常使用一个LB,另一个作为热备,随时可以切换;这样似乎有些浪费. 这仅仅是个设想,还没测试;
这个想法的目的是让2个LB同时跑流量,当其中一个当掉后,另一个能够自动顶上,接收所有流量. 利用的就是VRRP竞争的优先级(priority)值高低. 在此设想的基础上可以实现同时使用3个LB,4个LB...等情况;
# 使用的软件:
内核有ipvs支持;
keepalived,ipvs管理软件和VRRP功能;
ipvsadm用于查看ipvs的连接状态);
ip,用于查看本机的IP配置情况,keepalived配置的IP貌似用ifconfig看不到(或者人品问题);
ifconfig,不可能没用的;
iptstate,查看内核的netfilter连接状态(也能用conntrack);
atop,htop,iotop,iftop很好的几个软件,都是top风格的,我每次必装的管理软件;
bash-completion
关于VIP的数量
我的理解是这样的,DNS会简单的轮询,所以过多的VIP可能导致会话分散,这样人品差的人使用的时候可能会有问题. LB数量==VIP数量就行了. web的请求流量和响应流量平均为1:10以上,所以2个千兆网卡的LB可以撑起20G流量的应用了...
这里用2个VIP,可能是为了玩,穷尽各种玩乐的方法,呵呵.
VIP1和VIP2分别主要跑在LB1和LB2上,LB1挂掉时LB2可以接替它的VIP1,LB2挂掉时LB1可以接替它的VIP2. 配置简单:
在LB1和LB2的keepalived里都写上2个vrrp_instance,二者都对自己的VIP设置高priority,对别的VIP设置低priority;
virtual_server这里要老老实实地加上,LB1和LB2都要加2个VIP的配置;
real_server这里如果怕检测过于频繁,可以在LB1和LB2上都只设置1次;
以下写了一个配置示例. 在LB1上的keepalived.conf这样写:
global_defs {
notification_email {
girl@gmail.com
}
notification_email_from trouble@my.org
smtp_server 211.X.X.X
smtp_connect_timeout 30
router_id squid_124
}
vrrp_instance VI_1 {
state MASTER
smtp_alert
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass My_SQU1D
}
virtual_ipaddress {
192.168.100.122
}
}
virtual_server 192.168.100.122 80 {
delay_loop 6
lb_algo sed
lb_kind DR
persistence_timeout 120
protocol TCP
#sorry_server 192.168.100.125 81
real_server 192.168.100.65 80 { # squid65
weight 500
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 2
connect_port 80
}
}
# 如果想要更多瓢,照着上面画就行了.
}
vrrp_instance VI_2 {
state MASTER
smtp_alert
interface eth0
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass My_SQU1D
}
virtual_ipaddress {
192.168.100.123
}
}
virtual_server 192.168.100.123 80 {
delay_loop 6
lb_algo sed
lb_kind DR
persistence_timeout 120
protocol TCP
#sorry_server 192.168.100.125 81
real_server 192.168.100.65 80 { # squid65
weight 500
}
}
# 如果想要更多瓢,照着上面画就行了.
}
LB2上的keepalived.conf配置文件这样写:
global_defs {
notification_email {
girl@gmail.com
}
notification_email_from trouble@my.org
smtp_server 211.X.X.X
smtp_connect_timeout 30
router_id squid_125
}
vrrp_instance VI_1 {
state MASTER
smtp_alert
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass My_SQU1D
}
virtual_ipaddress {
192.168.100.122
}
}
virtual_server 192.168.100.122 80 {
delay_loop 6
lb_algo sed
lb_kind DR
persistence_timeout 120
protocol TCP
real_server 192.168.100.65 80 { # squid65
weight 500
}
# 如果想要更多瓢,照着上面画就行了.
}
vrrp_instance VI_2 {
state MASTER
smtp_alert
interface eth0
virtual_router_id 52
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass My_SQU1D
}
virtual_ipaddress {
192.168.100.123
}
}
virtual_server 192.168.100.123 80 {
delay_loop 6
lb_algo sed
lb_kind DR
persistence_timeout 120
protocol TCP
real_server 192.168.100.65 80 { # squid65
weight 500
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 2
connect_port 80
}
}
# 如果想要更多瓢,照着上面画就行了.
}
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/100419/showart_2139264.html |
|