lvs fullnat+ECMP无法同步session

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lvs fullnat+ECMP无法同步session相关的知识,希望对你有一定的参考价值。

session简介:

客户连接列表。由ip,port,protocol五元组确定一个session。

[[email protected] keepalived]# ipvsadm -lnc
IPVS connection entries
pro expire state       source             virtual            destination
TCP 00:50  AC10611E    172.16.99.4:49684  2.2.2.3:80         172.16.98.10:5001
TCP 00:50  AC10611E    172.16.99.4:49685  2.2.2.3:80         172.16.98.10:5002
[[email protected] keepalived]# 

配置了这个session同步之后,当其中一个lvs宕机,已经和客户端建立成功的连接,将继续保持会话,并不会出现一部分用户被迫断开连接的情况。

设想:

在lvs fullnat+ECMP模式中,如果有一个BACKUP机能够同步所有MASTER主机的会话,则当一台MASTER主机出现故障,此BACKUP只需要花费很短的时间(脚本配置网卡和启动ospfd的时间),就可以接替MASTER主机的地位,尽量保证已经建立的会话不中断。给与用户更好的体验。

拓扑:

技术分享图片

测试:

使用lvs_sync_daemon_interface em3命令来同步session。

vrrp_instance VI_1 {
    state MASTER
    interface em3
    lvs_sync_daemon_interface em3
    mcast_src_ip 172.16.98.11
    virtual_router_id 65
    priority 180
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    172.16.98.10
    }

使用ipvsadm -ln --daemon来查看主备状态

[[email protected] keepalived]# ipvsadm -ln --daemon
master sync daemon (mcast=em3, syncid=65)
[[email protected] keepalived]# 

测试结果:当client发起一个访问请求,主lvs正常转发,同时记录session,但是备机会强行重启

报错示例:

Aug 31 01:18:19 lvs-fullnat-two kernel:  Intel GenuineIntel
Aug 31 01:18:19 lvs-fullnat-two kernel:  AMD AuthenticAMD
Aug 31 01:18:19 lvs-fullnat-two kernel:  Centaur CentaurHauls
Aug 31 01:18:19 lvs-fullnat-two kernel: Bios-provided physical RAM map:
Aug 31 01:18:19 lvs-fullnat-two kernel: BIOS-e820: 0000000000000000 - 000000000009c000 (usable)
Aug 31 01:18:19 lvs-fullnat-two kernel: BIOS-e820: 0000000000100000 - 00000000bd2f0000 (usable)
Aug 31 01:18:19 lvs-fullnat-two kernel: BIOS-e820: 00000000bd2f0000 - 00000000bd31c000 (reserved)
Aug 31 01:18:19 lvs-fullnat-two kernel: BIOS-e820: 00000000bd31c000 - 00000000bd35b000 (ACPI data)
Aug 31 01:18:19 lvs-fullnat-two kernel: BIOS-e820: 00000000bd35b000 - 00000000c0000000 (reserved)
Aug 31 01:18:19 lvs-fullnat-two kernel: BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved)
Aug 31 01:18:19 lvs-fullnat-two kernel: BIOS-e820: 00000000fe000000 - 0000000100000000 (reserved)
Aug 31 01:18:19 lvs-fullnat-two kernel: BIOS-e820: 0000000100000000 - 0000005040000000 (usable)
Aug 31 01:18:19 lvs-fullnat-two kernel: DMI 2.7 present.

报错日志:

https://pan.baidu.com/s/105m5dN8beyg6OGRHty0SZg

后续尝试:

查看京东大神写的文章后,得到一些启发,可以部署一个cache服务器,cache服务器用于同步所有master服务器的session,在某台master出现故障的时候,cache服务器推送session到backup服务器上,以此来做到backup同步master的session。
但是文章中并没有具体介绍cache服务器怎么部署,怎么提取session。
这个思路很好,但是目前没有明确的操作方法。
http://www.infoq.com/cn/articles/jingdong-network-framework-gateway-dlvs

其他相关连接:

吴佳明(普空):LVS在大规模网络环境中的应用:http://blog.sina.com.cn/s/blog_620c47630102v2iz.html
Linux之lvs集群:https://www.jianshu.com/p/cc40b52cc5df
LVS 实验笔记1 一些基础概念:http://blog.51cto.com/sweifan/1643975
LVS+Keepalived 主备机之间客户连接列表同步问题:http://zh.linuxvirtualserver.org/node/2751
LVS-ospf集群:http://noops.me/?p=974#comment-4756

最新发现:

查看IPVS详情:
查看/proc/net目录下的

[[email protected] net]# ll ip_vs*
-r--r--r--. 1 root root 0 Sep 13 00:14 ip_vs
-r--r--r--. 1 root root 0 Sep 13 00:14 ip_vs_app
-r--r--r--. 1 root root 0 Sep 13 00:14 ip_vs_conn
-r--r--r--. 1 root root 0 Sep 13 00:14 ip_vs_conn_sync
-r--r--r--. 1 root root 0 Sep 13 00:14 ip_vs_ext_stats
-r--r--r--. 1 root root 0 Sep 13 00:14 ip_vs_stats
[[email protected] net]# 

其中

[[email protected] net]# ipvsadm -lnc
IPVS connection entries
pro expire state       source             virtual            destination
TCP 00:50  AC10611E    172.16.99.4:50870  2.2.2.3:80         172.16.98.10:5009
TCP 00:01  AC10611E    172.16.99.4:0      2.2.2.4:443        172.16.99.4:0
TCP 00:01  AC10611E    172.16.99.4:50872  2.2.2.4:443        172.16.98.10:5015
[[email protected] net]# cat ip_vs_conn
Pro FromIP   FPrt ToIP     TPrt LocalIP  LPrt DestIP   DPrt State       Expires
TCP AC106304 C6B6 02020203 0050 AC10620A 1391 AC10611E 0050 ESTABLISHED      26
TCP AC106304 0000 02020204 01BB AC106304 0000 AC10611E 01BB NONE              0
TCP AC106304 C6B8 02020204 01BB AC10620A 1397 AC10611E 01BB ESTABLISHED      29
[[email protected] net]# 

注:ip_vs_conn文件是无法编辑的.

dpvs的session同步情况:

技术分享图片

以上是关于lvs fullnat+ECMP无法同步session的主要内容,如果未能解决你的问题,请参考以下文章

lvs fullnat+ECMP10LVS ActiveConn InActConn 注解

lvs fullnat+ECMP内核编译

lvs fullnat+ECMP安装keepalived+ipvsadm+quaage

lvs fullnat+ECMP后端nginx成功解析真实ip

lvs fullnat+ECMPsession同步模型讨论

LVS-Fullnat之编译内核 将fullnat模块添加到内核