负载均衡实现 --- LVS的介绍、调度算法、NAT模式的搭建
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模式的搭建相关推荐
- [转]LVS负载均衡(LVS简介、三种工作模式、十种调度算法)
一.LVS简介 LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中.该项目在Linux内核中实现 ...
- LVS负载均衡(LVS简介、三种工作模式、十种调度算法)
转载:https://blog.csdn.net/weixin_40470303/article/details/80541639 一.LVS简介 LVS(Linux Virtual Server)即 ...
- LVS 负载均衡集群详细介绍
目录 0 前言 1 什么是 LVS? 3 为什么要用 LVS? 4 LVS 的组成及作用 5 负载均衡的由来及所带来的好处 6 LVS 负载均衡集群的类型 7 DNS / 软硬件负载均衡的类型 8 L ...
- Linux负载均衡软件LVS
Linux负载均衡软件LVS之三(配置篇) LVS集群有DR.TUN.NAT三种配置模式,可以对www服务.FTP服务.MAIL服务等做负载均衡,下面通过搭建www服务的负载均衡实例,讲述基于DR模式 ...
- Linux负载均衡软件LVS之一(概念篇)
2019独角兽企业重金招聘Python工程师标准>>> 一. LVS简介 LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起 ...
- 集群负载均衡之lvs和keepalived
本篇主要介绍集群的负载均衡. lvs是一种集群(Cluster)技术,采用IP负载均衡技术和基于内容请求分发技术.调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器 ...
- Linux负载均衡软件LVS(概念篇)
Linux负载均衡软件lvs(概念篇) 一.LVS简介 LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器,是一个由章文嵩博士发起的自由软件项目,它的官方站点是(www ...
- LVS负载均衡(LVS简介、三种工作模式、持久化连接)
一.LVS简介及原理 1.LVS概述 LVS(Linux Virtual Server)即Linux虚拟服务器,在Linux平台运行.LVS被集成到Linux内核模块中被分为2个部分,用户态(ipvs ...
- 服务器集群负载均衡(F5,LVS,DNS,CDN)区别以及选型
服务器集群负载均衡(F5,LVS,DNS,CDN)区别以及选型 下面是"黑夜路人"的<大型网站架构优化(PHP)与相关开源软件使用建议> =============== ...
- Linux负载均衡解决方案 -- LVS 理论概述
Lvs 理论概述 一.什么是 LVS ? 二.为什么需要 LVS ? 三.LVS 原理 1.LVS 体系结构 2.LVS 工作模式 3.LVS 调度算法 四.LVS 工作方式 1.LVS-DR 模式 ...
最新文章
- php导出页面word,php导出生成word的方法_PHP
- SSH框架之Spring4专题4:Spring与DAO
- python 爬取贝壳网小区名称_如何使用 python 爬取全国小区名称
- 主成份(PCA)与奇异值分解(SVD)的通俗解释
- mavean的依赖传递和排除依赖
- Spring-MVC配置Gson做为Message Converter解析Json
- 如何解决“这台电脑上已经安装了更高版本的Bonjour”
- ps抠图-基础篇(三)
- 【转】弹出USB大容量存储设备时出问题的解决方法
- MSI文件无法安装问题
- CodeForces #352B.Jeff and Periods
- 151202storyboard中, 设置子控件和父控件的高宽比
- VCS建立仿真生成DVE波形
- TableView如何让行或列只读
- php取网盘真实链接,利用蓝奏做个人小文件网盘和获取真实下载地址
- 【点云分割】边界分割对点云分割的监督学习(CBL)
- WEB、WEB标准、W3C的理解
- 自己动手汉化一个英文软件
- 一如职场深似海,怎样避开人际关系的冰山?
- Qt网路与通信(获取本机IP、MAC、IPV6子网掩码等网络信息)