我们使用keepalived来pipe理我们的Linux虚拟服务器(LVS)负载平衡器。 LVS VIP设置为使用iptables中configuration的FWMARK。
virtual_server fwmark 300000 { delay_loop 10 lb_algo wrr lb_kind NAT persistence_timeout 180 protocol TCP real_server 10.10.35.31 { weight 24 MISC_CHECK { misc_path "/usr/local/sbin/check_php_wrapper.sh 10.10.35.31" misc_timeout 30 } } real_server 10.10.35.32 { weight 24 MISC_CHECK { misc_path "/usr/local/sbin/check_php_wrapper.sh 10.10.35.32" misc_timeout 30 } } real_server 10.10.35.33 { weight 24 MISC_CHECK { misc_path "/usr/local/sbin/check_php_wrapper.sh 10.10.35.33" misc_timeout 30 } } real_server 10.10.35.34 { weight 24 MISC_CHECK { misc_path "/usr/local/sbin/check_php_wrapper.sh 10.10.35.34" misc_timeout 30 } } }
http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.fwmark.html
[root@lb1 ~]# iptables -L -n -v -t mangle Chain PREROUTING (policy ACCEPT 182G packets, 114T bytes) 190M 167G MARK tcp -- * * 0.0.0.0/0 w1.x1.y1.4 multiport dports 80,443 MARK set 0x493e0 62M 58G MARK tcp -- * * 0.0.0.0/0 w1.x1.y2.4 multiport dports 80,443 MARK set 0x493e0 [root@lb1 ~]# ipvsadm -L IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn FWM 300000 wrr persistent 180 -> 10.10.35.31:0 Masq 24 1 0 -> dis2.domain.com:0 Masq 24 3 231 -> 10.10.35.33:0 Masq 24 0 208 -> 10.10.35.34:0 Masq 24 0 0
当真实服务器被设置的时候,10.10.35.0/24networking中的一些主机出现了一个configuration错误的dns。 此后,我们修复了DNS。 但是,主机仍然只显示上面的IP地址(10.10.35.31,10.10.35.33,10.10.35.34)。
[root @ lb1〜]#主机10.10.35.31 31.35.10.10.in-addr.arpa域名指针dis1.domain.com。
OS是CentOS 6.3。 Ipvsadm是ipvsadm-1.25-10.el6.x86_64。 内核是kernel-2.6.32-71.el6.x86_64。 Keepalived Keepalived-1.2.7-1.el6.x86_64。
我们怎么能得到ipvsadm -L列出所有realserver正确的主机名?
看起来你的机器上有名称parsing问题。
ipvsadm每次显示列表时使用gethostbyaddr() ,所以它可以让你的libcdynamic获取名字(call chain: addrport_to_anyname – > addr_to_anyname – > addr_to_host – > addr_to_host – > gethostbyaddr )。
您可能需要刷新caching(重新启动nscd等),或修复您的DNS。