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的负载均衡
1.利用DR工作模式和轮询调度算法实现
调度器:
yum install -y ipvsadm
##安装lvs管理器
给网卡添加一个再添加一个vip
ip addr add 172.25.19.100/24 dev eth0
添加虚拟服务,当外部访问到vip时会直接lvs
ipvsadm -A -t 172.25.19.100:80 -s rr ## 添加虚拟一个虚拟服务IP,-s是调度算法‘rr’ 轮询调度算法
ipvsadm -a -t 172.25.19.100:80 -r 172.25.19.2:80 -g
ipvsadm -a -t 172.25.19.100:80 -r 172.25.19.3:80 -g ## 添加虚拟IP的rs服务器
ipvsadm -ln ##查看lvs 调度器是否添加成功
rs端:
server2和server3上开启httpd服务
为观察方便 把测试页写成各自的主机名
echo server2 > /var/www/html/index.html
并添加虚拟ip 172.25.19.100,
ip addr add 172.25.19.100/24 dev eth0
通过真实主机进行访问测试:
curl 172.25.19.100
来测试
访问到的测试页为两台机子轮询,实现了负载均衡
用arp -an | grep 100
可以查看收到arp报文对应的mac地址
arp -d 172.25.19.100
##删除指定ip的arp缓存
但这种存在问题,这样不是很安全,因为server2和3他们同样有虚拟ip,宿主机访问虚拟ip时也可能会被这两台机子抢去而访问它,这就会使调度器无用,为了避免这类问题,我们给两台rs服务器添加相应的规则来使他们的虚拟IP不被直接访问。
通过内核禁止或者通过arp防火墙来实现。
在两台rs服务器端都安装并屏蔽:
yum install arptables -y
##安装arp防火墙
systemctl start arptables
## 开启服务
添加arptables访问规则
arptables -A INPUT -d 172.25.19.100 -j DROP ##把目的地址到100的禁止掉
arptables -A OUTPUT -s 172.25.19.100 -j mangle --mangle-ip-s 172.25.19.3 ## 把源地址为100伪装成本机
访问测试:
这样在测试时就不会直接访问到以172.25.19.100为ip的server2 和server3,只会先访问调度器,通过调度器的设定来访问rs服务器
lvs的优先级要高于本地服务 可以将arp包策略保存到本机
arp-ethers.servic ``` ipvsadm策略保存到本机 ```bash ipvsadm-save -n > /etc/sysconfig/ipvsadm ipvsadm -C ##s刷掉策略
三、keepalive + lvs高可用
针对若rs服务器出现故障或者调度器单点故障等问题,keepalive很好的解决了相应的问题,健康检查和失败切换(LVS冗余)是keepalived的两大核心功能。利用keepalive中的vrrp协议实现高可用解决单点故障,TCP_CHECK实现对后端rs进行健康检测。
1) lvs 高可用master
在server1和server4上安装keepalived
yum install keepalived -y
修改server1配置文件,让server1做主用机
[root@server1 ~]# cd /etc/keepalived/
[root@server1 keepalived]# ls
keepalived.conf
[root@server1 keepalived]# vim keepalived.conf
添加rs规则,
健康监测次数
调度算法
持久连接,
后面的内容都删除
删除掉之前DR模式下的添加的vip,清除ipvsadm的设置的规则,启动keepalived
[root@server1 keepalived]# ip addr del 172.25.19.100/24 dev eth0
[root@server1 keepalived]# ipvsadm -C
启动keepalive自动生成规则,可以看到由keepalive添加的vip,keepalive服务会自动添加虚拟ip和编写ipvsadm规则,所以可以把之前添加过的删掉。
2) lvs 高可用backup
备用主机(server4):
其他与主用机的内容一样,只需改它的状态和优先级,所以拷贝1的文件过来即可
启动服务
[root@server4 keepalived]# systemctl start keepalived.service
访问测试:
当server1的keepalive停止之后,vip会自动漂移到server4上,不会影响客户端对后端服务器的访问
但是设置成主备机时,当server1的keepalive重新启动时,会抢占资源。
若不想被抢占,则可修改server1主用机的配置文件,当重启服务时,vip 就不会从server4自动漂移到server1上