2019独角兽企业重金招聘Python工程师标准>>>

本文索引:

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

负载均衡集群介绍

负载均衡集群主流软件LVS、keepalived、haproxy、nginx等。其中LVS属于4层的负载均衡,nginx属于7层的负载均衡。而haproxy既可以认为是4层负载均衡,也可以当做7层负载均衡使用。

keepalived的负载均衡功能实际上就是内置的LVS实现的。LVS的负载均衡是可以分发除80端口外的其他端口通信的,比如MySQL;nginx仅支持http、https、mail;haproxy也支持MySQL等端口的分发。

相对而言,LVS更稳定,能承受更多的请求;nginx则更灵活,能实现更多的个性化需求。


LVS介绍

LVS是中国人章文嵩开发的一款世界知名的开源软件,流行度不亚于apache的httpd,基于TCP/IP做的路由与转发,稳定性和效率很高。

LVS最新版本基于Linux内核2.6,但是多年未更新了。LVS有三种参见的模式:NAT、DR、IP Tunnel。

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

LVS NAT模式

NAT模式是借助iptables的nat表来实现的。

  • 用户的请求到分发器后,通过预设的iptables规则,把请求的数据包转发到后端的RS上去。
  • RS需要设定网关为分发器的内网ip
  • 用户请求的数据包和返回给用户的数据包全部经过分发器,因此分发器容易成为瓶颈(10台以下RS还是可以的);

在nat模式中,只需要分发器有公网ip即可,所有比较节省公网ip资源。

LVS IP Tunnel模式

需要有一个公共的ip配置在分发器和所有的RS上,该公共ip称为vip。

  • 客户端请求的目标ip为vip,分发器接收到请求数据包后,会对数据包做一个处理,把目标ip改为RS的ip,再传送给RS上;
  • RS接收到数据包后,会还原原始数据包,这样目标ip为vip,因为所有的RS上都配置了这个vip,所以它会认为是它自己。

LVS DR模式

DR模式也需要有一个公共的ip -- vip:分发器和所有RS上都需要配置。

  • 客户端请求的目标ip为vip,分发器接收到请求数据包后,会对数据包做一个处理,把数据包的MAC地址改为RS的MAC地址,再传送给RS上;
  • RS接收到数据包后,会还原原始数据包,这样目标ip为vip,因为所有的RS上都配置了这个vip,所以它会认为是它自己。

LVS的调度算法

  • rr(Round Robin)轮询 依次将请求均匀的发送给负载均衡集群内的RS上,其特点是实现简单。轮询算法假设所有的服务器处理请求的能力相同,分发器会将所有的请求平均分配给每个RS。

  • wrr 加权轮询 轮询算法的补充,通过给负载均衡集群内RS设置权重,LVS会通过这个权重来对区别化处理:权重高的处理更多的请求,权重少的处理较少的请求。

  • lc(least connection)最小连接 将新的请求发送给当前连接数最小的服务器(最空闲的RS上)

  • wlc(weight least connection)加权最小连接 将新的请求发送给权重较高,同时处理请求较少的RS上。

  • lblc(locality-based least connection)基于局部性的最小连接 针对请求的目标IP地址寻找最近的该目标ip地址所有使用的服务器,如果这台服务器可用,并可以处理请求,那么分发器将会尽量选择相同的服务器,否则会继续选择其他可行的服务器。

  • lblcr(locality-based least connections withreplication)带复制的基于基本性最小连接,它会维护一个目标ip到一组服务器之间的映射关系,防止某个服务器负载过高。

  • dh(Destination Hashing)目标地址散列调度 将目标ip地址通过散列函数将ip与服务器建立映射关系,当出现服务器不可用或负载过高时,把同一个ip地址的请求,发送给同一个server。

  • sh(Source Hashing)源地址散列调度 与dh(目标地址散列调度)类似,其根据源地址建立映射,同样将同一个ip地址的请求发个同一个服务器。将此前建立的session信息保留。


LVS NAT模式搭建

主要由地址转换(NAT)、直接路由(DR)和隧道(TUN)。用的比较多的是前2种,下面介绍如何搭建NAT/DR方法。

10台机器以内的可以使用NAT模式,其优点在于节省公网ip资源,节约成本。也可以将内网内主机都用来搭建LVS(都配置私有ip),使用一个公网ip进行映射,同样起到节省ip的效果。

实例准备

  • 分发器(调度器dir) 内网:192.168.65.130 外网:192.168.19.128
  • rs1 内网:192.168.65.133 网关:192.168.65.130(分发器内网ip)
  • rs2 内网:192.168.65.134 网关:192.168.65.130(分发器内网ip)

修改rs1/rs2的网关的操作最好在准备阶段的最后再进行操作,否则将导致机器无法联网,后续可能需要的yum安装无法操作。

rs1/2上关闭firewalld,使用iptables

# 分发器、rs1、rs2都执行下列代码
# 关闭firewalld
systemctl disable firewalld
systemctl stop firewalld
# 开启iptables
yum install -y iptables-services
systemctl enable iptables
systemctl start iptables
# 清空规则
iptables -F
service iptables save
# 关闭selinux
vi /etc/selinux/config
SELINUX=disabled

分发器上需要安装ipvsadm

[root@director ~]# yum install -y ipvsadm
[root@director ~]# vi /usr/local/sbin/lvs_nat.sh
#! /bin/bash# 服务器上开启路由转发功能
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/ens33/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects# 设置nat防火墙
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.65.0/24  -j MASQUERADE# 设置ipvsadm
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C# -A 增加规则
# -s指定LVS调度算法,这里选rr可以均衡分配请求;
# 还可以使用-p参数来指定超时时间,在该时间内将请求分发到一个RS上
$IPVSADM -A -t 192.168.19.128:80 -s rr
# -r指定rs的ip;-m表示为nat模式;-w指定权重
$IPVSADM -a -t 192.168.19.128:80 -r 192.168.65.133:80 -m -w 1
$IPVSADM -a -t 192.168.19.128:80 -r 192.168.65.134:80 -m -w 1

rs1和rs2上安装nginx

rs1和rs2上编辑默认主机网页进行区分
[root@test1 ~]# yum install nginx
[root@test1 ~]# vim /usr/share/nginx/html/index.html
this is RS1[root@test2 ~]# yum install nginx
[root@test2 ~]# vim /usr/share/nginx/html/index.html
this is RS2

运行脚本,进行测试

[root@director ~]# sh /usr/local/sbin/lvs_nat.sh# 访问配置的官网ip
[root@director ~]# curl 192.168.19.128:80
this is RS1# 2台rs都分发了请求,达到均衡的效果
[root@director ~]# 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.19.128:80 rr-> 192.168.65.133:80            Masq    1      0          1         -> 192.168.65.134:80            Masq    1      0          1

可以修改lvs_nat.sh内的LVS调度算法来显示不同的效果,注意每次修改完脚本后要立即执行,使配置生效。

转载于:https://my.oschina.net/LuCastiel/blog/1614932

负载均衡实现 --- LVS的介绍、调度算法、NAT模式的搭建相关推荐

  1. [转]LVS负载均衡(LVS简介、三种工作模式、十种调度算法)

    一.LVS简介 LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中.该项目在Linux内核中实现 ...

  2. LVS负载均衡(LVS简介、三种工作模式、十种调度算法)

    转载:https://blog.csdn.net/weixin_40470303/article/details/80541639 一.LVS简介 LVS(Linux Virtual Server)即 ...

  3. LVS 负载均衡集群详细介绍

    目录 0 前言 1 什么是 LVS? 3 为什么要用 LVS? 4 LVS 的组成及作用 5 负载均衡的由来及所带来的好处 6 LVS 负载均衡集群的类型 7 DNS / 软硬件负载均衡的类型 8 L ...

  4. Linux负载均衡软件LVS

    Linux负载均衡软件LVS之三(配置篇) LVS集群有DR.TUN.NAT三种配置模式,可以对www服务.FTP服务.MAIL服务等做负载均衡,下面通过搭建www服务的负载均衡实例,讲述基于DR模式 ...

  5. Linux负载均衡软件LVS之一(概念篇)

    2019独角兽企业重金招聘Python工程师标准>>> 一. LVS简介 LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起 ...

  6. 集群负载均衡之lvs和keepalived

    本篇主要介绍集群的负载均衡. lvs是一种集群(Cluster)技术,采用IP负载均衡技术和基于内容请求分发技术.调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器 ...

  7. Linux负载均衡软件LVS(概念篇)

    Linux负载均衡软件lvs(概念篇) 一.LVS简介 LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器,是一个由章文嵩博士发起的自由软件项目,它的官方站点是(www ...

  8. LVS负载均衡(LVS简介、三种工作模式、持久化连接)

    一.LVS简介及原理 1.LVS概述 LVS(Linux Virtual Server)即Linux虚拟服务器,在Linux平台运行.LVS被集成到Linux内核模块中被分为2个部分,用户态(ipvs ...

  9. 服务器集群负载均衡(F5,LVS,DNS,CDN)区别以及选型

    服务器集群负载均衡(F5,LVS,DNS,CDN)区别以及选型 下面是"黑夜路人"的<大型网站架构优化(PHP)与相关开源软件使用建议> =============== ...

  10. Linux负载均衡解决方案 -- LVS 理论概述

    Lvs 理论概述 一.什么是 LVS ? 二.为什么需要 LVS ? 三.LVS 原理 1.LVS 体系结构 2.LVS 工作模式 3.LVS 调度算法 四.LVS 工作方式 1.LVS-DR 模式 ...

最新文章

  1. php导出页面word,php导出生成word的方法_PHP
  2. SSH框架之Spring4专题4:Spring与DAO
  3. python 爬取贝壳网小区名称_如何使用 python 爬取全国小区名称
  4. 主成份(PCA)与奇异值分解(SVD)的通俗解释
  5. mavean的依赖传递和排除依赖
  6. Spring-MVC配置Gson做为Message Converter解析Json
  7. 如何解决“这台电脑上已经安装了更高版本的Bonjour”
  8. ps抠图-基础篇(三)
  9. 【转】弹出USB大容量存储设备时出问题的解决方法
  10. MSI文件无法安装问题
  11. CodeForces #352B.Jeff and Periods
  12. 151202storyboard中, 设置子控件和父控件的高宽比
  13. VCS建立仿真生成DVE波形
  14. TableView如何让行或列只读
  15. php取网盘真实链接,利用蓝奏做个人小文件网盘和获取真实下载地址
  16. 【点云分割】边界分割对点云分割的监督学习(CBL)
  17. WEB、WEB标准、W3C的理解
  18. 自己动手汉化一个英文软件
  19. 一如职场深似海,怎样避开人际关系的冰山?
  20. Qt网路与通信(获取本机IP、MAC、IPV6子网掩码等网络信息)

热门文章

  1. 程序员自学路上的一些感悟
  2. hdu-5992 Finding Hotels(kd-tree)
  3. PHP------- 继承
  4. Windows Server 2012 克隆修改SID
  5. 转: Oracle AWR 报告 每天自动生成并发送邮箱
  6. 贝叶斯定理决策规则及Bayes思想总结
  7. Sugar Bytes WOW2 for Mac - 多功能滤波效果器
  8. 兼容M1芯片 Denise Audio poltergate Mac - 侧链均衡器
  9. 适用于Mac的WinX HD视频转换器:视频转换教程
  10. 解决SourceTree不断提示输入密码问题