LVS负载均衡与Keepalive高可用负载均衡

  • 一、LVS介绍
  • 二、LVS的三种工作模式
    • 1、NAT模式
    • 2、TUN模式
    • 3、DR模式
  • 三、ipvsadm实现Apache负载均衡横
  • 四、keepalive实现DR模式故障检测
  • 五、keepalive实现LVS高可用

一、LVS介绍

  • LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器,该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器。
  • 将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的。
  • LVS工作模式分为NAT模式、TUN模式、以及DR模式

二、LVS的三种工作模式

1、NAT模式

  • 通过网络地址转换的方式来实现调度

(1)首先调度器(LB)接收到客户的请求数据包时(请求的目的IP为VIP),根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。
(2)接着调度把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP),真实服务器(RS)就可以接收到客户的请求数据包了。
(3)真实服务器响应完请求后,查看默认路由(NAT模式下需要将RS的默认路由设置为LB服务器),把响应后的数据包再发送给LB。
(4)LB接收到响应包后,把包的源地址改为虚拟地址(VIP),然后再发送回客户端。

  • 整体流程:Client > VS > RS > VS > Client
  • 当数据流进入VS时,做了一次DNAT,从VS出去时做了一次DNAT

2、TUN模式

  • 隧道模式

(1)将请求与响应数据分离,让调度器仅处理数据请求,而让真实服务器响应数据包直接返回给客户端。
(2)VS/TUN工作模式拓扑结构如图所示。其中,IP隧道(IP tunning)是一种数据包封装技术,它可以将原始数据包封装并添加新的包头(内容包括新的源地址及端口、目标地址及端口),从而实现将一个目标为调度器的VIP地址的数据包封装,通过隧道转发给后端的真实服务器(Real Server),通过将客户端发往调度器的原始数据包封装,并在其基础上添加新的数据包头(修改目标地址为调度器选择出来的真实服务器的IP地址及对应端口)。

  • LVS(TUN)模式要求真实服务器可以直接与外部网络连接,真实服务器在收到请求数据包后直接给客户端主机响应数据

3、DR模式

(1)直接路由模式(DR模式)要求调度器与后端服务器必须在同一个局域网内,VIP地址需要在调度器与后端所有的服务器间共享,因为最终的真实服务器给客户端回应数据包时需要设置源IP为VIP地址,目标IP为客户端IP,这样客户端访问的是调度器的VIP地址,回应的源地址也依然是该VIP地址(真实服务器上的VIP),客户端是感觉不到后端服务器存在的。
(2)由于多台计算机都设置了同样一个VIP地址,所以在直接路由模式中要求调度器的VIP地址是对外可见的,客户端需要将请求数据包发送到调度器主机,而所有的真实服务器的VIP地址必须配置在Non-ARP的网络设备上,也就是该网络设备并不会向外广播自己的MAC及对应的IP地址,真实服务器的VIP对外界是不可见的,但真实服务器却可以接受目标地址VIP的网络请求,并在回应数据包时将源地址设置为该VIP地址。
(3)调度器根据算法在选出真实服务器后,在不修改数据报文的情况下,将数据帧的MAC地址修改为选出的真实服务器的MAC地址,通过交换机将该数据帧发给真实服务器。整个过程中,真实服务器的VIP不需要对外界可见。

  • 整体流程:Client----DR—RS–Client

三、ipvsadm实现Apache负载均衡横

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

1、调度器:
vip:172.25.24.100rr:轮询调度算法

yum install ipvsadm -y  ##安装lvs管理器
ip addr add 172.25.24.100/24 dev eth0  ##添加vip
ipvsadm -A -t 172.25.24.100:80 -s rr  ##添加虚拟服务
ipvsadm -a -t 172.25.24.100:80 -r 172.25.24.2:80 -g  ##将虚拟服务关联到真实服务上
ipvsadm -a -t 172.25.24.100:80 -r 172.25.24.3:80 -g
ipvsadm -ln  ##查看配置信息

2、真实服务端:RS端

yum install httpd -y
systemctl enable --now httpd
echo server2 > /var/www/html/index.html  ##server2主机添加访问内容
echo server3 > /var/www/html/index.html  ##server3主机添加访问内容
ip addr add 172.25.24.100/32 dev eth0  ##添加虚拟ip

3、访问

curl 172.25.24.100
for i in {1..10};do curl 172.25.24.100;done


4、查看收到arp报文对应的mac地址

arp -an | grep 100

发现与server1上的mac相同

ip addr show eth0


5、删除指定ip的arp缓存

arp -d 172.25.24.100


6、获取server3的mac

curl 172.25.24.100
arp -an | grep 100


7、再次访问时发现全部是server3的内容

  • 原因:连接100时对应的mac应该是server1的MAC地址,但如果将访问的arp删除,再次连接100时,将得到server3的MAC地址,此时将绕过server1,直接获取server3信息
for i in {1..10};do curl 172.25.24.100;done


8、所以需要配置ip隐藏策略,即设置不可以通过vip直接访问server2/3,又能保证提供server2/3服务

  • RS端:
  • 安装arp防火墙,添加arptables访问规则
yum install arptables -y
arptables -A INPUT -d 172.25.24.100 -j DROP
arptables -A OUTPUT -s 172.25.24.100 -j mangle --mangle-ip-s 172.25.24.2  ##添加策略
arptables -A OUTPUT -s 172.25.24.100 -j mangle --mangle-ip-s 172.25.24.3
arptables-save  ##查看策略
arptables-save > /etc/sysconfig/arptables  ##保存策略
systemctl restart arptables.service

arptables -nL  ##arp火墙显示


9、访问测试

  • 先访问调度器,通过调度器的设定来访问RS服务器

四、keepalive实现DR模式故障检测

  • DR模式的缺点是无法发现客户端故障

1、停止server2的http服务,访问VIP

[root@server2 ~]# systemctl stop httpd.service
[root@foundation24 mnt]# for i in {1..10};do curl 172.25.24.100;done

  • 针对RS服务器出现故障或者调度器单点故障,keepalive的健康检查和失败切换(LVS冗余)可以解决。
  • keepalive中的vrrp协议实现高可用解决单点故障,TCP_CHECK实现对后端RS的健康检测。

2、删除server1上的vip,清空ipvs配置

ip addr del 172.25.24.100/24 dev eth0
ipvsadm -C  ##清空ipvs配置
ipvsadm -ln

3、安装邮件服务接收故障邮件

yum install -y mailx.x86_64

4、安装及配置keepalive

yum install keepalived.x86_64 -y
cd /etc/keepalived/
vim keepalived.conf
cat keepalived.conf! Configuration File for keepalivedglobal_defs {notification_email {root@localhost  ##设定发送故障邮件到本机}notification_email_from keepalived@localhost  ##邮件来源smtp_server 127.0.0.1  ##发送服务器smtp_connect_timeout 30  ###指定超时连接时间router_id LVS_DEVELvrrp_skip_check_adv_addr#vrrp_strict  ##禁用此选项vrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {  ##高可用部分state MASTER  ###将server1作为主节点interface eth0virtual_router_id 75  ##此处为51+ip(本机ip为24)priority 100  ###当前主机在此虚拟路径器中的优先级;范围1-254;设置backup优先级需比master优先级低advert_int 1  ##与backup之间每隔1s监测一次authentication {  ##认证方式auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.24.100  ##设定vip}
}
virtual_server 172.25.24.100 80 {  ##ipvs配置自动生成delay_loop 6  ##每隔6秒钟对后端做一次健康检查lb_algo rr  ##设定负载均衡策略为轮询lb_kind DR  ##设定LVS工作模式为DR#persistence_timeout 50  ##50秒内同一个客户端请求将会交给同一个后端处理,为观察实验效果,将其注释protocol TCPreal_server 172.25.24.2 80 {  ##RS1weight 1  ##权重TCP_CHECK {connect_timeout 3  ##连接超时时间nb_get_retry 3  ##超时重试次数delay_before_retry 3  ##每次超时过后多久再进行连接}}real_server 172.25.24.3 80 {  ##RS2weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}



5、启动keepalive服务会自动添加VIP和编写ipvsadm规则

ipvsadm -C
ipvsadm -ln
systemctl start keepalived.service
ipvsadm -ln
ip add show eth0


6、停止server2的httpd服务,访问VIP会全部是为server3,因为有健康检测的缘故会跳过server2的故障,查看邮件可以发现故障

[root@server2 ~]# systemctl stop httpd.service
[root@foundation24 mnt]# for i in {1..10};do curl 172.25.24.100;done

  • 查看故障邮件
mail

五、keepalive实现LVS高可用

  • 由于server1为LVS策略服务提供者,当server1出现故障时,将导致访问及负载均衡都无法进行,因此采用高可用方式,双机热备确保LVS稳定性。
  • 高可用描述:
  • 配置一台BACKUP 端server4,具备与server1相同LVS策略配置,当server1出现故障时,将VIP转移至server4,并切换server4为MASTER,继续提供服务。
  • 当server1恢复正常,再将VIP及MASTER转移至server1(须设定server1优先级大于server4)

1、server4端安装keepalived,ipvsadm,将server1的配置文件复制过来,配置keepalived,启动keepalived服务

yum install keepalived -y
yum install ipvsadm -y
cd /etc/keepalived/
scp 172.25.24.1:/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
vim keepalived.conf
systemctl start keepalived.service
cat keepalived.conf  ##只显示修改的部分vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 75  ##此处为51+ip(本机ip为24)priority 50  ##设定优先级为50,小于masteradvert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.24.100  ##设定vip}
}

2、查看server4的日志,发现为BACKUP端

cat /var/log/messages | grep BACKUP


2、停止server1的keepalived服务,查看server4的日志,发现已经变为MASTER端

[root@server1 keepalived]# systemctl stop keepalived.service
cat /var/log/messages | grep MASTER


3、查看到VIP也已经转到server4上

ip addr show eth0


4、开启server2的httpd服务,测试负载均衡,发现得到的mac为server4的

[root@server2 ~]# systemctl start httpd.service
[root@foundation24 mnt]# for i in {1..10};do curl 172.25.24.100;done
[root@foundation24 mnt]# arp -an | grep 100
[root@server4 keepalived]# ip addr show eth0



5、启动server1的keepalived,查看server1和server4的日志,发现server4返回为BACKUP端

[root@server1 keepalived]# systemctl start keepalived.service
[root@server1 keepalived]# cat /var/log/messages | grep MASTER
[root@server4 keepalived]# cat /var/log/messages | grep BACKUP

LVS负载均衡与Keepalive高可用相关推荐

  1. 企业级Nginx负载均衡与keepalived高可用实战课-老男孩-专题视频课程

    企业级Nginx负载均衡与keepalived高可用实战课-2678人已学习 课程介绍         企业级Nginx负载均衡与keepalived高可用实战分享 课程收益     互联网环境最常用 ...

  2. 【LVS+Keepalived】 LVS+Keepalived实现tcp、udp负载均衡及HA高可用

    无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家.教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家.点这里可以跳转到教程. LVS 安装 下载 http: ...

  3. keepalived+nginx负载均衡+ApacheWeb实现高可用

    1.Keepalived高可用软件 Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能.因此,kee ...

  4. 用NGINX做负载均衡,keepalived高可用

    实验环境,四台虚拟机,两台做负载均衡,两台做RS IP地址:两台负载均衡分别为:10.0.0.7:10.0.0.8(高可用keepalived) 两台 RS主机地址为: 10.0.0.9:10.0.0 ...

  5. Nginx负载均衡配置+keepalived高可用

    1.什么是负载均衡? 随着应用各个核心模块业务量的提高,访问量和数据流量的快速增长,其处理能力和计算强度也相应地增大,使得单一的服务器设备根本无法承担.在此情况下,如果扔掉现有设备去做大量的硬件升级, ...

  6. LVSKeepalived—集群、负载均衡、企业高可用详解

    LVS负载均衡集群及配置 负载均衡概述 1.集群 通过集群(cluster)技术,可以在付出较低成本的情况下获得在性能.可靠性.灵活性方面的相对高的收益,其任务调度则是集群系统中的核心技术. 集群搭建 ...

  7. haproxy负载均衡_Haproxy+keepalived高可用集群实战

    随着互联网火热的发展,开源负载均衡器的大量的应用,企业主流软件负载均衡如LVS.Haproxy.Nginx等,各方面性能不亚于硬件负载均衡F5,Haproxy提供高可用性.负载均衡以及基于TCP和HT ...

  8. 游戏服务器高性能负载均衡,游戏服务器高可用负载均衡

    游戏服务器高可用负载均衡 内容精选 换一换 公有云提供弹性公网IP(EIP).NAT网关.弹性负载均衡(ELB)等方式连接公网.EIPEIP提供独立的公网IP资源,包括公网IP地址与公网出口带宽服务. ...

  9. Nginx 方向代理/负载均衡/动静分离/高可用

    一,反向代理 正向代理:正向代理服务器位于客户端和服务器之间,为了向服务器获取数据,客户端要向代理服务器发送一个请求,并指定目标服务器,代理服务器将目标服务器返回的数据转交给客户端.这里客户端是要进行 ...

最新文章

  1. 腾讯博士:年薪60万辞职去教书,你想要哪种生活?
  2. Oracle10g 回收站及彻底删除table : drop table xx purge
  3. Java实现大数乘法_java实现大数加法、乘法(BigDecimal)
  4. Centos Mysql数据还原
  5. 注解_自定义注解_元注解
  6. MySQL调优(一):使用profiles、performance_schema性能监控
  7. JSP、ASP、PHP Web应用程序怎么这么多P!
  8. ligerDialog的使用
  9. .net core精彩实例分享 -- 基础篇
  10. 详解vue动画的封装
  11. 鼠标右键快速连接wifi
  12. 数据分析数据可视化(二)
  13. 200行代码实现推流到直播平台
  14. 和张哥的那些天,互联网人的潜规则
  15. 【BZOJ5316】【JSOI2018】绝地反击
  16. 计算与背景反差较大显示明显的前景色
  17. C语言实现汉诺塔问题(保姆式讲解)
  18. C# PDF添加骑缝章
  19. Scrapy爬取新浪微博用户粉丝数据
  20. USB Gadget iMX6U LL开发板模拟U盘

热门文章

  1. adb shell ime(系统服务:input_method)
  2. python 简历解析_pyresparser 一个简单的简历解析器,用于从简历中提取信息
  3. Android Studio实现一个垃圾分类系统(Kotlin版本)
  4. 工程管理,用网页就够了!——Wish3D Earth在线三维地球强势上线
  5. pureftpd mysql配置_Linux PureFTPd配置(完整版)
  6. js 数据按时间排序
  7. jawbone 固件_在Windows 7上将蓝牙Jawbone耳机用于BT-音频(麦克风或扬声器)
  8. 【华人学者风采】兰艳艳 中国科学院
  9. 墨卡托坐标以及墨卡托坐标转经纬度
  10. php整站源码下载旅游,【极品PHP源码】ThinkPHP给客户二次开发的旅游门户整站源码...