目前LVS已经被集成到Linux内核模块中。LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器,该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。最后根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到终端用户,LVS工作模式分为NAT模式、TUN模式、以及DR模式。
(1)环境搭建:client --> DR -->RS --client
LVS无需安装
安装的是管理工具,第一种叫ipvsadm,第二种叫keepalive
ipvsadm是通过命令行管理,而keepalive读取配置文件管理
主机名 | 主机IP | 备注 |
server1 | 172.25.1.1 | 1.这里使用的是redhat7.6系统 2.防火墙和selinux都关闭 3.server2、3的作为RS机子http访问结果为主机名 4.server1 作为DR机 下载ipvsam 5.server1 添加虚拟ip地址(VIP) 172.25.1.100 |
server2 | 172.25.1.2 | |
server3 | 172.25.1.3 | |
server4 | 172.25.1.4 |
yum install ipvsadm -y
(3) 在server1 eth0网卡绑定VIP地址(高可用)
ip addr add 172.25.1.100/24 dev eth0
(4) 添加虚拟服务以及将其关联到真实服务器上去
ipvsadm -A -t 172.25.1.100:80 -s rr # 添加虚拟服务
ipvsadm -a -t 172.25.1.100:80 -r 172.25.1.2:80 -g #将虚拟服务关联到真实服务上
ipvsadm -a -t 172.25.1.100:80 -r 172.25.1.3:80 -g
#LVS默认无80端口,需另外添加新的虚拟IP记录
(5) 查看配置结果
(6)web服务器配置
给两台服务器上的网卡绑定VIP地址
[root@server2 ~]# ip addr add 172.25.1.100/32 dev eth0
[root@server3 ~]# ip addr add 172.25.1.100/32 dev eth0
抑制ARP响应(noarp)
作用使得
yum install arptables.x86_64 -y
[root@server2 html]# arptables -A INPUT -d 172.25.1.100 -j DROP
[root@server2 html]# arptables -A OUTPUT -s 172.25.1.100 -j mangle --mangle-ip-s 172.25.1.2
[root@server3 html]# arptables -A INPUT -d 172.25.1.100 -j DROP
[root@server3 html]# arptables -A OUTPUT -s 172.25.1.100 -j mangle --mangle-ip-s 172.25.1.3
查看策略
实验效果:实现负载均衡
arp解析查看
arp详解
01.ARP协议,全称"Address Resolut ion Protocol",中文名是地址解析协议,使用ARP协议可实现通过IP地址获得对应主机的物理地址(MAC地址)
ARP协议要求通信的主机双方必须在同一个物理网段(即局域网环境)!
02.为了提高IP转换MAC的效率,系统会将解析结果保存下来,这个结果叫做ARP缓存
DR直接路由模式
client --> DR -->RS --client
DR模式是通过改写请求报文的目标MAC地址,将请求发送给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。
DR技术可极大地提高集群系统的伸缩性,但要求调度器与真实服务器RS都有一块物理网卡连在同一物理网段上,即必须在同一局域网(VLAN)环境。
NAT模式
client --> vs --> rs --> vs --> client
通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器,真实服务器的响应报文处理之后,返回时必须通过调度器,经过调度器时报文的源地址被重写,再返回给客户,完成整个副在调度过程。
TUN 工作模式(隧道工作模式)
客户请求包封装在一个IP tunnel里面,然后发送给RS节点服务器,节点服务器接收到之后解开IP tunnel后,进行响应处理。并且直接把包通过自己的外网地址发送给客户不用经过LB服务器
不足:
1、RS配置复杂(IPIP模块)
2、RS上绑定VIP,风险比较大
FULLNAT(系统不自带)
LVS的DR和NAT模式要求RS和LVS在同一VLAN 中,导致部署成本过高,TUNNEL模式虽然可以跨vlan,但RealServer 上需要部署ipip隧道模块等,网络拓扑上需要连通外网,教为复杂,不易运维,
为解决上述问题,开发出FULLNAT,该模式和NAT模式的区别是:数据包进入时,除了做DNAT,还做SNAT(用户ip-->内网ip),从而实现lvs-真实服务器之间可以跨vlan通讯,真实服务器需要连接内网。类似于地铁站多个闸机。
Keepalived 一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。
(1)在server1和server4上安装Keepalive
[root@server1 ~]# yum install keepalived -y
[root@server4 ~]# yum install ipvsadm keepalived -y
(2)编写keepalived.conf配置文件
server1
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalive@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.1.100
}
}
virtual_server 172.25.1.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
#persistence_timeout 50
protocol TCP
real_server 172.25.1.2 80 {
weight 1
TCP_CHECK{
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.25.1.3 80 {
weight 1
TCP_CHECK{
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
server4
(3)开启keepalived服务
systemctl start keepalived.service
查看vip
查看LVS状态
keepalive健康检查功能
delay_loop 隔多长时间做一次健康检测,单位为秒
connect_timeout 连接超时时间,单位为秒
nb_get_retry 检测失败后的重试次数,如果达到重试次数仍然失败,将后端从服务器池中移除。
delay_before_retry 失败重试的间隔时间,单位为秒
测试:
注意:因为虚拟的ip重启之后就会失效,故须加入开机启动项rc.local文件并赋予其可执行权限