keepalived+lvs+DR模式高可用负载均衡模式

keepalived+lvs+DR模式高可用负载均衡模式

简要介绍:
1、keepalived
为LVS而设计,弥补LVS不带健康检测功能的问题,keepalived能检测每个服务器节点状态,假设服务器节点异常或工作出现故障,那么Keepalived将故障点从集群系统中剔除。当故障点恢复后,Keepalived再将其加入到集群系统中
Keepalived 亮点:
可实现VRRP虚拟路由深度解决代理服务器故障自动切换
可以自动配置LVS完美整合Keepalived+lvs功能
Keepalived解决了lvs不带健康检查功能,可实现自动剔除集群故障机器,恢复自动添加

2、lvs,即为Linux虚拟服务器
开源的负载分担项目,以集成到Linux内核模块中,将接收到的请求数据通过对应的算法转发至合适的后端服务器,从而达到一个分担响应的目的,且有三种模式:NAT(地址转换模式)、TUN(隧道模式)、DR(直路由模式)

NAT(地址转换模式):

  • 其作用是通过数据报头的修改,使得位于企业内部的私有IP地址可以访问外网,以及外部用用户可以访问位于公司内部的私有IP主机
  • 缺点:如果后端服务器的数量大于10台,而数据的收发又都需要经过LVS调度器,那么调度器就会成为整个集群环境的瓶颈

DR(直路由模式):

  • DR模式中,LVS调度器将只接收数据,而RS收到报文时,处理后直接返回给客户端,而不需要经过调度器的DIP的转发,性能大大提升。大致过程如下:客户端请求到达lvs调度器时,lvs调度器会根据算法将该请求的目的MAC地址改为对于RS的MAC,并发布ARP广播,但是后端的RS收到DIP的ARP,发现这个包上面的IP地址并不是我的,于是会不理这个ARP。所以大家都得配置VIP,但因为处于二层环境下,默认大家都会回应,所以就必须抑制除调度器以外的VIP避免进行ARP回应,再让调度器来分配任务,这样就解决了多个VIP的问题。RS收到报文,处理后直接返回给后端
  • 缺点:因为请求到达DIP时候,由于DIP向RIP转发需要通过MAC,需要二层协议,因此就必须将DIP和RIP放在同一局域网内
  • 特点:性能高

TUN(隧道模式):

  • 数据请求包往往远小于响应数据包的大小。所以TUN模式的思路就是将请求与响应数据分离,让调度器仅处理数据请求,而让真实服务器响应数据包直接返回给客户端。通过IP隧道将源数据进行封装并添加新的包头(内容包括新的源地址及端口、目标地址及端口),从而实现将一个目标为调度器的VIP地址的数据包封装,通过隧道转发给后端的真实服务器,通过将客户端发往调度器的原始数据包封装,并在其基础上添加新的数据包头(修改目标地址为调度器选择出来的真实服务器的IP地址及对应端口),TUN模式要求真实服务器可以直接与外部网络连接,真实服务器在收到请求数据包后直接给客户端主机响应数据
  • 缺点:由于需要在LVS调度器与真实服务器之间创建隧道连接,这同样会增加服务器的负担
  • 特点:是解决真实服务器在不同的局域网当中的最佳方案

术语解释:
cip表示客户端ip(client ip)
vip表示lvs监听的端口(vitrual ip)
dip表示lvs的调度ip(director ip)
rip表示后端的rs的ip(real server ip)(rs=真实服务器)

实验目标:基于5台服务器部署keepalived+lvs DR模式架构(前端带路由)负载均衡的 高可用集群(拓扑如下)
keepalived+lvs+DR模式高可用负载均衡模式_第1张图片
3、客户端配置:

# 客户端网卡配置: 
cat /etc/sysconfig/network-scripts/ifcfg-ens33 
TYPE="Ethernet" 
BOOTPROTO="none" 
DEVICE="ens33" 
ONBOOT="yes" 
# 网关设置为路由器外网IP: 
IPADDR=10.0.0.1
PREFIX=24 
GATEWAY=10.0.0.254
route -n	#重启网卡后查看路由

3.1、路由器配置:

## 路由器配置:(提前准备至两块网卡)
# 外网卡:cat /etc/sysconfig/network-scripts/ifcfg-ens33 
TYPE="Ethernet" 
BOOTPROTO="none" 
DEVICE="ens33" 
ONBOOT="yes" 
# 桥接模式的默认网关: 
IPADDR=10.0.0.254
PREFIX=24

# 内网卡:cat /etc/sysconfig/network-scripts/ifcfg-ens34 
TYPE="Ethernet" 
BOOTPROTO="none" 
DEVICE="ens34" 
ONBOOT="yes" 
# 网关设置为路由器外网IP: 
IPADDR=192.168.146.254
PREFIX=24 

# 开启内核路由功能
通过命令sysctl -a | grep ip_forward 
若出现net.ipv4.ip_forward = 1 则内核路由功能已开启
否则需要配置文件vim /etc/sysctl.conf,将其值设为1
最后用sysctl -p查看

# 打开防火墙伪装,将此变成路由器
firewall-cmd --add-masquerade

4、LVS配置:

# 配置DIP: 
cat > /etc/sysconfig/network-scripts/ifcfg-ens33 <TYPE="Ethernet" 
BOOTPROTO="none" 
DEVICE="ens32" 
ONBOOT="yes" 
IPADDR=192.168.146.131
PREFIX=24
GATEWAY=192.168.146.254
EOF
# 配置VIP:
cat > /etc/sysconfig/network-scripts/ifcfg-ens33:1 <TYPE="Ethernet" 
BOOTPROTO="none" 
DEVICE="ens33:1" 
ONBOOT="yes" 
IPADDR=192.168.146.50
PREFIX=24
EOF

### 安装并配置LVS: (ipvsadm参数详解参考文章最下方)
yum -y install ipvsadm
ipvsadm -A -t 192.168.146.50:80 -s rr
ipvsadm -a -t 192.168.146.50:80 -r 192.168.146.140
ipvsadm -a -t 192.168.146.50:80 -r 192.168.146.141

4.1、RS后端真实服务器配置:

## 配置后端的VIP: 
cat > /etc/sysconfig/network-scripts/ifcfg-lo:1 <.168.146.50
NETMASK=255.255.255.255
ONBOOT="yes"
NAME="loopback"
EOF

## 配置后端服务的RIP:
cat > /etc/sysconfig/network-scripts/ifcfg-ens33 <TYPE="Ethernet"
BOOTPROTO="none"
DEVICE="ens33" 
ONBOOT="yes"
IPADDR=192.168.146.140
NETMASK=255.255.255.0
GATEWAY=192.168.146.254
EOF 

# 抑制arp: 
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 

# 部署nginx: 
yum -y install nginx  
echo "this is 146.140 page" > /usr/share/nginx/html/index.html 
echo "this is 146.141 page" > /usr/share/nginx/html/index.html
systemctl start nginx

4.2、CIP访问测试:

[root@Client ~]# curl 192.168.72.129 
this is 146.140 page 
[root@Client ~]# curl 192.168.72.129 
this is 146.141 page

ipvsadm语法参数详细解释:

ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p[timeout]] 
-A --add-service #在内核的虚拟服务器表中添加一条新的虚拟服务器记录。 
-E --edit-service #编辑内核虚拟服务器表中的一条虚拟服务器记录。 
-t --tcp-service #虚拟服务器提供的是tcp的服务 
-u --udp-service #虚拟服务器提供的是udp的服务 
-f --fwmark-service fwmark #经过iptables标记过的服务类型virutal-service-address:port #vip:port 
-s --scheduler #调度算法,rr|wrr|sh|dh|lc|wlc|lblc|lblcr,默认的调度算法是:wlc 
[---------------------
    静态方式调度: 
    rr: 轮询 
    wrr: 加权轮询 
    sh: 源地址hash,将来自同一个IP地址的请求始终发往第一次处理的real-server,实现会话绑定 
    dh: 目标地址hash,将发往同一个目标地址的请求始终转发至第一次处理的real-server,一般用于正向代理缓存的负载均衡。
    
    动态方式调度:会根据每个real-server的负载情况及调度算法进行调度,overhead值较小的real-server将被调度。 
    lc: 调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上,overhead=activeconns*256+inactiveconns 
    wlc: 加权的lc,也是默认调用方式,overhead=(activeconns*256+inactiveconns)/weight
----------------------]
-p [timeout] #同一个客户的多次请求,将被同一台真实的服务器处理。 
timeout的默认值为120秒

你可能感兴趣的:(lvs,负载均衡)