负载均衡集群介绍、LVS介绍、LVS调度算法、LVS NAT模式搭建

目录

一、负载均衡集群介绍
二、LVS介绍
三、LVS调度算法
四、LVS NAT模式搭建

一、负载均衡集群介绍

  • 负载均衡集群不难理解,简单说就是让多台服务器均衡地去承载压力。

  • 实现负载均衡集群的开源软件有LVS、keepalived、haproxy、Nginx等。

  • 其中LVS属于4层(网络OSI 7层模型传输层),nginx属于7层(应用层),haproxy既可以认为是4层,也可以当做7层使用。

  • keepalived的负载均衡功能其实就是lvs。

  • lvs这种4层的负载均衡是可以分发除80外的其他端口通信的,比如MySQL的,而nginx仅仅支持http,https,mail,haproxy也支持MySQL这种。

  • 相比较来说,LVS这种4层的更稳定,能承受更多的请求,而nginx这种7层的更加灵活,能实现更多的个性化需求。

二、LVS介绍

  • LVS(Linux Virtual Server)是由国内大牛章文嵩开发的,这款软件的流行度不亚于Apache的httpd,它是一款四层的负载均衡软件,是针对TCP/IP做的转发和路由,所以稳定性和效率相当高。

  • LVS架构中有一个核心角色叫做分发器(Load balance),它用来分发用户的请求,还有诸多处理用户请求的服务器(Real Server,简称rs)。

  • LVS根据实现方式的不同,主要分为三种类型:NAT模式、IP Tunnel(IP隧道)模式、DR模式。

  • LVS三种模式介绍:
  1. NAT模式
  • 这种模式借助iptables的nat表来实现
  • 用户的请求到分发器后,通过预设的iptables规则,把请求的数据包转发到后端的rs上去
  • rs需要设定网关为分发器的内网ip
  • 用户请求的数据包和返回给用户的数据包全部经过分发器,分发器的性能和网络的带宽、质量会成为整个集群的瓶颈
  • NAT模式下处理请求的机器数量不能太多,相对其他模式能处理的请求数较少
  • 在nat模式中,只需要分发器有公网ip即可,所以比较节省公网ip资源
LVS NAT模式
  1. IP Tunnel模式
  • 这种模式,需要有一个公共的IP配置在分发器和所有rs上,我们把它叫做vip
  • 客户端请求的目标IP为vip,分发器接收到请求数据包后,会对数据包做一个加工,会把目标IP改为rs的IP,这样数据包就到了rs上
  • rs接收数据包后,会还原原始数据包,这样目标IP为vip,因为所有rs上配置了这个vip,所以它会认为是它自己
  • rs处理完请求后根据路由表将响应报文直接返回给客户端,不再经过分发器,此时分发器不再是集群性能的瓶颈
  • 这种模式下,需要给分发器和所有的rs全部分配公网IP,所以比较浪费公网IP
LVS IP Tunnel模式
  1. DR模式
  • 这种模式,也需要有一个公共的IP配置在分发器和所有rs上,也就是vip
  • 和IP Tunnel不同的是,这种模式下不会封装IP,而是将数据帧的MAC地址改为rs的MAC地址
  • rs接收数据包后,会还原原始数据包,这样目标IP为vip,因为所有rs上配置了这个vip,所以它会认为是它自己
LVS DR模式

三、LVS调度算法

  • 轮询 Round-Robin rr //均衡的将用户请求分发到每一个rs上
  • 加权轮询 Weight Round-Robin wrr //带权重的轮询,依照指定的权重比来分发请求
  • 最小连接 Least-Connection lc //将请求分发到连接数比较少的rs上
  • 加权最小连接 Weight Least-Connection wlc //带权重的最小连接
  • 基于局部性的最小连接 Locality-Based Least Connections lblc
  • 带复制的基于局部性最小连接 Locality-Based Least Connections with
    Replication lblcr
  • 目标地址散列调度 Destination Hashing dh
  • 源地址散列调度 Source Hashing sh
  • 常用的是前4种

四、LVS NAT模式搭建

  • 实验环境

 需要3台虚拟机,1台作调度器dir,2台作真实服务器rs。
 NAT模式下,调度器需要有两个IP,一个公网IP一个内网IP,真实服务器只需要内网IP。
 三台机器都关闭firewalld服务,并安装启动iptables-serives,清空iptables规则。
 三台机器都关闭SElinux。

分发器dir
主机名:minglinux-03
内网IP 192.168.162.128
公网IP 192.168.150.123 vmware仅主机网络模式
VMware设置内网的网卡设为NAT模式,连接外网的网卡设为仅主机模式
真实服务器rs1
主机名:minglinux-01
内网IP 192.168.162.130
真实服务器rs2
主机名:minglinux-02
内网IP 192.168.162.132

  • 分发器虚拟机网络设置
[root@minglinux-03 ~] vim /etc/sysconfig/network-scripts/ifcfg-ens33 //ifcfg-ens33网卡连接内网
[root@minglinux-03 ~] vim /etc/sysconfig/network-scripts/ifcfg-ens37  
//ifcfg-ens37网卡连接公网,网段为VMware仅主机网络模式子网网段
[root@minglinux-03 ~] ifup ens37
[root@minglinux-03 ~] ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:7a:0f:05 brd ff:ff:ff:ff:ff:ff
    inet 192.168.162.128/24 brd 192.168.162.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe7a:f05/64 scope link 
       valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:7a:0f:0f brd ff:ff:ff:ff:ff:ff
    inet 192.168.150.123/24 brd 192.168.150.255 scope global ens37
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe7a:f0f/64 scope link 
       valid_lft forever preferred_lft forever

  • rs虚拟机网络设置
     两台rs均设置内网网关为dir的内网IP(192.168.162.128)
//rs1网关设置
[root@minglinux-01 ~] vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@minglinux-01 ~] ifdown ens33 && ifup ens33
[root@minglinux-01 ~] route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.162.128 0.0.0.0         UG    0      0        0 ens33
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 ens33
192.168.162.0   0.0.0.0         255.255.255.0   U     0      0        0 ens33

//rs2网关设置
[root@minglinux-02 ~] vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@minglinux-02 ~] ifdown ens33 && ifup ens33
[root@minglinux-02 ~] route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.162.128 0.0.0.0         UG    0      0        0 ens33
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 ens33
192.168.162.0   0.0.0.0         255.255.255.0   U     0      0        0 ens33
  • 3台机器防火墙设置
     3台机器都执行如下命令:

systemctl stop firewalld
systemctl disable firewalld
yum install -y iptables-services //安装iptables服务
systemctl start iptables //启动服务
systemctl enable iptables //开机启动
iptables -F
service iptables save
setenforce 0 //临时关闭SElinux,修改selinux配置文件/etc/selinux/config可永久生效
//此时两台rs机器由于网关修改无法上网,安装iptables-services操作需先将网关改回

 epel源下载安装速度慢的话可以临时将epel源取消,方法如下:

[root@minglinux-01 ~] cd /etc/yum.repos.d
[root@minglinux-01 /etc/yum.repos.d] ls
CentOS7-Base-163.repo  CentOS-fasttrack.repo  CentOS-Vault.repo
CentOS-CR.repo         CentOS-Media.repo      epel.repo
CentOS-Debuginfo.repo  CentOS-Sources.repo    epel-testing.repo
[root@minglinux-01 /etc/yum.repos.d] mv epel.repo epel.repo.1
[root@minglinux-01 /etc/yum.repos.d] yum list |grep iptables-service
iptables-services.x86_64                    1.4.21-24.1.el7_5          @updates 
iptables-services.x86_64                    1.4.21-28.el7              base     
[root@minglinux-01 /etc/yum.repos.d] yum install -y iptables-services
  • 在dir上安装ipvsadm和配置脚本
     ipvsadm是实现LVS的核心工具
[root@minglinux-03 ~] yum install -y ipvsadm
[root@minglinux-03 ~] vim /usr/local/sbin/lvs_nat.sh //新建一个脚本
//写入以下内容
#! /bin/bash
# director 调整linux系统内核参数,开启路由转发功能,让数据包能转发到后端rs上
echo 1 > /proc/sys/net/ipv4/ip_forward  
# 关闭icmp的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
# 注意区分网卡名字,两个网卡分别为ens33和ens37
echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
# director 设置nat防火墙
iptables -t nat -F  //清空nat表的规则
iptables -t nat -X  //清空nat表中所有的链
iptables -t nat -A POSTROUTING -s 192.168.162.0/24  -j MASQUERADE
//让同网段的内网可以上网
# director设置ipvsadm
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C    //ipvsadm的-C选项清空规则
$IPVSADM -A -t 192.168.150.123:80 -s lc -p 3 
//-A增加Virtual Server,-t为TCP,-s选项指定调度算法,lc为最小连接算法。
//-p指定超时时间,即在一段时间内(3s),来自同一客户端的请求会被分发到相同的rs上
$IPVSADM -a -t 192.168.150.123:80 -r 192.168.162.130:80 -m -w 1
$IPVSADM -a -t 192.168.150.123:80 -r 192.168.162.132:80 -m -w 1
//-a增加rs,-r指定rs的IP,-m表示LVS的模式为NAT(masquerad)
//如果是-g表示LVS模式为DR,-i表示LVS模式为IP Tunnel,-w指定权重。

[root@minglinux-03 ~] sh !$  //执行脚本
sh /usr/local/sbin/lvs_nat.sh
  • NAT模式效果测试
    两台rs需安装有nginx并启动nginx

 设置两台rs不同的主页,做一个区分

[root@minglinux-01 ~] echo "This is rs1" > /data/wwwroot/default/index.html 
[root@minglinux-01 ~] curl localhost
This is rs1

[root@minglinux-02 ~] echo "This is rs2" > /usr/share/nginx/html/index.html
[root@minglinux-02 ~] curl localhost
This is rs2

 windows浏览器访问测试
脚本中设置了3s的长久连接,此时连续刷新页面并不改变


image.png

 修改lvs_nat.sh脚本去掉指定超时连接的设定

[root@minglinux-03 ~] vim /usr/local/sbin/lvs_nat.sh
[root@minglinux-03 ~] sh !$
sh /usr/local/sbin/lvs_nat.sh
[root@minglinux-03 ~] ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.150.123:80 lc
  -> 192.168.162.130:80           Masq    1      0          0         
  -> 192.168.162.132:80           Masq    1      0          0     

 修改lvs_nat.sh脚本中使用的算法为rr
在dir上使用curl测试:

//请求均衡地发送到后端的rs上
[root@minglinux-03 ~] vim /usr/local/sbin/lvs_nat.sh
[root@minglinux-03 ~] sh /usr/local/sbin/lvs_nat.sh
[root@minglinux-03 ~] curl 192.168.150.123
This is rs2
[root@minglinux-03 ~] curl 192.168.150.123
This is rs1
[root@minglinux-03 ~] curl 192.168.150.123
This is rs2
[root@minglinux-03 ~] curl 192.168.150.123
This is rs1
扩展

lvs 三种模式详解 http://www.it165.net/admin/html/201401/2248.html
lvs几种算法 http://www.aminglinux.com/bbs/thread-7407-1-1.html
关于arp_ignore和 arp_announce http://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
lvs原理相关的 http://blog.csdn.net/pi9nc/article/details/23380589

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容