- 论坛徽章:
- 1
|
本帖最后由 夏织风 于 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端口的包,我打算测试双网卡的情况,看看会不会避免死锁
|
|