一、概念
1.LVS:四层负载均衡
常用的负载均衡分为:
1) 开源软件负载均衡: Nginx, LVS, Haproxy (Nginx和Haproxy通常做七层负载均衡, LVS做四层负载均衡. 但是Nginx也可以通过stream模块做四层负载均衡, Haproxy也可以做四层负载均衡 ) ;
2) 商业的硬件负载均衡: 设备F5、Netscale ;
简单理解一下软件负载均衡:
1) 所谓分层的负载均衡,都是以网络的模型来说的。四层就是基于IP和端口的负载均衡,七层就是基于URL等应用信息的负载均衡。所以简单的说四层负载均衡就是通过IP和端口接收请求再分发至真实的服务器,七层是通过URL或主机名接收请求,然后分发至真实的服务器。
2) .而七层的实现也是在四层的基础上是实现的,没有四层就不可能有七层。在第七层上可以做许多事情,比如可以根据七层的浏览器类别区分是手机还是PC,将WEB服务器分为2组,手机登陆专门的移动端网站。
3) 对客户端来说,客户端好像是访问的同一台主机。其实为了有更好的用户体验,从智能DNS入手,根据客户端IP来源将域名解析到距离客户端最近的一台服务器或者访问最快速的一台服务器,但这些内容客户端都是感觉不到的,客户端感觉到的只能是访问网站很快。
2.keepalived:
https://blog.csdn.net/weixin_44655167/article/details/103296043
它的主要功能是实现真实机的故障隔离及负载均衡器间的失败切换,提高系统的可用性
Keepalived工作原理:keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议:可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。
3.nginx:
二、配置详解
1.Keepalived工作方式:抢占式、非抢占式
抢占式:
抢占模式为当keepalived的某台机器挂了之后VIP漂移到了备节点,当主节点恢复后主动将VIP再次抢回,keepalived默认工作在抢占模式下。
主节点MASTER,备节点BACKUP
master配置
vrrp_instance VI_1 {
state MASTER #角色是master
priority 100 #优先级,谁的优先级高谁就是master
advert_int 1 #心跳间隔时间
virtual_router_id 1 #让master 和backup在同一个虚拟路由里,id 号必须相同;
interface eth0 #vip 绑定端口
authentication{
auth_type PASS #认证
auth_pass abcd@hehe #密码
}
virtual_ipaddress{
100.92.2.110 #虚拟ip
}
}
backup配置
vrrp_instance VI_1 {
state BACKUP #角色是master
priority 50 #优先级,谁的优先级高谁就是master
advert_int 1 #心跳间隔时间
virtual_router_id 1 #让master 和backup在同一个虚拟路由里,id 号必须相同;
interface eth0 #vip 绑定端口
authentication{
auth_type PASS #认证
auth_pass abcd@hehe #密码
}
virtual_ipaddress{
100.92.2.110 #虚拟ip
}
}
非抢占式:没有主从之分,全部为backup,配置文件中增加nopreempt
vrrp_instance VI_1 {
state BACKUP
nopreempt #不抢占
priority 100
advert_int 1
virtual_router_id 1
interface eth0
authentication{
auth_type PASS
auth_pass abcd@hehe
}
virtual_ipaddress{
100.92.2.110
}
}
重点:
1、两个节点的state都必须配置为BACKUP
2、两个节点都必须加上配置 nopreempt
3、其中一个节点的优先级必须要高于另外一个节点的优先级。
总结:抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP。
设置负载均衡
# 定义对外提供的LVS的VIP以及port
virtual_server 10.229.31.28 8805 {
delay_loop 6 #健康时间检查,单位秒
lb_algo rr #负载均衡调度算法wlc|rr,和您将使用的LVS的调度算法保持原则一致
lb_kind DR #负载均衡转发规则 DR NAT TUN。和您将启动的LVS的工作模式设置一致
nat_mask 255.255.255.0 #虚拟地址的子网掩码
#persistence_timeout 50 #会话保持时间,因为我们经常使用的是无状态的集群架构,所以这个设置可有可无
protocol TCP #转发协议,当然是TCP
#真实的下层Nginx节点的健康监测
real_server 192.168.220.131 80 {
#节点权重,
weight 10
#设置检查方式,可以设置HTTP_GET | SSL_GET
HTTP_GET {
url {
path /
digest ff20ad2481f97b1754ef3e12ecd3a9cc
}
#超时时间,秒。如果在这个时间内没有返回,则说明一次监测失败
connect_timeout 3
#设置多少次监测失败,就认为这个真实节点死掉了
nb_get_retry 3
#重试间隔
delay_before_retry 3
}
}
real_server 192.168.220.132 80 {
weight 10
HTTP_GET {
url {
path /
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}