Chinaunix
标题:
keepalived+appserver双主机方案测试(已解决)
[打印本页]
作者:
夏织风
时间:
2017-08-18 09:54
标题:
keepalived+appserver双主机方案测试(已解决)
本帖最后由 夏织风 于 2017-08-21 16:04 编辑
之前在网上看到一篇文章,讲述了双机部署keepalived+appserver会造成死锁的原因。
部分摘录如下:
当客户端发送数据包给 VIP .比如我们的 Director1 (Master 主)这个接口正在工作,这时 LVS 能接收到这个包,然后根据 keepalived 的配置进行 load balance .这时 Director1 会使用 LVS-DR 的功能给包路由给自己或者 Director2 (Backup).
这时有个问题.在这个例子中因为我们使用了 keepalived .这时 Director2 这台是一台 VIP 的备份服务器.这时 keepalived 默认会立即启动使用 ipvsadm 的规则来配置这台服务器怎么样做备份的处理.来使得更快的故障转移.所以这时这些规则这台备份的 Director2 主机都会存在.
这就有问题了.当从 Director1 (Master 主),比如使用 rr .会转发大约 50% 的包从 Director1 到 Director2 (Backup)的 3306 的端口.这时因为 Director2 因为这些 LVS-DR 的配置规则会接着给这些包,在做一次 load balance .又发回去给 Director1.这时会产生一个死的循环.
随着时间的推移,不但不能正常的处理连接,您的服务器也会崩溃,在他们中间或后端不断的反复连接
-----------------------------------------分割线---------------------------------------------------------
针对这个问题,我采用了与文章不同的解决方案,因为文章中给防火墙添加规则屏蔽双方的mac地址实际上是人为关闭lvs的功能。
我想即保留HA又使用lvs功能,所以我采用了这个方法:
创建子网卡并使让子网卡和主网卡在同一网段:ifconfig eth0:0 ip地址 netmask 掩码位 up
在keepalived.conf文件中的配置信息中:
采用的是rr轮询方式
VRRPD配置中的interface使用的是主网卡eth0(注,不能使用子网卡,会报错)
LVS˜配置中的realserver的ip是子网卡的ip地址
-------------------------------------------分割线--------------------------------------------------------
我绑定了8080端口,然后测试了一下,没有产生死锁。
我这个方案是基于一个假设:我猜想keepalived是通过VRRPD配置中的interface,来获取本机的ip地址,我只要不向这个地址发送请求,应该可以避免死锁的产生。
不过,由于我现有的环境没有loadrunner或者其他的压力测试服务器,不知道在压力测试情况下,会不会保证稳定。
希望各位大神和同行,如果有兴趣的话,可以测试一下我的方案,把问题和结果告诉我一下,欢迎讨论。
---------------------------------------------分割线-------------------------------------------------------
我用loadrunner测试了一下,会有死锁产生,看来keepalived应该是监听eth端口的包,我打算测试双网卡的情况,看看会不会避免死锁
作者:
q1208c
时间:
2017-08-26 11:52
回复
1#
夏织风
keepalived 不是 配置 HA 的?
怎么还配置成了RR ?
还有这种操作?
作者:
夏织风
时间:
2017-08-28 18:01
回复
2#
q1208c
确实两台机器无法构建HA+RR模式,除非RR是由应用层程序进行分发。
作者:
q1208c
时间:
2017-08-28 20:31
回复
3#
夏织风
keepalived 的 VIP 同是一时刻只在一台机器上, 怎么做到RR呢?
作者:
夏织风
时间:
2017-08-28 20:45
回复
4#
q1208c
不使用IPVS,通过应用程序使用自定义的规则进行转发。
作者:
q1208c
时间:
2017-08-28 21:05
回复
5#
夏织风
那你的客户端要怎么知道访问哪一台呢?
两台一起连?然后自己处理RR?
作者:
夏织风
时间:
2017-08-29 10:26
回复
6#
q1208c
客户端连接只需知道VIP就可以,具体业务由上层进行转发,不通过二层进行转发,这样的效率肯定是比较慢,但是不会冲突
作者:
夏织风
时间:
2017-08-29 10:28
回复
6#
q1208c
HA+RR不是全部由keepalived完成,keepalived只负责HA,自己开发的软件在上层负责RR。
作者:
q1208c
时间:
2017-08-29 21:09
回复
7#
夏织风
通用一点的做法是使用三层的代理结构。
lvs -> haproxy -> application
lvs 完成 ha
haproxy 完成 rr
作者:
夏织风
时间:
2017-08-29 23:01
回复
9#
q1208c
ok!我测试一下。
作者:
夏织风
时间:
2017-08-29 23:02
回复
9#
q1208c
补充一下,应该是keepalived->haproxy/nginx->application吧
作者:
q1208c
时间:
2017-08-30 22:22
回复
11#
夏织风
application 可以是 nginx, tomcat, apache, jetty, etc.
作者:
夏织风
时间:
2017-08-31 15:33
回复
12#
q1208c
我觉得haproxy和nginx的功能是一样的
作者:
q1208c
时间:
2017-09-01 01:50
回复
13#
夏织风
不一样。
haproxy 只支持转发,本身不能提供服务。
nginx 本身可以提供http服务,也能转发。
作者:
夏织风
时间:
2017-09-04 08:57
回复
14#
q1208c
谢谢大神,我研究一下这两个软件
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2