前提: 已经有 DNS server 配置好,并且在运行中。地址为: dns-a 和 dns-b。
aptitude install keepalived ipvsadm
- 开启 ip_forward:
/sbin/sysctl -w net.ipv4.ip_forward=1
- keepalived 配置
global_defs {
router_id DNS_LVS_1 #LVS负载均衡标识,在一个网络里,要保持是唯一的。
}
vrrp_sync_group VGM {
group {
VI_DNS
}
}
vrrp_instance VI_DNS {
state BACKUP
interface bond1
lvs_sync_daemon_interface bond1
virtual_router_id 101
priority 110
advert_int 3
authentication {
auth_type PASS
auth_pass lvs
}
unicast_src_ip lvs-master
unicast_peer {
lvs-slave
}
virtual_ipaddress {
lvs-vip
}
}
virtual_server lvs-vip 53 {
delay_loop 6
lb_algo rr
lb_kind TUN
protocol UDP
real_server dns-a 53 {
MISC_CHECK {
connect_timeout 11
misc_path "/etc/keepalived/dnscheck -h dns-a"
}
}
real_server dns-b 53 {
MISC_CHECK {
connect_timeout 11
misc_path "/etc/keepalived/dnscheck -h dns-b"
}
}
}
# if tcp is used, copy udp section and change protocol.
...
- 启动 keepalived 后,用
ipvsadm -Ln
检查 lvs 规则是否正确。
- 先加载 ipip 模块。
modprobe ipip
,并把 ipip 加到 /etc/modules 里自动加载。 - 干掉 arp_ignore 和 arp_announce。
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
- 配置 tun 网络设备和地址。
ip link set up tunl0
ip addr add lvs-vip/32 dev tunl0
记得把这些配置加到 /etc/network/interfaces 里开启自动生效。
在这种纯内网的环境下,理想的选择是 DR 模式。大多数文档都提到 DR 模式对网络的要求是 virtual server 和 real server 都在一个 vlan 里,其实这里的要求是机器的 link layer 是直接连通的。而上面的配置情况里,虽然服务器都在一个 vlan,但是 vlan 开启了 ARP Proxy, DR 就不能工作啦。这个问题可以看LVS 文档 中关于 DR 模式的原理。
参考资料: