主要实现WEB负载均衡,采用LVS/DR keepalived 实现高可用负载均衡,测试中发现的问题希望和大家讨论解决。

大家好,希望大家能一起帮我解决问题,谢谢。(目前都是在虚拟机上进行试验)
lvs_dr1:192.166.5.175协调服务器
lvs_dr2:192.166.5.202 备份服务器
VIP:192.166.5.250 虚拟IP
lvs_real1:192.166.5.200 应用服务器1
lvs_real2:192.166.5.201
前已经安装了 ipvs 和keepalived 在应用服务器上也配置了脚本
也可以实现负载均衡
在lvs_dr1上keepalived.conf 的配置如下:
global_defs {
# notification_email {
# cnseek@gmail.com
# }
# notification_email_from sns-lvs@gmail.com
# smtp_server 127.0.0.1
# smtp_connect_timeout 30
router_id LVS_DEVEL
}

# 20081013 written by aa
# VIP1
vrrp_instance VI_1 {
state MASTER #备份服务器上将MASTER改为BACKUP
interface eth0
virtual_router_id 51
priority 100 # 备份服务上将100改为99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.166.5.250
}
}

virtual_server 192.166.5.250 80 {
delay_loop 6 #(每隔10秒查询realserver状态)
lb_algo wlc #(lvs 算法)
lb_kind DR #(Direct Route)
persistence_timeout 60 #(同一IP的连接60秒内被分配到同一台realserver)
protocol TCP #(用TCP协议检查realserver状态)

real_server 192.166.5.200 80 {
weight 3 #(权重)
TCP_CHECK {
connect_timeout 10 #(10秒无响应超时)
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.166.5.201 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}

在备份服务器上lvs_dr2 keepalived。conf主要做以上两点修改即可

应用服务器上的脚本配置如下:
SNS_VIP=192.166.5.250
/etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast 192.166.5.254
/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
echo "RealServer Start OK"
;;
stop)
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
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
以上就是我所作的热备份负载均衡。
现在的存在的问题是:
1.如果应用到WEB上,是否这5个IP都要换为公网IP且在一个物理网段上(采用LVS/DR)
2.在测试的时候,当我在地址栏上输入:http://192.166.5.250(VIP)时,出现的页面是 显示该页无法刷新 那个页面。再刷新一次,就可以到应用服务器上。为什么会出现 该页无法刷新的页面,是我配置哪里错误了吗?

3.目前采用wlc算法,权值分别为3(应用服务器1)和1(应用服务器2 )。我输入http://192.166.5.250(VIP)时,首先进入的都是权值为1的应用服务器上,为什么呢?(我也删除了COOKIES)

4.在测试的时候,有的时候会出现 在lvs_dr上 输入:ipvsadm -l 时 里面的值都是0 不变的,但是输入VIP,可以在两台应用服务器上实现轮调,为什么有的时候值都是0 还有情况是 值的变化 不随我刷新的页面的次数变?
5.在输入ipvsadm -l -c 时 为什么 显示FIN_WAIT和NONE很多,但ESTABLISH很少?还搞不清楚FIN_WAIT是什么意思?
6.关于负载均衡的算法,在keepalive.conf里面 有写,但是我不清楚 这个都是根据自己的需要来修改吗? 如果是这样的话,那权值也都是手动来修改吗?(我看有资料说,权值是可以自动修改的,我在测试时没发现)
7.如果把这个应用的话,我怎么可以在真实环境下进行测试,这个在网上搜索到的关于压力测试方面的资料很少,请指点一下。

谢谢,希望大家一起讨论,解决这些困扰我的问题

Forums:

我来尝试回答您的这些问题,仅供参考:

1.如果应用到WEB上,是否这5个IP都要换为公网IP且在一个物理网段上(采用LVS/DR)

答:是的,需要保证是同一子网的。要想省IP,可以用NAT模式,对于100M的应该不存在问题。

2.在测试的时候,当我在地址栏上输入:http://192.166.5.250(VIP)时,出现的页面是 显示该页无法刷新 那个页面。再刷新一次,就可以到应用服务器上。为什么会出现 该页无法刷新的页面,是我配置哪里错误了吗?

答:配置应该没有错误,可能是后端其中的一个服务器出了问题。您可以先确保多次直接访问真实子机没有问题后再走VIP访问。

3.目前采用wlc算法,权值分别为3(应用服务器1)和1(应用服务器2 )。我输入http://192.166.5.250(VIP)时,首先进入的都是权值为1的应用服务器上,为什么呢?(我也删除了COOKIES)

答:或许3和1这样的权值差异不大吧。初始时访问大家的连接数都是0。等您做压力测试时,有比较多的并发连接数时可以再观察看看。主要是要观察真实子机上的连接数,不要看LVS的输出信息,那个有时候做不得数。

4.在测试的时候,有的时候会出现 在lvs_dr上 输入:ipvsadm -l 时 里面的值都是0 不变的,但是输入VIP,可以在两台应用服务器上实现轮调,为什么有的时候值都是0 还有情况是 值的变化 不随我刷新的页面的次数变?

答:请在真实子机上看当前的连接数,有时候LVS的输出信息不一定对。您的访问页面很容易完成的话,也有可能不连接了,所以连接数就归零了。我的建议是,您可以做高并发连接数测试时进行观察,主要是观察真实子机上的并发,顺带也看看LVS上的。

5.在输入ipvsadm -l -c 时 为什么 显示FIN_WAIT和NONE很多,但ESTABLISH很少?还搞不清楚FIN_WAIT是什么意思?

答:FIN_WAIT的意思可以去查一下TCP/IP协议相关文档。至于在Director上显示的信息,我建议是转到真实子机上看看。

6.关于负载均衡的算法,在keepalive.conf里面 有写,但是我不清楚 这个都是根据自己的需要来修改吗? 如果是这样的话,那权值也都是手动来修改吗?(我看有资料说,权值是可以自动修改的,我在测试时没发现)

答:对于keepalived来说,算法和权值一般是硬编码在keepalived.conf里边的。不修改keepalived.conf的话,可以直接用ipvsadm来修改,但是下次keepalived重启仍然会从keepalived.conf里边读取。

7.如果把这个应用的话,我怎么可以在真实环境下进行测试,这个在网上搜索到的关于压力测试方面的资料很少,请指点一下。

答:apache ab、httperf、siege、jmeter、autobench等等这些都可以拿来做测试工具。性能表现你可以在真实服务器上看。按照两种场景来测试:1、直接压真实机器,就是直接指定访问真实服务器RIP;2、通过LVS压真实机器,即直接访问VIP。

3.目前采用wlc算法,权值分别为3(应用服务器1)和1(应用服务器2 )。我输入http://192.166.5.250(VIP)时,首先进入的都是权值为1的应用服务器上,为什么呢?(我也删除了COOKIES)

答:或许3和1这样的权值差异不大吧。初始时访问大家的连接数都是0。等您做压力测试时,有比较多的并发连接数时可以再观察看看。主要是要观察真实子机上的连接数,不要看LVS的输出信息,那个有时候做不得数。

更正:首先理解一下什么叫WLC算法
wlc 加权最少链接(Weighted Least Connections)
在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能, 具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

请注意,“具有较高权值的服务器将承受较大比例的活动连接负载” 这一句。然后,当算法是rr的时候,权重没有作用。
但是当算法是wlc和wrr的时候, 必须设置权重,可以根据服务器的性能和配置,来确定权重的大小,当权重大的时候,调度的服务也就多,同时权重高的服务器先收到链接。当小的时候,调度的比较少。
当权重为0的时候,表示服务器不可用

现在LZ明白为什么都是分配到权重为3的那台服务器了吧,与清不清什么缓冲关系不大。

楼主原话:“……首先进入的都是权值为1的应用服务器上,为什么呢?……”
楼主疑惑的正是为什么访问请求不分配到权重3而是权重为1的那台,这明显是违背算法初始意愿的。

您的回答:“……现在LZ明白为什么都是分配到权重为3的那台服务器了吧……”
人家想知道的是为什么不是权重为3的那台,而您回答的是到权重为3的理由,根本不能解决楼主的疑惑啊。

我按您的方式也在虚拟机上配置,所有配置和您的一样
但是就是不能访问WEB服务器,只有在WEB服务器本身的机器上可以 访问 http://192.166.5.250
结果也是该服务器上的测试页,
在其他的机器上均无法看到WEB测试页/
不知还有什么地方是我配置没加么???往 老大帮助

randomness