一、VRRP
keepalived提供Vrrp虚拟ip(Vip)。如果未开启LVS配置,keepalived本身并无负载均衡。每次只有一个真实服务器(RS)接管Vip。可以设置一个条件,如配置一个检测脚本,达到触发条件后,进行Vip接管切换,即运维人常说的“ip飘走”。
Vip难道不是为了实现负载均衡?对,不需要负载均衡的Vip也是很常见的需求,比如有明显主备关系的反代,平时只需要反代一个主节点,确保效率,只有出故障才需要切换到性能较弱的备份节点);还比如无法实现多点的架构,后端有多个读入口但是每次只能有一个写入口;再比如局域网内访问,无负载压力,仅为了稳定性和连通。
(1)部署
Cent OS
yum -y install keepalived && systemctl enable keepalived - 编辑
/etc/sysctl.conf ,修改net.ipv4.ip_nonlocal_bind=1 ,后执行sysctl -p - 修改keepalive单独存放日志,其中-S指定syslog的facility,编辑
/etc/sysconfig/keepalived ,增加KEEPALIVED_OPTIONS="-D -d -S 0" - 编辑
/etc/rsyslog.conf ,增加local0.* /var/log/keepalived.log systemctl restart rsyslog systemctl restart keepalived
Ubuntu apt安装同上,但是日志无需配置syslog。可用journalctl -u keepalived.service -f 查看日志
(2)配置
配置案例:
global_defs {
router_id 【本机hostname】
}
vrrp_script chk_ha_proc {
script "killall -0 haproxy"【检查进程】
interval 2
fall 2
rise 2
}
vrrp_instance VI_1 {
state BACKUP【非抢占都backup,抢占Master/backup】
interface ens192【参与vrrp的本机网卡】
virtual_router_id 53【都配置一样的路由号】
priority 100
nopreempt【非抢占必配】
authentication {
auth_type PASS
auth_pass 123456【路由号验证】
}
virtual_ipaddress {
【Vip】
}
track_script {
chk_ha_proc【对应采用哪种script】
}
}
需要注意script "</dev/tcp/127.0.0.1/443" 是bash命令,如centos默认可用。在ubuntu中不可
- 启动keepalived;
- 检查两台机器
ip a | grep 【Vip】 查看是谁接管了Vip; - 尝试对检测脚本的条件触发,查看是否“ip飘走”。
二、LVS
keepalived提供Vrrp虚拟ip(Vip),并作为调度服务器Director Server(DS)提供请求调度。确定Vip、DS可以有多个、RS(真实服务器),请求发出的关系如下:
客户端
VIP
DS1
DS2
RS1
RS2
RS...
当然DS可以部署于RS上
S2
S1
DS2
RS2
DS1
RS1
客户端
VIP
这样,既确保了LVS的多点互备也确保了服务多点均衡。 但是需要注意的是,上图仅限访问时的数据包传递,服务器响应数据时并非如此,是服务器直接在局域网内直接返回数据包,不经过DS。
(1)部署
- 真实服务器需要配置lo:0接口,并抑制arp响应。
VIP=【写VIP】
cat << EOF > /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=$VIP
NETMASK=255.255.255.255
ONBOOT=yes
EOF
cat << EOF > /etc/sysconfig/static-routes
any host $VIP dev lo:0
EOF
systemctl restart network
cat << EOF >> /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.【网卡名】.arp_ignore=1
net.ipv4.conf.【网卡名】.arp_announce=2
EOF
sysctl -p
如果是ubuntu,可以设置开机启动的网络配置脚本cat /etc/profile.d/at_restart.sh
ifconfig lo:0 【vip】 netmask 255.255.255.255 broadcast 【vip】
- 在作为DS服务器上安装keepalived(同上)
(2)配置
global_defs {
router_id 【本机hostname】
}
vrrp_instance VI_1 {
state BACKUP【非抢占都backup,抢占Master/backup】
interface ens192【参与vrrp的本机网卡】
virtual_router_id 93
priority 100
nopreempt【非抢占必配】
authentication {
auth_type PASS
auth_pass 123456【路由号验证】
}
virtual_ipaddress {
【VIP】
}
}
virtual_server 【VIP】 【port】 {
delay_loop 3
lb_algo lc
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 【server1】 【port】 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 【port】
}
}
real_server 【server2】 【port】 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 【port】
}
}
}
注意事项:
- 网络服务重启后keepalived也需要重启。
persistence_timeout 0 会话保持,某ip在这个时间段内全部发到同一个真实服务器,在压测时需要特别关注。- 查看数据转发情况
ipvsadm -l --stats 或ipvsadm -L -n -c - 均衡算法
lb_algo lc 解释:
- rr 轮叫调度(Round Robin),这种算法是最简单的,不管RS的后端配置和处理能力,均衡的分发下去
- wrr 加权轮叫(Weight Round Robin),比上面的算法多了一个权重的概念,可以给RS设置权重,权重越高,那么分发的请求数越多,权重取值范围0-100
- LC最少链接(least connection),这个算法会根据后端的RS的连接数来决定把请求发给谁,比如RS1连接数比RS2连接数少,那么请求优先发给RS1
- WLC 加权最少链接(Weighted Least Connecttion)比最少链接算法多了一个权重
- Dh 目的地址哈希调度(destination hashing)以目的地址为关键字查找一个静态hash表来获得需要的RS
- SH 源地址哈希调度(source hashing)以源地址为关键字查找一个静态hash表来获得需要的RS
- lblc 最小连接数调度(least-connection),IPVS表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS
|