设为首页 收藏本站
查看: 1123|回复: 0

[经验分享] LVS负载均衡介绍和配置

[复制链接]

尚未签到

发表于 2019-1-5 08:57:21 | 显示全部楼层 |阅读模式
负载均衡群集介绍    
  开源的负载均衡软件LVS、keepalived、haproxy和nginx等
keepalived除了可以实现高可用外,也可以拿来做负载均衡功能
LVS是基于4层负载均衡,网络OSI7层模型中的第四层。nginx属于第七层,haproxy既可以在4层工作,也可以在7层工作
lvs支持tcp数据转发,除了实现80的web端口转发外,也支持其他端口数据通信转发的,lvs只做协议上的通信端口数据转发,对数据内容不做监听:如域名头、主机报文头部信息
nginx只支持http、https、mail的转发,nginx可以针对网站的目录进行负载均衡,nginx在7层可以对后端区分目录,针对不同的网站目录来解析到不同的主机,haproxy也支持mysql负载均衡
比较lvs和nginx来说,lvs这种负载均衡在转发4层协议数据上更加稳定,能够处理更多的数据请求,而nginx这种负载均衡的方式更加灵活,可以针对不同级别的域名访问分配到不同的主机以及目录上,能够实现更多特定的需求

LVS介绍
  LVS有三种常见模式:NAT、DR和IP Tunnel模式
LVS中有一个核心角色叫做分发器(Load balance),主要用于分发用户请求,还有诸多用户请求的服务器(Real Server,简称RS)
  LVS-NAT模式:
LVS-nat模式借助iptables规则来实现,用户请求到达分发器后,通过预设的iptables规则,会把数据转发到后端的RS上去
rs需要设定网关为分发器的内网ip,用户请求和返回的数据包全部经过分发器,所以这里的分发器会造成一个瓶颈
在nat模式中,只需要分发器拥有公网ip即可,所以比较节省公网ip资源
但是这种模式不能承受较大的请求量,访问量较大的请求可能会无法正常处理,因为数据接收和发送到客户端都需要经过Load balance。因此LB角色的服务器处理请求的压力很大

LVS IP Tunnel模式
需要有一个公共ip配置在分发器和所有rs角色上,公用的ip称做为VIP
客户端请求目标IP为vip,分发器接收请求数据包后,会对数据包的ip报头进行再次封装,会把目标ip的报头外再加上一层rs的ip报头(根据算法来选择封装成的rs的IP报头),这样用户请求的数据包就会被发送到rs角色上
rs接收数据包后,会解包数据包,所有报头解开后,原始IP报头为VIP,因为所有的rs上都配置有VIP,所以tcp协议会认为数据传输正确,然后交给rs处理。而每个rs又都配有公网ip,当数据请求完成后,rs会直接通过自己的IP+封装VIP报头把数据直接返回给客户端,这样数据返回给客户端时不需要经过Load Balancer了,减小了分发器的处理压力

  LVS DR模式
需要一个公共公用的IP设置为VIP,同样所有的rs上都配置这个VIP
和IP Tunnel不同的是,它会把数据包的MAC地址修改为RS的MAC地址,rs接收到数据包后,会处理数据包,解析出原始的ip报头得出原始的IP,因为rs上配置了这个VIP,所以rs会处理该数据包的请求


LVS算法
  轮询分发  Round-Robin  rr
加权轮询 Weight Round-Robin wrr
最小链接 Least-Connection lc
加权最小链接 Weight Least-Connection wlc
基于局部性的最小连接  Locality-Based Least Connection lblc
带复制的基于局部性最小链接 Locality-Based Least Connection with Replication lblcr
目标地址散列调度 Destination Hashing dh
原地址散列调度 Source Hashing  sh
最常用的是前面四种,根据服务器实际情况,加权分配可以对配置高处理请求能力强的服务器分配更多的请求数,这样可以充分利用服务器的资源,避免资源空闲

LVS NAT模式
  分发器内网:192.168.1.220  外网192.168.182.130  
rs1内网192.168.1.223
rs2内网192.168.1.234
rs角色设置网卡的网关为192.168.1.220,用于NAT内网通信
所有角色上执行关闭防火墙规则,并保存配置的操作,防止因防火墙规则造成的无法访问站点的问题

[root@Huaching-2 ~]# systemctl stop firewalld
[root@Huaching-2 ~]# systemctl disable firewalld
[root@Huaching-2 ~]# systemctl start iptables
[root@Huaching-2 ~]# iptables -F
[root@Huaching-2 ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ 确定 ]
  在分发器dir上安装ipvsadm

root@Huaching-2 ~]# yum install -y ipvsadm
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
base | 3.6 kB 00:00:00    
epel | 3.2 kB 00:00:00    
extras      
-----------------省略
Downloading packages:
ipvsadm-1.27-7.el7.x86_64.rpm | 45 kB 00:00:00    
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : ipvsadm-1.27-7.el7.x86_64 1/1
验证中 : ipvsadm-1.27-7.el7.x86_64 1/1
已安装:
ipvsadm.x86_64 0:1.27-7.el7                                                                                                        
完毕!
  在dir分发器上编写路由转发的内核配置和iptables配置,内核开启路由转发需要指定对应的网卡,这里需要注意服务器实际的网卡名称

#! /bin/bash
#在系统内核配置中开启路由转发,转发需要注意自己服务器真实网卡名称
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/ens36/send_redirects
#清空iptables规则,并配置nat表在POSTROUTING链中对192.168.1.0网段进行数据包的转发
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE  
#配置ipvsadm,这里设置的是加权最少链接轮询的方式。ipvsadm配置指定dir外网ip对应内网的rs角色ip,-w并指定被轮询的次数
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.182.130:80 -s wlc -p 3
$IPVSADM -a -t 192.168.182.130:80 -r 192.168.1.223:80 -m -w 1
$IPVSADM -a -t 192.168.182.130:80 -r 192.168.1.234:80 -m -w 1
  查看ipvsadm的轮询配置

[root@Huaching-2 src]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.182.130:http wlc persistent 3
 -> 192.168.1.223:http           Masq    1      0          0        
 -> 192.168.1.234:http           Masq    1      0          0    
  在rs上将网卡的网关设置为dir的内网ip,这样就能让iptables规则从192.168.249.129把访问请求转发给192.168.1.0网段的80服务器端口
如rs1的修改操作

[root@aaa ~]# vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
NAME=enp0s3
UUID=bf8adc16-a9c3-494a-b47e-f572fad38639
DEVICE=enp0s3
ONBOOT=yes
IPADDR=192.168.1.234
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.220
DNS2=119.29.29.29
  rs的网关设置为dir的ip后,rs不能够链接外部网络了,需要配置iptables转发规则,对内网数据进行转发,dir分发器对内网的数据进行转发处理。处理完的数据发送给dir分发器,再由分发器返回给用户端进行响应

访问测试
  先在dir上对后端的两台web服务进行测试访问,dir到后端web是属于一个网段的,这里必须要保证dir到web之间的链路要通信正常

[root@localhost src]# curl -I 192.168.1.223
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Sun, 09 Sep 2018 02:52:48 GMT
Content-Type: text/html
Content-Length: 3700
Last-Modified: Tue, 06 Mar 2018 09:26:21 GMT
Connection: keep-alive
ETag: "5a9e5ebd-e74"
Accept-Ranges: bytes

[root@localhost src]# curl -I 192.168.1.234
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Sun, 09 Sep 2018 10:53:10 GMT
Content-Type: text/html
Content-Length: 3700
Last-Modified: Tue, 06 Mar 2018 09:26:21 GMT
Connection: keep-alive
ETag: "5a9e5ebd-e74"
Accept-Ranges: bytes
  dir到web间的网络正常后,再测试ipvsadm的负载均衡转发,这里需要保证dir测试的机器和客户端间是可以访问的,可以在浏览器中访问,为了区分负载均衡,这里将1.223和1.234写入不同的网页显示内容,方便区分

[root@localhost src]# curl 192.168.182.130
host2
[root@localhost src]# curl 192.168.182.130
host1
[root@localhost src]# curl 192.168.182.130
host2
[root@localhost src]# curl 192.168.182.130
host1
  测试时ipvsadm的-p选项是指定多长时间内同一用户访问分配到同一台服务器进行处理,测试时去掉-p参数,也就是让访问不同web服务器的时候没有等待时间及缓存




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-659509-1-1.html 上篇帖子: LVS相关脚本 下篇帖子: centos7上实现LVS负载均衡群集之NAT转换模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表