经安装测试能够实现我的这些需要:
虚拟 IP,负载均衡调度器,但需要手工动态增加命令,所以需要 keepalived 来实现自动配合。虚拟 IP 同时只能存在于某一台机器上,此时称为 master 机,其它为 backup 机。
安装:ubuntu 上直接用 apt-get install ipvsadm,装完后为自启动服务。剩下的事就交给 keepalived 管理了,不需要手工配置 LVS。
根据配置文件进行监控,向 LVS 提供信息,自动检测各调度器可用性,从而实现虚拟 IP(即 master 机) 由哪台机器服务。就是指定哪些机器一块虚拟出哪个 IP。还有在虚拟的 IP 上提供哪个端口映射到哪些后端真实服务器从而实现后端服务的负载均衡 (可自动检测出哪些不可用)
安装:ubuntu 上直接用 apt-get install keepalived,装完后为自启动服务。然后在 / etc/keepalived / 中增加配置 keepalived.conf
一般需要 4 台机器,2 台做为双机备份的调度器 (VIP 同时只能存在其中一台机上,另一台闲着的),另 2 台做为真实应用服务器(realserver) 如 web 服务器。其中调度器可以增加为多台(浪费),realserver 也可以增加为多台。设:
虚拟 VIP:10.0.0.110
调度器 A:10.0.0.101 (装 lvs+keepalived + 配置)
调度器 B:10.0.0.102 (装 lvs+keepalived + 配置)
realserverA:10.0.0.103 (需要启动 realserver.sh 脚本)
realserverB:10.0.0.104 (需要启动 realserver.sh 脚本)
global_defs {
router_id webHA
}
vrrp_instance VI_1 { #调度器虚拟 IP 切换配置
state MASTER #一台为 MASTER, 另一台为 BACKUP。或者两台均是 BACKUP
interface ens33
virtual_router_id 51
priority 100 #优先级,另一台改为 90
advert_int 1 #组播信息发送间隔,两个节点设置必须一样
nopreempt #不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.110
}
}
virtual_server 10.0.0.110 80 { #负载均衡配置 (重要:端口必须与 realserver 端口一致,不能更改)
delay_loop 5 #每个 5 秒检查一次 real_server 状态
lb_algo wrr #LVS 算法
lb_kind DR #LVS 模式
persistence_timeout 10 #会话保持时间
protocol TCP
real_server 10.0.0.103 80 {
weight 1
TCP_CHECK {
connect_timeout 5 #连接超时时间
nb_get_retry 2 #重连次数
delay_before_retry 3 #重连间隔时间
connect_port 80 #健康检查端口
}
}
real_server 10.0.0.104 80 {
weight 1
TCP_CHECK {
connect_timeout 5 #连接超时时间
nb_get_retry 2 #重连次数
delay_before_retry 3 #重连间隔时间
connect_port 80 #健康检查端口
}
}
}
两台调度器做好配置后,重启 service keepalived restart,即可实现 2 台调度器上的 VIP 切换(关掉机器或断掉网络或关掉 keepalived 都可以使 VIP 切换)。
重要:要使服务转接到后端 realserver 实现负载均衡,realserver 上必须运行一个脚本用来修改网络配置,不能 realserver 会产生对 VIP 的冲突,原理暂时我还不清楚。
重要:虚拟 VIP 实现的服务端口必须与 realserver 上的服务端口一致,不能更改成其它端口,否则不能转接到 realserver。
可以在 2 台调度器机器上运行 ipvsadm -ln 来查看后方 realserver 的状态。没有显示出来的则表示该 realserver 有问题,能显示的代表 realserver 服务正常,但不一定从 VIP 访问就是 OK 的
以下脚本是放在 rs 节点服务器上的
#!/bin/bash
# description: Config realserver lo and apply noarp
#Written by :NetSeek http://www.yaodouwang.com
VIP=10.0.0.110
case "$1" in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $VIP >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
完成上面步骤后,就可以虚拟 IP 并且负载均衡了。
添加一块网卡
确定之后进入虚拟机,ip a 命令会出现网卡信息
可以看到我这里有个刚添加的网卡,keepalived 配置文件设置的虚拟 IP 绑定到这个网卡上
来源: http://www.bubuko.com/infodetail-2450716.html