Keepalive + Lvs 实现高可用负载均衡

文章目录

    • 一、lvs 的四种工作模式
      • DR 工作模式
      • NAT 工作模式
      • TUN 工作模式(隧道工作模式)
      • FULLNAT 工作模式(不是系统自带)
    • 二、关于实现httpd的负载均衡
    • 三、keepalive + lvs


实验环境:
封装一台版本为redhat7.6的操作系统,配置好yum源(通过宿主机的httpd服务,搭建网络仓库),本地解析,关闭防火墙以及selinux,再清理过滤和压缩后克隆域名分别为vm1、vm2、vm3、vm4, 主机名分别为server11、server12、server13、server14的四台虚拟机。
给四台主机分别配置好各自的ip地址使互相可以ping通。

4层负载平衡:

将网络流量负载平衡到多个服务器的最简单方法是使用第4层(传输层)负载平衡。以这种方式进行负载均衡将根据IP范围和端口转发用户流量
用户访问负载均衡器,负载均衡器将用户的请求转发给后端服务器的Web后端组。无论选择哪个后端服务器,都将直接响应用户的请求。通常,Web后端中的所有服务器应该提供相同的内容 - 否则用户可能会收到不一致的内容。

一、lvs 的四种工作模式

  • DR 工作模式

当用户访问lvs调度器(vs)上的vip时,是通过修改请求报文的目标mac地址,在数据链路层通过调度算法将请求转发给真实服务器(rs),而真实服务器响应后的处理结果直接返回给客户端用户;所以说,vs 和rs 要都有vip,只是用arptables 处理了rs在数据链路层arp转发。由于必须处于同一vlan下,受到了局限性,但是其工作效率很高。client --> vs --> rs --> client
DR的不足:LVS - RS 间必须在同一个VLAN
RS上绑定VIP,风险太大

  • NAT 工作模式

通过网络地址转换的方法来实现调度的。首先调度器(LB)接收到客户的请求数据包时(请求的目的IP为VIP),根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后调度就把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP),这样真实服务器(RS)就能够接收到客户的请求数据包了。真实服务器响应完请求后,查看默认路由(NAT模式下我们需要把RS的默认路由设置为LB服务器。)把响应后的数据包发送给LB,LB再接收到响应包后,把包的源地址改成虚拟地址(VIP)然后发送回给客户端。client --> vs --> rs --> vs --> client
相当于数据流进入到VS时,做了一次DNAT,从VS出去的时候做了一次DNAT
NAT 不足: RS/ROUTER 要配置策略路由

  • TUN 工作模式(隧道工作模式)

客户请求包封装在一个IP tunnel里面,然后发送给RS节点服务器,节点服务器接收到之后解开IP tunnel后,进行响应处理。并且直接把包通过自己的外网地址发送给客户不用经过LB服务器
TUN不足:RS配置复杂(IPIP模块),RS上绑定VIP,风险比较大

  • FULLNAT 工作模式(不是系统自带)

引入local address(内网ip地址),cip-vip转换为lip->rip,而 lip和rip均为IDC内网ip,可以跨vlan通讯

LVS在大规模网络中应用存在不足
各转发模式,网络拓扑复杂,运维成本高
和商用LB设备相比
缺少TCP标志位DDOS攻击防御
主备部署方式不足
性能无法线性扩展

二、关于实现httpd的负载均衡

【利用DR工作模式和轮询调度算法实现】

调度器:
yum install -y ipvsadm | 安装lvs管理器

ipvsadm -A -t 172.25.0.100:80 -s rr | 添加虚拟IP,‘rr’ 轮询调度算法
ipvsadm -a -t 172.25.0.100:80 -r 172.25.0.12:80 -g ipvsadm -a -t 172.25.0.100:80 -r 172.25.0.13:80 -g | 添加虚拟IP的rs服务器
ipvsadm -ln | 查看lvs 调度器
Keepalive + Lvs 实现高可用负载均衡_第1张图片
rs端:
server12和server13上开启httpd服务
为观察方便 把测试页写成各自的主机名
并添加虚拟ip 172.25.0.100,

访问测试:
curl 172.25.0.100来测试
访问到的测试页为两台机子轮询,实现了负载均衡
Keepalive + Lvs 实现高可用负载均衡_第2张图片
arp -an | grep 100可以查看收到arp报文对应的mac地址
Keepalive + Lvs 实现高可用负载均衡_第3张图片
arp -d 172.25.3.100 | 删除指定ip的arp缓存

但这样不是很安全,因为server12和13他们同样有虚拟ip,宿主机访问虚拟ip时也可能会被这两台机子抢去而访问它,这就会使调度器无用,为了避免这类问题,我们给两台rs服务器添加相应的规则来使他们的虚拟IP不被直接访问。

rs服务器端:
yum install arptables -y| 安装arp防火墙
systemctl start arptables| 开启服务
添加arptables访问规则
Keepalive + Lvs 实现高可用负载均衡_第4张图片Keepalive + Lvs 实现高可用负载均衡_第5张图片
访问测试:
这样在测试时就不会直接访问到以172.25.0.100为ip的server12 和server13,只会先访问调度器,通过调度器的设定来访问rs服务器
Keepalive + Lvs 实现高可用负载均衡_第6张图片

三、keepalive + lvs

针对若rs服务器出现故障或者调度器单点故障等问题,keepalive很好的解决了相应的问题,健康检查和失败切换(LVS冗余)是keepalived的两大核心功能。利用keepalive中的vrrp协议实现高可用解决单点故障,TCP_CHECK实现对后端rs进行健康检测。

keepalive服务会自动添加虚拟ip和编写ipvsadm规则,所以可以把之前添加过的删掉。

在server11和server14上
yum install keepalive -y
修改server11配置文件,让server11做主用机
Keepalive + Lvs 实现高可用负载均衡_第7张图片
Keepalive + Lvs 实现高可用负载均衡_第8张图片
启动keepalive自动生成规则
Keepalive + Lvs 实现高可用负载均衡_第9张图片
备用主机(server14):
其他与主用机的内容一样,只需改它的状态和优先级
Keepalive + Lvs 实现高可用负载均衡_第10张图片
启动服务

访问测试:
Keepalive + Lvs 实现高可用负载均衡_第11张图片

当server2的keepalive停止之后,vip会自动漂移到server1上,不会影响客户端对后端服务器的访问
Keepalive + Lvs 实现高可用负载均衡_第12张图片

但是设置成主备机时,当server2的keepalive重新启动时,会抢占资源。
Keepalive + Lvs 实现高可用负载均衡_第13张图片
若不想被抢占,则可修改server11主用机的配置文件,当重启服务时,vip 就不会从server14自动漂移到server11上
Keepalive + Lvs 实现高可用负载均衡_第14张图片

  • GET

你可能感兴趣的:(企业实战,lvs,linux,运维)