一、Lvs详解

lvs内核模型



1、模型分析

用户访问的数据可以进入调度器
匹配调度器分配的虚拟IP|IP+端口(路由走向)
根据调度器的算法确定匹配的服务器

2、调度条件:基于IP、基于端口、基于内容(基于IP效率最高)

3、lvs的三种工作模式:

NAT模式:调度器充当网关,与需要调度的服务器在同一网段,安全性能高,瓶颈就是调度器挂了就炸了。

IP隧道模式:tun模式,采用开放网络结构,调度器负责充当client端网络访问入口,将请求发给服务端,由服务端相应client端的请求(服务器端和调度器是通过ip隧道互通),安全性能低,性能高。

DR模式:直连路由模式,采用半开放网络结构,调度器负责充当client端网络访问入口,将请求发给服务端,由服务端相应client端的请求(服务端和调度器处于同一网段),性能最高,安全较高。

4、lvs的调度算法

静态:
1.轮询rr:将请求按顺序依次分配给各个web节点;
2.加权轮询wrr:根据web服务器的处理能力,动态调整权重,将请求按照各节点的负载情况进行顺序分配;
3.目标地址散列调度dh:根据请求的目标IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
4.源地址 hash:源地址散列”调度算法根据请求的源IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
动态:
1.最小连接Lc:根据web服务器的连接数量,将请求分配给web节点服务器;
2.加权最小连接WLC:根据web服务器的处理能力,动态调整权重,将请求按照各节点的连接数量进行分配,默认;
3.最短延迟调度SED:在WLC基础上改进,Overhead = (ACTIVE+1)*256/加权,不再考虑非活动状态,把当前处于活动状态的数目+1来实现,数目最小的,接受下次请求,+1的目的是为了考虑加权的时候,非活动连接过多缺陷:当权限过大的时候,会倒置空闲服务器一直处于无连接状态。
4.永不排队/最少队列调度NQ:无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要再进行sed运算,保证不会有一个主机很空间。在SED基础上无论+几,第二次一定给下一个,保证不会有一个主机不会很空闲着,不考虑非活动连接,才用NQ,SED要考虑活动状态连接,对于DNS的UDP不需要考虑非活动连接,而httpd的处于保持状态的服务就需要考虑非活动连接给服务器的压力。
5.基于局部性的最少链接LBLC:基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。
6.带复制的基于局部性最少连接LBLCR:带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按”最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

二、搭建lvs的NAT模式负载集群

拓补图如下:

实验环境

  • lvs网关

    [root@lvs-gw ~]# hostname

    lvs-gw

    [root@lvs-gw ~]# cat /etc/redhat-release

    CentOS Linux release 7.5.1804 (Core)
  • lvs服务器1

    [root@real-slave1 ~]# hostname

    real-slave1

    [root@real-slave1 ~]# cat /etc/redhat-release

    CentOS Linux release 7.5.1804 (Core)
  • lvs服务器2

    [root@real-slave2 ~]# hostname

    real-slave2

    [root@real-slave2 ~]# cat /etc/redhat-release

    CentOS Linux release 7.5.1804 (Core)

    操作步骤

    1、nginx集群环境配置
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel pcre-devel
#pcre让 Nginx 支持 Rewrite 功能(防盗链)
#创建nginx用户
useradd nginx -s /sbin/nologin
mkdir /usr/local/nginx
tar zxvf nginx-1.15.7.tar.gz -C /usr/local/nginx/
cd /usr/local/nginx/nginx-1.15.7
./configure --prefix=/usr/local/nginx \
--with-http_dav_module \
--with-http_stub_status_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_ssl_module \
--user=nginx \
--group=nginx \
--with-pcre
make ;make install
#nginx的服务管理
/usr/local/nginx/sbin/nginx #开启
#/usr/local/nginx/sbin/nginx -s stop 停止
#/usr/local/nginx/sbin/nginx -s reload 重载
cat <<END>> /etc/rc.d/rc.local ;chmod 755 /etc/rc.d/rc.local
> /usr/local/nginx/sbin/nginx
> END
#配置节点信息
cat <<END >> /usr/local/nginx/html/index.html
> node1
> END
#slave2有之前的配置。
[root@real-slave1 html]# cd ~
[root@real-slave1 ~]# curl -I 192.168.137.253
HTTP/1.1 200 OK
Server: nginx/1.15.7
Date: Thu, 20 Dec 2018 17:04:27 GMT
Content-Type: text/html
Content-Length: 6
Last-Modified: Thu, 20 Dec 2018 17:01:02 GMT
Connection: keep-alive
ETag: "5c1bcace-6"
Accept-Ranges: bytes
[root@real-slave1 ~]# curl -I 192.168.137.254
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Thu, 20 Dec 2018 17:04:39 GMT
Content-Type: text/html;charset=ISO-8859-1
Connection: keep-alive
Vary: Accept-Encoding
#网络配置
slave1ens33:192.168.137.253/24
slave2ens33:192.168.137.254/24

2、调度器lvs的配置

#设置lvs-gw的IP地址为
ens33:192.168.1.104/24
ens34:192.168.137.1/24
#重启网卡
systemctl restart network
调整调度器的相应参数
[root@lvs-gw ~]# cat /etc/sysctl.conf
#追加以下内容
net.ipv4.ip_forward = 1 #开启路由转发
加载lvs模块查看状态安装ipvsadm工具
[root@lvs-gw ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@lvs-gw ~]# modprobe ip_vs
[root@lvs-gw ~]# lsmod |grep ip_vs
ip_vs 141473 0
nf_conntrack 133053 8 ip_vs,nf_nat,nf_nat_ipv4,nf_nat_ipv6,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_ipv4,nf_conntrack_ipv6
libcrc32c 12644 4 xfs,ip_vs,nf_nat,nf_conntrack
[root@lvs-gw ~]# yum -y install ipvsadm #这个工具是用来编辑lvs规则的
清空并查看当前lvs规则
for i in ipvsadm ; do systemctl stop $i ;done
ipvsadm -C
ipvsadm -L
编写规则并保存
[root@lvs-gw ~]# ipvsadm -A -t 192.168.1.104:80 -s rr
[root@lvs-gw ~]# ipvsadm -a -t 192.168.1.104:80 -r 192.168.137.254:80 -m -w 1
[root@lvs-gw ~]# ipvsadm -a -t 192.168.1.104:80 -r 192.168.137.253:80 -m -w 1
[root@lvs-gw ~]# 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.137.100:80 rr
-> 192.168.137.253:80 Masq 1 0 0
-> 192.168.137.254:80 Masq 1 0 0
[root@lvs-gw ~]# ipvsadm-save

3、测试



再一次访问变成了tomca的页面

三、lvs的DR模式负载均衡集群

实现拓补图如下:

1、调度器的网络配置

[root@test ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens37
HWADDR=00:0C:29:99:14:1B
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=192.168.137.1
IPADDR1=192.168.137.100
PREFIX=24
PREFIX1=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_PRIVACY=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens37
UUID=3afdb262-1c74-339e-87bb-048e36444a3a
DEVICE=ens37
ONBOOT=yes
AUTOCONNECT_PRIORITY=-999
GATEWAY=192.168.137.1 #slave的环境就直接拿来用了

2、编写调度器的lvs调度规则

[root@test ~]# vim /etc/sysctl.conf
#追加以下内容
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens37.send_redirects = 0
#
[root@test ~]# sysctl -p
#加载模块
modprobe ip_vs
lsmod |grep ip_vs
yum install -y ipvsadm
systemctl stop ipvsadm
ipvsadm -C #清空lvs_规则
#添加dr的规则
[root@test ~]# ipvsadm -A -t 192.168.137.100:80 -s rr #-p是指定超时间隔
[root@test ~]# ipvsadm -a -t 192.168.137.100:80 -r 192.168.100.254 -g -w 1
[root@test ~]# ipvsadm -a -t 192.168.137.100:80 -r 192.168.100.253 -g -w 1
[root@test ~]# ipvsadm-save
-A -t test:http -s rr
-a -t test:http -r 192.168.100.253:http -g -w 1
-a -t test:http -r 192.168.100.254:http -g -w 1
[root@test ~]# 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.137.100:80 rr
-> 192.168.100.253:80 Route 1 0 0
-> 192.168.100.254:80 Route 1 0 0

配置完以上内容,在slave节点上还是存在数据包回包的问题,需要配置slave服务端的VIP

[root@real-slave1 ~]# cat <<END >> /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.137.100
NETMASK=255.255.255.255
ONBOOT=yes
NAME=lo:0 #slave节点配置一样
END
systemctl restart network

3、测试DR模式(直连路由模式)

客户端



第一次测试



关闭slave1的nginx再次测试



END

搭建Lvs负载均衡群集的更多相关文章

  1. 企业高并发的成熟解决方案(一)----搭建LVS负载均衡

    企业整个架构分析 1. App服务器上边部署应用,如果是java的话,一般是tomcat: 2. 负载均衡服务器负责转发请求,这种既有主机又有备机的负载均衡成为高可用(HA): 3. 一般web服务器 ...

  2. LVS负载均衡群集部署——DR模式

    LVS负载均衡群集部署--DR模式 1.LVS-DR概述 2.部署实验 1.LVS-DR概述: LVS-DR(Linux Virtual Server Director Server)工作模式,是生产 ...

  3. LVS负载均衡群集部署——NAT模式

    LVS负载均衡群集部署--NAT模式 1.群集应用概述 2.NAT模式LVS负载均衡群集部署 1.群集应用概述: 存在的问题: 互联网应用中,随着站点对硬件性能.响应速度.服务稳定性.数据可靠性等要求 ...

  4. 21.LVS负载均衡群集-DR群集

    LVS负载均衡群集-DR群集 目录 LVS负载均衡群集-DR群集 数据包流向分析 DR模式的特点 LVS-DR中的ARP问题 IP地址冲突 解决办法 路由根据ARP表项,会将新来的请求报文转发给Rea ...

  5. 20.LVS负载均衡群集—NAT模式实例

    LVS负载均衡群集-NAT模式实例 目录 LVS负载均衡群集-NAT模式实例 群集引用概述 群集的含义 问题 解决方法 企业群集分类 群集的三种类型 负载均衡群集(Load Balance Clust ...

  6. NAT模式 LVS负载均衡群集部署

    NAT模式 LVS负载均衡群集部署的操作步骤 实验环境准备: 负载调度器:内网关 ens33:172.16.10.1,外网关 ens37:12.0.0.1 Web节点服务器1:172.16.10.10 ...

  7. LVS负载均衡群集

    概述 群集的类型:无论是哪种服务器,都至少包括两台节点服务器,而对外表现为一个整体,只提供一个访问入口(域名或IP地址),相当于一台大型计算机.根据群集所针对的目标差异,可以分为以下三个类型: 1.负 ...

  8. LVS负载均衡群集(NAT)

    ----构建NAT模式的LVS群集----------client---------------LVS----------------WEB1-----------WEB2------------NF ...

  9. 大数据高并发系统架构实战方案(LVS负载均衡、Nginx、共享存储、海量数据、队列缓存)

    课程简介: 随着互联网的发展,高并发.大数据量的网站要求越来越高.而这些高要求都是基础的技术和细节组合而成的.本课程就从实际案例出发给大家原景重现高并发架构常用技术点及详细演练. 通过该课程的学习,普 ...

随机推荐

  1. [ Linux ] user, password, sudoers

    - 1. Add Linux user,  setup password http://linux.vbird.org/linux_basic/0410accountmanager.php - 2. ...

  2. PostgreSQL 事务管理的MVCC

    PostgreSQL的并发控制机制同时实现了多版本控制MVCC协议和两阶段封锁协议.实际采用哪种协议取决于所执行的语句类型. DML语句的并发控制将使用MVCC协议: DDL语句的并发控制基于标准的两 ...

  3. hdu 1257/1800 - 贪心,dp

    1257题目链接 一个序列划分子序列,每个子序列都是非增序列,问最少分成几个子序列 1800题目链接 一堆数分组,每组内数据严格递减,问最少分几组 -------------------------- ...

  4. dede内链怎么优化,Dedecms内部链接优化技巧

    dede内链怎么优化,dedecms内部链接优化技巧 使用dedecms的过程中发现,可以通过dedecms的文档关键词维护功能.发表文章时候的关键词添加功能(也可以自动获取)以及核心设置里面的是否使 ...

  5. JQ 添加节点和插入节点的方法总结

    转载来源:http://blog.csdn.net/ss1106404013/article/details/49274345 添加节点的jQuery方法: append().prepend().ap ...

  6. bzoj2333 [SCOI2011]棘手的操作(洛谷3273)

    题目描述 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来有如下一些操作:U x y: 加一条边,连接第x个节点和第y个节点A1 x v: 将第x个节点的权 ...

  7. POJ-1511 Invitation Cards 往返最短路 邻接表 大量数据下的处理方法

    题目链接:https://cn.vjudge.net/problem/POJ-1511 题意 给出一个图 求从节点1到任意节点的往返路程和 思路 没有考虑稀疏图,上手给了一个Dijsktra(按紫书上 ...

  8. 洛谷 P1052 过河 (离散化+dp)

    dp非常好想, f[i] = min(f[i-len] + stone[i]) s <= len <= t 然后因为L非常大,所以我就不知道该怎么搞了 我看到m只有100,而L有1e9,我 ...

  9. WPF 内存释放

    原文:WPF 内存释放 在WPF 项目中引用到Transitionals 实现图片转场特效,发现每次图片转场内存都会增加,在每次转场后进行内存压缩 记录 解决方案如下: GC.Collect(); G ...

  10. 【codeforces 379D】New Year Letter

    [题目链接]:http://codeforces.com/contest/379/problem/D [题意] 让你构造出两个长度分别为n和m的字符串s[1]和s[2] 然后按照连接的规则,顺序连接s ...