第1章 LVS + keepalived 负载均衡安装配置笔记
经安装测试能够实现我的这些需要:
- 双机或多机实现虚拟IP,能够实现IP故障切换
- 能够连接多台后端真实服务器,实现后端服务器的负载均衡
- 能够实现双机热备份(同一时间单机工作,故障后切换到另一台)
- 能够双机虚拟IP且负载均衡(双机即做调度器又做真实服务器)
1.1 LVS (Linux Virtual Server)
虚拟IP,负载均衡调度器,但需要手工动态增加命令,所以需要keepalived来实现自动配合。虚拟IP同时只能存在于某一台机器上,此时称为master机,其它为backup机。
安装:ubuntu上直接用apt-get install ipvsadm,装完后为自启动服务。剩下的事就交给keepalived管理了,不需要手工配置LVS。
1.2 Keepalived
根据配置文件进行监控,向LVS提供信息,自动检测各调度器可用性,从而实现虚拟IP(即master机)由哪台机器服务。就是指定哪些机器一块虚拟出哪个IP。还有在虚拟的IP上提供哪个端口映射到哪些后端真实服务器从而实现后端服务的负载均衡(可自动检测出哪些不可用)
安装:ubuntu上直接用apt-get install keepalived,装完后为自启动服务。然后在/etc/keepalived/中增加配置keepalived.conf
1.3 基本网络结构
一般需要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脚本)
1.4 keepalived.conf
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的
1.5 realserver.sh脚本
以下脚本是放在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并且负载均衡了。
1.6 keepalived绑定公网IP方法
添加一块网卡
确定之后进入虚拟机,ip a命令会出现网卡信息
可以看到我这里有个刚添加的网卡,keepalived配置文件设置的虚拟IP绑定到这个网卡上