我们使用 keepalived 来管理我们的 Linux 虚拟服务器 (LVS) 负载平衡器。LVS VIP 设置为使用在 iptables 中配置的 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
在设置 realservers 时,10.10.35.0/24 网络中某些主机的 dns 配置错误。此后,我们修复了 DNS。但是,主机继续仅显示为上面的 IP 号码 (10.10.35.31,10.10.35.33,10.10.35.34)。
[root@lb1 ~]# host 10.10.35.31 31.35.10.10.in-addr.arpa 域名指针dis1.domain.com。
操作系统是 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 通过正确的主机名列出所有真实服务器?
看起来您的机器上的名称解析有问题。
ipvsadm
gethostbyaddr()
每次显示列表时都会使用,因此它可以让您的 libc 动态获取名称(调用链:print_conn
->addrport_to_anyname
->addr_to_anyname
->addr_to_host
->gethostbyaddr
)。您可能需要刷新缓存(重启
nscd
等),或修复 DNS。