文档章节

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

Linux_Anna
 Linux_Anna
发布于 2017/09/05 11:06
字数 3053
阅读 14
收藏 1

 负载均衡集群介绍

1.1 负载均衡介绍

  • 主流开源软件有LVS、keepalived、haproxy、nginx等. 前面讲到keepalived是实现高可用,其实keepalived还可以实现负载均衡.
  • 其中LVS属于4层,指的是(网络OSI 7层模型),Nginx属于7层,所以说这两种负载均衡有本质的区别. haproxy 既可以认为是4层,也可以当做是7层使用.
  • keepalived的负载均衡功能其实就是LVS,keepalived负载均衡是内置的。通常有人说keepalived+LVS,实际上仅仅就一个keepalived而已.
  • 至于4层和7层有这样本质的区别,比如LVS这种四层,它可以分发TCP的这种协议,还可以分发除了80端口外的其他端口通信. 如果做MySQL的负载均衡,是可以使用LVS去实现的,Nginx就不支持了. 而Nginx仅仅支持http、https、mail、haproxy(haproxy也支持MySQL负载均衡
  • Nginx 7层有一定的限制,但有更高级的功能,比如说Nginx可以根据目录,一个网站下面可以去访问二级目录&三级目录,可以根据目录去区分后端真正的服务器,那么Nginx可以做到.但是LVS呢就不做到,LVS没有那么智能,它仅仅是一个4层,4层的话是一个TCP IP的一个数据包分发和转发,对于数据包里面有什么域名或者是主机头之类的,它不关心.
  • 相比较来说,LVS 这种4层的更稳定,能承受更多的请求,而Nginx这种7层的更加灵活,能实现更多的个性化需求.

 

 LVS介绍

1.1 LVS介绍

  • LVS是由国人章文嵩开发,章文嵩是一位博士,LVS是世界知名的一个软件,流行度不亚于Apache的httpd, 基于TCP/IP做的路由器和转发,稳定性和效率很高
  • LVS最新版本基于Linux内核2.6,有好多年不更新了.
  • LVS有三种常见的模式:NAT、DR、IP Tunnel
  • LVS架构中有一个核心角色叫做分发器(Load Balancer);它用来分发用户的请求,HIA有诸多处理用户请求的服务器(Real Server,简称rs)

1.2 LVS NAT 模式

这种模式借助iptables的nat表来实现,用户的请求到分发器后,通过预设的iptables规则,把请求的数据包转发到后端的Real Server(真正的服务器),这些服务器接收到了请求之后呢,处理用户请求,再吐给Load Balancer(分发器),这个分发器再返回给用户. 那可想而知Load Balancer(分发器)这个角色其实它成为了一种瓶颈,当访问量非常大的时候,Load Balancer(分发器)请求量也非常大,请求量大,那分发器分发出去的请求,等rs处理完再吐回来的请求,分发器将吐回来的结果继续给用户,那Load Balancer(分发器)严重影响了效率.  使用nat模式,请求量不能太大,Real Server(真正的服务器)十来台,超过十台,分发器就会有点力不从心,除非说分发器这个机器配置很高, 使用的是千兆网卡,使用的网线也是千兆网线,这样的话可以大大提升效率. 

NAT模式,用户请过来到Load balance(分发器),分发器分发到后端的rs,rs处理完请求再返回给分发器,其实只是内网通信,实际上只用了一个公网IP配置在Load balance(分发器)上,这样可以节省很多公网IP资源.


1.3 LVS IP Tunnel模式

在我们看来好像是在load balancer 和rs之间建立了虚拟的隧道,我们把它叫做IP Tunnel. 它实现原理上,实际是更改了数据包的IP(目的IP),比如用户请求过来肯定是到load balancer上,load balancer和rs 有一个特殊的配置叫做VIP,也就是load balancer和rs 角色需要配置一个公共的IP,这个公共的IP的目的是为了给用户提供服务的. 用户访问过来,肯定是知道一个公网IP进行通信,通信的时候这个数据包里面就包含了目的IP,数据包到了load balancer上就需要做一个设置,把目的IP做一个更改,更改到具体的rs上,要不然load balancer上的数据包如何到rs上呢?   把目的IP改成rs ,当然每次改的都不一样,它根据自己的算法,有可能这次是rs 1 ,下一次是rs 2. 目的IP 变成rs,那数据包到rs上,rs会解包,肯定会把数据包传输回去,那rs是如何传输回去呢?  因为每个rs都设置了公网IP,可以和用户直接通信,可以通过公网IP将结果返回给客户端,也就不再需要通过load balancer 再返回给用户,那load balancer 就不存在瓶颈,load balancer 只负责把请求分发到各个rs 上去,rs处理完的结果自己返回给客户端.

 


1.4 LVS DR模式

这种模式和前面IP Tunnel模式很像,但DR模式的Director(分发器)和rs 之间有一个Intemal Network(也就是内网). 
和IP Tunnel模式不同是,它会把数据包的MAC地址修改为rs. MAC地址就涉及到ARP的通信了, 若内部两台机器之间通信,它们是需要通过MAC进行通信的, 更改了MAC地址,最终也会把分发器的数据包转移到Real Server上去,转移到Real Server上后,直接把结果返回给客户端上去,对于分发器来讲也是没有瓶颈了. 也就意味需要配置一个VIP在所有的机器上 .

 

 LVS调度算法 

1. LVS常用的调度算法

  • 1.1 轮询:Round-Robin  简称rr
    用户的请求过来,均衡的分发到每个rs上,没有优劣之分,非常均衡的分配过来,就叫做rr算法。
  • 1.2 加权轮询 Weight Round-Robin  简称wrr
    例如其中一个rs想让它多分担一点,因为它配置好,可以对这台机器设置一个高的权重,比方这台机器权重设置为85,其他的设置为60,那么这样的话,85的机器分发的请求数就会多一些。
  • 1.3 最小连接 Least-Connection 简称lc
    请求量少的,或者是服务器上连接上数比较少的服务器,那么就会新的请求分发这台请求量少的服务器上来,请求量少说明这台服务器比较闲,或是处理请求速度快。
  • 1.4 加权最小连接 Weight Least-Connection  简称wlc
    给请求量少的,或者是服务器上连接上数比较少的服务器加权重,那么权重高的这台服务器就会分发请求分发数就会比较多.这台请求量少的服务器上来,请求量少说明这台服务器比较闲,或是处理请求速度快。

2. LVS不太常用的调度算法

  • 2.1 基于局部性的最小连接 Locality-Based Least Connection 简称 lblc
  • 2.2 带复制的基于局部性最小连接 Locality-Based Least Connection with Replication 简称 lblcr
  • 2.3 目标地址散列调度 Destination Hashing  简称dh
  • 2.4 源地址散列调度 Source Hashing  简称sh

 

 LVS NAT模式搭建

1.NAT模式搭建--准备工作

1.1 准备三台机器
      目前有192.168.2.179 和 192.168.2.180,还需再克隆一台,可以在192.168.2.180上克隆一台出来,
      克隆的机器IP地址为192.168.2.181.

      其中一台作为分发器,也叫调度器(简写为dir)
      另外两台就是Real Server,用来处理用户请求的服务器

1.2 设置第1台机器--192.168.2.179

添加一块网卡: 点击虚拟机 -- 设置 -- 添加-- 网络适配器 --添加 -- 仅主机模式 -- 完成
查看网段:点击编辑-- 虚拟网络编辑器 --  仅主机模式 网段是192.168.18.0  -- 设置网卡IP为192.168.18.128 -- Windows上测试一下能否拼通(能拼通说明就可以通信)

1.3 关闭防火墙三台机都要关闭

[root@root-01 ~]# systemctl stop firewalld
[root@root-01 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 5886 packets, 523K bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 4981 packets, 414K bytes)
 pkts bytes target     prot opt in     out     source               destination   

[root@root-02 ~]# systemctl stop firewalld
[root@root-02 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 5886 packets, 523K bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 4981 packets, 414K bytes)
 pkts bytes target     prot opt in     out     source               destination   

[root@root-03 ~]# systemctl stop firewalld
[root@root-03 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 5886 packets, 523K bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 4981 packets, 414K bytes)
 pkts bytes target     prot opt in     out     source               destination   

 

1.4 设置第2台机器-192.168.2.180

说明: 设置网关为分发器的内网IP,若网关不设置分发器的IP,将会无法通信
           一旦设置成分发器的IP,这台机器就无法网上了.

# 原本GATEWAY=192.168.2.1 现在更改为GATEWAY=192.168.2.179

[root@root-02 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736

TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
NAME="eno16777736"
UUID="b82b23b3-06a7-4752-b2e6-05fef87d4917"
DEVICE="eno16777736"
ONBOOT="yes"
IPADDR=192.168.2.180
NETMASK=255.255.255.0
GATEWAY=192.168.2.179
DNS1=119.29.29.29

[root@root-02 ~]# systemctl restart network

 

1.5 设置第3台机器-192.168.2.181

说明: 设置网关为分发器的内网IP,若网关不设置分发器的IP,将会无法通信
           一旦设置成分发器的IP,这台机器就无法网上了.

# 原本GATEWAY=192.168.2.1 现在更改为GATEWAY=192.168.2.179

[root@root-03 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 

TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
NAME="ens33"
UUID="b82b23b3-06a7-4752-b2e6-05fef87d4917"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.2.181
NETMASK=255.255.255.0
GATEWAY=192.168.2.179
DNS1=119.29.29.29

[root@root-03 ~]# systemctl restart network


1.6 在分发器上ipvsadm工具

说明:ipvsadm工具是实现LVS的重要工具,若没有这个工具是无法实现LVS的功能. 
          ipvsadm工具只需要在分发器上安装即可.

[root@root-01 ~]# yum install -y ipvsadm


1.7 在分发器上写一个执行脚本

[root@root-01 ~]# vim /usr/local/sbin/lvs.nat.sh

#! /bin/bash
# director 服务器上开启路由转发功能
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
# 注意区分网卡名字
echo 0 > /proc/sys/net/ipv4/conf/eno16777736/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
# director 设置nat防火墙
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j MASQUERADE
# director设置ipvsadm
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.18.128:80 -s rr
$IPVSADM -a -t 192.168.18.128:80 -r 192.168.2.180:80 -m -w 1
$IPVSADM -a -t 192.168.18.128:80 -r 192.168.2.181:80 -m -w 1


注:
   echo 1 > /proc/sys/net/ipv4/ip_forward -- 更改内核参数,实现内核转发

   iptables -t nat -A POSTROUTING -S 192.168.2.0/24 -j MASQUERADE -- 这条规则是为了同网段的内网实现上网

   IPVSADM='/usr/sbin/ipvsadm'  -- 把ipvsadm变量

   $IPVSADM -A -- 增加规则   
    
   -t 跟的是分发器的IP (即是外网IP)

   -s 是指定算法  -m 是NAT 的模式

   -w 是设置权重      

   -r 后面跟的Real Server的IP

   rr 把用户的请求均衡的分发到每个rs上
   
执行脚本:
[root@root-01 ~]# sh /usr/local/sbin/lvs.nat.sh


1.8 设置Real Server 的主页,以便区分

#设置第1台Real Server 主页面 (即是默认虚拟主机)

[root@root-02 ~]# vim /data/www/default/index.html 

root-02

#设置第2台Real Server 主页面(即是默认虚拟主机)

[root@root-03 ~]# vim /data/www/default/index.html 

root-03


1.9 测试

说明:使用公网IP测试访问

第一次访问的第1台Real Server
第二次访问的第2台Real Server
依次轮流,

[root@root-01 ~]# curl 192.168.18.128
root-02
[root@root-01 ~]# curl 192.168.18.128
root-03
[root@root-01 ~]# curl 192.168.18.128
root-02
[root@root-01 ~]# curl 192.168.18.128
root-03

说明这样就成功了


 

© 著作权归作者所有

共有 人打赏支持
Linux_Anna
粉丝 8
博文 159
码字总数 162931
作品 0
广州
运维
负载均衡集群介绍 LVS介绍 LVS调度算法 LVS NAT模式搭建

7月4日任务 18.6 负载均衡集群介绍 18.7 LVS介绍 18.8 LVS调度算法 18.9/18.10 LVS NAT模式搭建 扩展 lvs 三种模式详解 http://www.it165.net/admin/html/201401/2248.html lvs几种算法 http...

lyy549745
07/04
0
0
集群应用与实战

集群 什么是集群: — 一组通过高速网络互联的计算组,并以单一系统的模式加以管理 — 将很多服务器集中起来,提供同一中服务,在客户端看来就像是只有一个服务器 — 可以在付出较低成本的情...

Xuenqlve
01/15
0
0
高并发场景 LVS 安装及高可用实现

1.1 负载均衡介绍 1.1.1 负载均衡的妙用 负载均衡(Load Balance)集群提供了一种廉价、有效、透明的方法,来扩展网络设备和服务器的负载、带宽、增加吞吐量、加强网络数据处理能力、提高网络...

侯召顺
2017/11/29
0
0
LVS原理详解及部署之二:LVS原理详解(3种工作方式8种调度算法)

-------------------LVS专题------------------------ LVS原理详解及部署之一:ARP原理准备 LVS原理详解及部署之二:LVS原理详解(3种工作方式8种调度算法) LVS原理详解及部署之三:手动部署...

蓝狐乐队
2016/07/24
54
0
一文透析高并发场景下LVS安装与高可用实现

本文目录: LVS介绍与集群搭建 负载均衡(LVS)相关名词 在Web端的操作有什么含义 LVS集群的工作模式 IPVS调度器实现的八种负载调度算法 LVS+Keepalived方案实现 常见LVS负载均衡高可用解决方...

惨绿少年
01/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

49.Nginx防盗链 访问控制 解析php相关 代理服务器

12.13 Nginx防盗链 12.14 Nginx访问控制 12.15 Nginx解析php相关配置(502的问题) 12.16 Nginx代理 扩展 502问题汇总 http://ask.apelearn.com/question/9109 location优先级 http://blog....

王鑫linux
今天
1
0
Nginx防盗链、访问控制、解析php相关配置、Nginx代理

一、Nginx防盗链 1. 编辑虚拟主机配置文件 vim /usr/local/nginx/conf/vhost/test.com.conf 2. 在配置文件中添加如下的内容 { expires 7d; valid_referers none blocked server_names *.tes......

芬野de博客
今天
0
0
spring EL 和资源调用

资源调用 import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.PropertySource;import org.springframework.core.io.Resource;......

Canaan_
今天
1
0
memcached命令行、memcached数据导出和导入

一、memcached命令行 yum装telnet yum install telent 进入memcached telnet 127.0.0.1 11211 命令最后的2表示,两位字节,30表示过期时间(秒) 查看key1 get key1 删除:ctrl+删除键 二、m...

Zhouliang6
今天
1
0
Linux定时备份MySQL数据库

做项目有时候要备份数据库,手动备份太麻烦,所以找了一下定时备份数据库的方法 Linux里有一个 crontab 命令被用来提交和管理用户的需要周期性执行的任务,就像Windows里的定时任务一样,用这...

月夜中徘徊
今天
1
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部