一.LVS负载均衡
1. LVS简介
- LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如图1所示,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。最后根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到终端用户,LVS工作模式分为NAT模式、TUN模式、FULLNAT模式以及DR模式。
2.基于DR的LVS负载均衡
在LVS(TUN)模式下,由于需要在LVS调度器与真实服务器之间创建隧道连接,这同样会增加服务器的负担。与LVS(TUN)类似,DR模式也叫直接路由模式,其体系结构如图4所示,该模式中LVS依然仅承担数据的入站请求以及根据算法选出合理的真实服务器,最终由后端真实服务器负责将响应数据包发送返回给客户端。与隧道模式不同的是,直接路由模式(DR模式)要求调度器与后端服务器必须在同一个局域网内,VIP地址需要在调度器与后端所有的服务器间共享,因为最终的真实服务器给客户端回应数据包时需要设置源IP为VIP地址,目标IP为客户端IP,这样客户端访问的是调度器的VIP地址,回应的源地址也依然是该VIP地址(真实服务器上的VIP),客户端是感觉不到后端服务器存在的。由于多台计算机都设置了同样一个VIP地址,所以在直接路由模式中要求调度器的VIP地址是对外可见的,客户端需要将请求数据包发送到调度器主机,而所有的真实服务器的VIP地址必须配置在Non-ARP的网络设备上,也就是该网络设备并不会向外广播自己的MAC及对应的IP地址,真实服务器的VIP对外界是不可见的,但真实服务器却可以接受目标地址VIP的网络请求,并在回应数据包时将源地址设置为该VIP地址。调度器根据算法在选出真实服务器后,在不修改数据报文的情况下,将数据帧的MAC地址修改为选出的真实服务器的MAC地址,通过交换机将该数据帧发给真实服务器。整个过程中,真实服务器的VIP不需要对外界可见 
DR知识点:
ipvsadm:
- ipvs与iptables优先级,iptables优先级最高
- 内核里用netfiter
- firewall 企业8使用 门槛低
- netfiter----ipvs iptables----firewalld
- iptables允许:80进入 ipvs 进行执行设置好lvs策略
二.ipvsadm实现Apache负载均衡横
实现基本负载均衡需要三台虚拟机,server1作为转换端,server2/3提供Apache服务
- server1:172.25.3.1
- server2:172.25.3.2
- server3:172.25.3.3
- vip:172.25.3.100
server1:
yum install -y ipvsadm
ip addr add 172.25.3.100/24 dev eth0
ipvsadm -A -t 172.25.3.100:80 -s rr
ipvsadm -a -t 172.25.3.100:80 -r 172.25.3.2:80 -g
ipvsadm -a -t 172.25.3.100:80 -r 172.25.3.3:80 -g
ipvsadm -ln
 server1 MAC地址及ip: 
server2/3配置: 二者配置一致,ip分别为2/3
yum install -y httpd
systemctl start httpd.service
echo server2 > /var/www/html/index.html

添加vip:
ip addr add 172.25.3.100/24 dev eth0
ip addr
 测试负载均衡: for i in {1…10};do curl 172.25.3.100;done
 测试达到效果,连接到的100 ip对应也是server1的MAC地址,但如果将 访问的删除,ping通100,将得到server3的MAC地址,此时将绕过server1,直接获取server3信息,不满足负载均衡的定义。 删除地址:  获取server3 MAC:  访问100: 
因此,我们需要配置ip隐藏策略,即设置不可以通过vip 172.25.3.100直接访问server2/3,又能保证提供server2/3服务。 配置ip隐藏策略:
yum install -y arptables.x86_64
arptables -A INPUT -d 172.25.3.100 -j DROP
arptables -A OUTPUT -s 172.25.3.100 -j mangle --mangle-ip-s 172.25.3.2
arptables-save
arptables-save > /etc/sysconfig/arptables
systemctl restart arptables.service
arptables -nL


测试:
成功 
三.keepalive实现DR模式故障检测
之前简介中,讲述过DR模式的缺点是无法发现客户端故障,依旧按照LVS策略进行访问客户端,出现connection reject 问题,本节将通过keepalive实现故障检测。
首先,删除server1之前的3.100的配置,server2/3配置不变
ip addr del 172.25.3.100/24 dev eth0
ipvsadm -C
ipvsadm -ln

安装mail用于接受故障邮件: 
安装及配置keepalive:
cd /etc/keepalived/
vim keepalived.conf
systemctl start keepalived.service
 配置内容:
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 3
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.3.100
}
}
virtual_server 172.25.3.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
protocol TCP
real_server 172.25.3.2 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.25.3.3 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
测试: 正常状态
vip自动生成:  查看ipvsadn: 
for i in {1..10};do curl 172.25.3.100;done

stop server2:
systemctl stop httpd
 
错误邮件信息:
[root@server1 keepalived]
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/root": 1 message 1 new
>N 1 keepalived@localhost Sat Jul 10 03:13 17/634 "[LVS_DEVEL] Realserve"
>& 1
>Message 1:
>From keepalived@localhost.localdomain Sat Jul 10 03:13:22 2021
>Return-Path: <keepalived@localhost.localdomain>
>X-Original-To: root@localhost
>Delivered-To: root@localhost.localdomain
>Date: Sat, 10 Jul 2021 03:13:22 -0400
>From: keepalived@localhost.localdomain
>Subject: [LVS_DEVEL] Realserver [172.25.3.2]:80 - DOWN
>X-Mailer: Keepalived
>To: root@localhost.localdomain
>Status: R
四.keepalive实现LVS高可用
由于server1为LVS策略服务提供者,当server1宕机时候,将导致访问及负载均衡都无法进行,因此需要采用高可用方式,双机热备确保LVS稳定性。
高可用描述:配置一台BACKUP 端server4,具备与server1相同LVS策略配置,当server1出现故障宕机时,将vip转移至server4,并切换server4为MASTER,继续提供服务。当server1恢复正常,再将vip及MASTER转移至server1(server1优先级大于server4)
配置新虚拟机server4:172.25.3.4
安装keepalived、ipvsadm
修改配置文件 backup、priority
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 3
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.3.100
}
}
启动服务 

当lvs宕机,vip进行漂移,backup转为master
systemctl stop keepalived
vip 已经不在server1上  server4日志查看身份转换:
 vip漂移至server4: 
此时负载均衡依旧有效,但访问的mac地址转为server4地址


重启server1,MAC转为server1地址,说明MASTER又切换为server1:
ststemctl start keepalived

|