负载均衡集群介绍、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介绍、LVS调度算法、LVS NAT模式搭建_第1张图片
LVS NAT模式
  1. IP Tunnel模式
  • 这种模式,需要有一个公共的IP配置在分发器和所有rs上,我们把它叫做vip
  • 客户端请求的目标IP为vip,分发器接收到请求数据包后,会对数据包做一个加工,会把目标IP改为rs的IP,这样数据包就到了rs上
  • rs接收数据包后,会还原原始数据包,这样目标IP为vip,因为所有rs上配置了这个vip,所以它会认为是它自己
  • rs处理完请求后根据路由表将响应报文直接返回给客户端,不再经过分发器,此时分发器不再是集群性能的瓶颈
  • 这种模式下,需要给分发器和所有的rs全部分配公网IP,所以比较浪费公网IP
负载均衡集群介绍、LVS介绍、LVS调度算法、LVS NAT模式搭建_第2张图片
LVS IP Tunnel模式
  1. DR模式
  • 这种模式,也需要有一个公共的IP配置在分发器和所有rs上,也就是vip
  • 和IP Tunnel不同的是,这种模式下不会封装IP,而是将数据帧的MAC地址改为rs的MAC地址
  • rs接收数据包后,会还原原始数据包,这样目标IP为vip,因为所有rs上配置了这个vip,所以它会认为是它自己
负载均衡集群介绍、LVS介绍、LVS调度算法、LVS NAT模式搭建_第3张图片
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:  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:  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:  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的长久连接,此时连续刷新页面并不改变


负载均衡集群介绍、LVS介绍、LVS调度算法、LVS NAT模式搭建_第4张图片
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

你可能感兴趣的:(负载均衡集群介绍、LVS介绍、LVS调度算法、LVS NAT模式搭建)