负载均衡集群LVS(及资料)

负载均衡集群LVS介绍

一文读懂负载均衡之LVS: https://blog.csdn.net/yinwenjie/article/details/46845997

• LVS是由国人章文嵩开发

• 流行度不亚于apache的httpd,基于TCP/IP做的路由和转发,稳定性和效率很高

• LVS最新版本基于Linux内核2.6,有好多年不更新了

• LVS有三种常见工作的模式:

1)VS/NAT模式(Network address translation)

2)VS/TUN模式(tunneling)

3)DR模式(Direct routing)

官方三种负载均衡技术比较总结表:

 

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

• LVS是Linux Virtual Server的简称,即Linux虚拟服务器。目前,LVS项目已经被集成到Linux内核中。LVS具有良好的可靠性、可扩展性和可操作性,加上其实现最优的集群服务性能所需的低廉成本, LVS的负载均衡功能经常被用于高性能、高可用的服务器群集中。

• 基于LVS技术可以实现很多高伸缩、高可用的网络服务,例如Web服务、Cache服务、DNS服务FTP服务、MAIL服务、视频/音频点播服务等。

•  LVS 是整个站点架构中的流量入口,根据网络规模和业务需求,构建负载均衡集群;完成网络与业务服务器的衔接,提供高性能、高可用的负载调度能力,以及统一的网络层防攻击能力;SNAT 集中提供数据中心的公网访问服务,通过集群化部署,保证出网服务的高性能与高可用。

•  在基于LVS 项目架构的服务器集群系统中,通常包含三个功能层次:最前端的负载均衡层( Load Balancer )、中间的物理服务器群组层( Server Array )以及最底端的数据共享存储层( Shared Storage )。

• LVS是一个开源的软件,可以实现LINUX平台下的简单负载均衡。LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器。目前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR);八种调度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh)

• 主流开源软件LVS、keepalived、haproxy、nginx等;

•   根据lvs在第四层的限定了它的特性。传输层的路由交换基于地址和端口,lvs的也可以根据目标地址和目标端口实现请求转发。lvs工作于iptables/netfiler的input链上,与iptables/netfiler的工作原理及其相似ipvsadm/ipvs。ipvsadm是lvs工具,ipvs工作与内核。

• LVS 的转发主要通过修改 IP 地址(NAT 模式,分为源地址修改 SNAT 和目标地址修改 DNAT)、修改目标 MAC(DR 模式)来实现。

• 其中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层的更加灵活,能实现更多的个性化需求。

• 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群。常用的负载均衡开源软件有nginx、lvs、haproxy,商业的硬件负载均衡设备F5、Netscale。这里主要是学习 LVS 并对其进行了详细的总结记录;

• LVS-FW方式实现LVS的affinity应用,LVS FWM 持久性连接应用环境理论及实现 • • LVS 10种调度方案RR、WRR、SH、DH、LC、WLC、SED、NQ、LBLC、LBLCR详解及应用场景, LVS讲解八种负载均衡调度算发;

固定调度算法:rr,wrr,dh,sh

动态调度算法:wlc,lc,lblc,lblcr

LVS(Linux Virtual Server)是一个高可用性虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。LVS主要用于多服务器的负载均衡,作用于网络层。LVS构建的服务器集群系统中,前端的负载均衡层被称为Director Server;后端提供服务的服务器组层被称为Real Server。通过下图可以大致了解LVS的基础架构。

587add101380ec026d7c7b468b24907ff11.jpg

LVS有三种工作模式,分别是DR(Direct Routing 直接路由)、TUN(Tunneling IP隧道)、NAT(Network Address Translation 网络地址转换)。其中TUN模式能够支持更多的Real Server,但需要所有服务器支持IP隧道协议;DR也可以支持相当的Real Server,但需要保证Director Server虚拟网卡与物理网卡在同一网段;NAT扩展性有限,无法支持更多的Real Server,因为所有的请求包和应答包都需要Director Server进行解析再生,影响效率。

                                         LVS 集群架构图

07bafbaadee2b6b17437ca658ef98c91f1a.jpg

( 1 ) Load Balancer层

负载均衡层位于整个集群系统的最前端,由一台或者多台负载调度器( Director Server )组成, LVS模块就安装在Director Server的系统上。Director Server的主要功能类似路由器,完成LVS 负载转发功能所设定的路由表,利用这些路由表信息把用户的请求分发到Sever Array层的物理服务器( Real Server )上。为了监测各个Real Server服务器的健康状况,在Director Server上还要安装监控模块Ldirectord。

而当监控到某个Real Server不可用时,该服务器会被从LVS 路由表中剔除,恢复时又会重新加入。

( 2 ) Server Array 层

服务器阵列或服务器池由一组实际运行应用服务的物理机器组成,Real Server可以是Web服务器、Mail 服务器、FTP服务器、DNS服务器以及视频服务器中的一个或者多个的组合。每个Real Server之间通过高速的LAN或分布在各地的WAN 相连接。

Director Server同时兼任Real Server的角色,在Real Server同时部署LVS模块。

( 3) Shared Storage 层
存储层是为所有Real Server提供共享存储空间和内容一致性的存储区域,在物理实现上,该层一般由磁盘阵列设备组成。LVS的核心功能是为集群服务提供软件负载均衡。

负载均衡技术有很多实现方案,如基于DNS 域名轮流解析方案、基于客户端调度访问方案、基于应用层系统负载的调度方案,以及基于IP地址的调度方案。在上述列举的负载调度算法中,执行效率最高的是IP负载均衡技术,LVS 的IP 负载均衡技术是通过IPVS模块来实现的, IPVS是LVS 集群系统的核心软件,其主要安装在集群的Director Server上,并在Director Server上虚拟出一个服务IP地址,用户对服务的访问只能通过该虚拟IP地址实现。这个虚拟IP通常称为LVS的VIP( Virtual IP ),用户的访问请求首先经过VIP到达负载调度器,然后由负载调度器从Real Server列表中按照一定的负载均衡算法选取一个服务节点响应用户的请求。

IPVS 实现数据路由转发的机制有三种,分别是NAT 、TUN 和DR技术。

 

LVS的优点:
1、抗负载能力强、工作在第4层仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的;无流量,同时保证了均衡器IO的性能不会受到大流量的影响;
2、工作稳定,自身有完整的双机热备方案,如LVS+Keepalived和LVS+Heartbeat;
3、应用范围比较广,可以对所有应用做负载均衡;
4、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率;
LVS的缺点:
1、软件本身不支持正则处理,不能做动静分离,这就凸显了Nginx/HAProxy+Keepalived的优势。
2、如果网站应用比较庞大,LVS/DR+Keepalived就比较复杂了,特别是后面有Windows Server应用的机器,实施及配置还有维护过程就比较麻烦,相对而言,Nginx/HAProxy+Keepalived就简单多了。

 

      LVS的类型:

                lvs-nat:network address translation,NAT地址转换

                lvs-dr:direct routing ,直接路由

                lvs-tun:tunneling,基于隧道的dr

    

      LVS的术语:
               director/real server

               IP:
                  VIP:Virtual IP 虚拟ip
                  DIP: Director IP 多负载调度器ip
                  RIP: Real Server IP 真实服务器ip
                  CIP:Client IP 客户端ip

              ipvs: ip virtual server

 

十种调度算法:

• 静态调度算法(4种):

  (1).rr : round robin :轮叫,轮询

   (2) .wrr: weight round robin :加权轮询(以权重之间的比例实现在各主机之间进行调度) 

   (3) .sh : source hashing : 源地址hash实现会话绑定sessionaffinity  

   (4) .dh : destination hashing : 目标地址hash

 

• 动态调度算法(6种):

   (1).lc :leash-connection 最少连接 

   (2).wlc :加权最少连接  

   (3).sed :最少期望延迟 

   (4).nq :never queue 永不排队  

   (5).LBLC :基于局部性的最少连接 

   (6).LBLCR :基于局部性的带复制功能的最少连接  

 

Keepalived 是运行在lvs 之上,它的主要功能是实现真实机的故障隔离及负载均衡器间的失败切换,提高系统的可用性。

注:LVS默认调度算法是 wlc 。

• LVS 八种调度算法

     1、 轮叫调度

    2、 加权轮叫

    3、最少连接

    4、加权最少连接

    5、基于局部性的最少连接

    6、带复制的基于局部性的最少连接

    7、目标地址散列

    8、源地址散列

 

LVS 的工作模式主要有 4 种:

  • DR
  • NAT
  • TUNNEL
  • Full-NAT
  •  

Lvs常用术语说明

术语

解释

Load balancer或director

负载调度器

RS或Real Server

真实服务器,提供服务的服务器

VIP

虚拟IP地址,客户端访问集群的地址

RIP

集群所提供应用程序的地址(HTTP,FTP)

DIP

调度器的真实地址

 

lvs的工作模式


       NAT模式(VS-NAT):把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,并发至此RS来处理,RS处理完
成后把数据交给经过负载均衡器,负载均衡器再把数据包的原IP地址改为自己的IP,将目的地址改为客户端IP地址即可。
     IP隧道模式TUN模式(VS-TUN):把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS,RS收到后,先把数据包的头解开,还原
数据包,处理后,直接返回给客户端,不需要再经过负载均衡器。
直接路由模式(VS-DR):负载均衡器和RS都使用同一个IP对外服务。只有DR对ARP请求进行响应,所有RS对本身这个IP的ARP请求保持
静默。

 

LVS NAT模式

• 这种模式借助iptables的nat表来实现

• 用户的请求到分发器后,通过预设的iptables规则,把请求的数据包转发到后端的rs上去

rs需要设定网关为分发器的内网ip

• 用户请求的数据包和返回给用户的数据包全部经过分发器,所以分发器成为瓶颈

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

 

LVS主要组成部分

  负载调度器(load balancer/ Director),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。 
  服务器池(server pool/ Realserver),是一组真正执行客户请求的服务器,执行的服务一般有WEB、MAIL、FTP和DNS等。 
  共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。

 

LVS集群采用三层结构,其体系结构如图所示: 

991447848b43be948953dac567f29fd711f.jpg

 

LVS NAT模式

• 这种模式借助iptables的nat表来实现

• 用户的请求到分发器后,通过预设的iptables规则,把请求的数据包转发到后端的rs上去

• rs需要设定网关为分发器的内网ip

• 用户请求的数据包和返回给用户的数据包全部经过分发器,所以分发器成为瓶颈

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

 VS/NAT是一种最简单的方式,所有的RealServer只需要将自己的网关指向Director即可。客户端可以是任意操作系统,但此方式下,一个Director能够带动的RealServer比较有限。在VS/NAT的方式下,Director也可以兼为一台RealServer。VS/NAT的体系结构如图所示。 

                                220009_jZtW_3803405.png

LVS IP Tunnel模式(VS/TUN)    [IP隧道]

• 这种模式,需要有一个公共的IP配置在分发器和所有rs上,我们把它叫做vip

• 客户端请求的目标IP为vip,分发器接收到请求数据包后,会对数据包做一个加工,会把目标IP改为rs的IP,这样数据包就到了rs上

• rs接收数据包后,会还原原始数据包,这样目标IP为vip,因为所有rs上配置了这个vip,所以它会认为是它自己

• IP隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。

• IP隧道技术亦称为IP封装技术(IP encapsulation)。IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的IP地址。

220041_u5Qx_3803405.png

LVS DR模式 (VS/DR) [直接路由]

• 这种模式,也需要有一个公共的IP配置在分发器和所有rs上,也就是vip

• 和IP Tunnel不同的是,它会把数据包的MAC地址修改为rs的MAC地址

• rs接收数据包后,会还原原始数据包,这样目标IP为vip,因为所有rs上配置了这个vip,所以它会认为是它自己

• VS/DR方式是通过改写请求报文中的MAC地址部分来实现的。Director和RealServer必需在物理上有一个网卡通过不间断的局域网相连。

• Director的VIP地址对外可见,而RealServer的VIP对外是不可见的。RealServer的地址即可以是内部地址,也可以是真实地址。

• VS/DR的工作流程如图所示:它的连接调度和管理与VS/NAT和VS/TUN中的一样,它的报文转发方法又有不同,将报文直接路由给目标服务器。

• 在VS/DR中,调度器根据各个服务器的负载情况,动态地选择一台服务器,不修改也不封装IP报文,而是将数据帧的MAC地址改为选出服务器的MAC地址,再将修改后的数据帧在与服务器组的局域网上发送。因为数据帧的MAC地址是选出的服务器,所以服务器肯定可以收到这个数据帧,从中可以获得该IP报文。

220115_sbM3_3803405.png

VS/DR的方式是目前大型网站使用最广泛的一种负载均衡手段。

注意:linuxDirctor就是分发器

LVS调度算法

• 轮询 Round-Robin  rr

• 加权轮询 Weight Round-Robin wrr

• 最小连接 Least-Connection lc

• 加权最小连接 Weight Least-Connection wlc

• 基于局部性的最小连接 Locality-Based Least Connections lblc

• 带复制的基于局部性最小连接 Locality-Based Least Connections with Replication  lblcr

• 目标地址散列调度 Destination Hashing dh

• 源地址散列调度 Source Hashing  sh

 

三种负载均衡方式比较

  VS/NAT 的优点是服务器可以运行任何支持TCP/IP的操作系统,它只需要一个IP地址配置在调度器上,服务器组可以用私有的IP地址。缺点是它的伸缩能力有限,当服务器结点数目升到20时,调度器本身有可能成为系统的新瓶颈,因为在VS/NAT中请求和响应报文都需要通过负载调度器

 基于 VS/NAT的的集群系统可以适合许多服务器的性能要求。如果负载调度器成为系统新的瓶颈,可以有三种方法解决这个问题:混合方法、VS/TUN和 VS/DR。在DNS混合集群系统中,有若干个VS/NAT负调度器,每个负载调度器带自己的服务器集群,同时这些负载调度器又通过RR-DNS组成简单的域名。 

 但VS/TUN和VS/DR是提高系统吞吐量的更好方法。 

 在VS/TUN 的集群系统中,负载调度器只将请求调度到不同的后端服务器,后端服务器将应答的数据直接返回给用户。这样,负载调度器就可以处理大量的请求,它甚至可以调度百台以上的服务器(同等规模的服务器),而它不会成为系统的瓶颈。即使负载调度器只有100Mbps的全双工网卡,整个系统的最大吞吐量可超过 1Gbps。所以,VS/TUN可以极大地增加负载调度器调度的服务器数量。 

    VS/TUN技术对服务器有要求,即所有的服务器必须支持“IP Tunneling”或者“IP Encapsulation”协议。目前,VS/TUN的后端服务器主要运行Linux操作系统。VS/TUN调度器可以调度上百台服务器,而它本身不会成为系统的瓶颈。

      跟VS/TUN方法一样,VS/DR调度器只处理客户到服务器端的连接,响应数据可以直接从独立的网络路由返回给客户。这可以极大地提高LVS集群系统的伸缩性。

      跟VS/TUN方法一样,VS/DR调度器只处理客户到服务器端的连接,响应数据可以直接从独立的网络路由返回给客户。这可以极大地提高LVS集群系统的伸缩性。

 三种LVS负载均衡技术的优缺点归纳以下表:

5355c6c15ba029506a3acd0037a1f0a14ab.jpg

 

NAT模式搭建 – 准备工作

• 三台机器

• 分发器,也叫调度器(简写为dir)

• 内网:133.130,外网:142.147(vmware仅主机模式)(01机器)

• rs1

• 内网:133.132,设置网关为133.130

• rs2

• 内网:133.133,设置网关为133.130

• 三台机器上都执行执行

• systemctl stop firewalld; systemc disable firewalld

• systemctl start  iptables-services; iptables -F; service iptables save

注意:需要三台虚拟机01,02,03,有一台是前两台其中之一一台的克隆机03,克隆机03要修改IP地址,也可以再安装一台,以免IP地址重复,方便远程连接。

 

关闭三台虚拟机01,02,03上面的防火墙。在xhell5上面操作

[root@localhosts ]# systemctl stop firwalld

[root@localhosts ]# systemctl disable firwalld

[root@localhosts ]#iptables -nvL              #查看防火墙有没有关闭,显示out说明关闭了



在02机器上面安装防火墙包,便于使用iptables命令。

[root@localhosts 02 ]# yum install -y iptables-service
[root@localhosts 02 ]#systemctl start iptables-service
[root@localhosts 02 ]#rpm -ql iptables-service           #查看有没有安装iptables-service服务
[root@localhosts 02 ]# systemctl enable iptables-service
[root@localhosts 02 ]# iptables -F
[root@localhosts 02 ]# service iptables save


在所有机器上面操作
[root@localhosts ]# getenofrce 
Enforcng
[root@localhosts ]# setenforce 0


永久关闭
[root@localhosts ]# vim /etc/selinux/config
SELINUX=disabled                         #把第一个selinux修改

 

修改IP地址克隆机03,在虚拟机上面操作

[root@localhosts 03]# vim /etc/sysconfig/network-scripts/ifcfg-ens33  修改IP地址
......
......
IPADDR=192.168.133.133                    #把132修改成133即可
....
....
[root@localhosts 03] systemctl restart network          #启动网卡
然后在xshell5上面,远程连接


在xshel5上面修改主机名
[root@localhosts 02]hostnamectl set-hostname localhosts 03
[root@localhosts 02]bash

在01上面操作

[root@localhosts 01]# vim /etc/sysconfig/network-scripts/ifcfg-ens37  修改IP地址
......
......
IPADDR=192.168.133.132             
....
[root@localhosts 01]# ifup ens37

然后再Windows上ping一下,192.168.142.147  ,能ping通说明能通信

在02上面操作

[root@localhosts 01]# vim /etc/sysconfig/network-scripts/ifcfg-ens37  修改IP地址
......
.....

......
IPADDR=192.168.142.147               
....
....
....
[root@localhosts 01]# ifup ens37

然后再Windows上ping一下,192.168.142.147  ,能ping通说明能通信

如果yum在03上面,安装不了,执行下面的操作

[root@localhosts 03]# cd /etc/yum.repos.d/
[root@localhosts yum.repos.d]# ls

[root@localhosts yum.repos.d]# mv epel-repo epel-repo.1
[root@localhosts yum.repos.d]# yum list | grep iptables-service

[root@localhosts yum.repos.d]# yum install -y iptables-service


[root@localhosts yum.repos.d]# systemctl start iptables-service             #开启服务

 

NAT模式搭建

• 在dir(01)上安装ipvsadm

• yum install -y ipvsdam

• 在dir上编写脚本,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

# 注意区分网卡名字,阿铭的两个网卡分别为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

iptables -t nat -X

iptables -t nat -A POSTROUTING -s 192.168.133.0/24  -j MASQUERADE

# director设置ipvsadm

IPVSADM='/usr/sbin/ipvsadm'

$IPVSADM -C

$IPVSADM -A -t 192.168.147.144:80 -s wlc -p 3

$IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.132:80 -m -w 1

$IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.133:80 -m -w 1

实例:

在dir(01)上安装ipvsadm

[root@localhosts 01]# yum install -y ipvsdam
[root@localhosts 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

# 注意区分网卡名字,阿铭的两个网卡分别为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

iptables -t nat -X

iptables -t nat -A POSTROUTING -s 192.168.133.0/24  -j MASQUERADE

# director设置ipvsadm

IPVSADM='/usr/sbin/ipvsadm'

$IPVSADM -C

$IPVSADM -A -t 192.168.147.144:80 -s wlc 
$IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.132:80 -m -w 1

$IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.133:80 -m -w 1
root@localhosts 01]# sh /usr/local/sbin/lvs_nat.sh

查看规则
root@localhosts 01]# ipvsadm -ln                       #查看ipvsadm规则,出现IP地址说明,执行成功了





 

NAT模式效果测试

• 两台rs上都安装nginx

• 设置两台rs的主页,做一个区分,也就是说直接curl两台rs的ip时,得到不同的结果

• 浏览器里访问192.168.142.147,多访问几次看结果差异

实例:

查看你=nginx服务有没有开启。80端口是否被占用
[root@localhosts 02]# ps aux | grep nginx

[root@localhosts 02]# netstat -lnpt
[root@localhosts 02]# systemctl start nginx                   #启动nginx服务
[root@localhosts 02]# !ps
[root@localhosts 02]# curl localhost
back backup.

[root@localhosts 02]# vi /uar/share/nginx/html/index.html
aming02

[root@localhosts 02]# curl localhost
aming02

[root@localhosts 02]# 
[root@localhosts 02]# 
[root@localhosts 02]# 


03机器上面操作
[root@localhosts 03]#s ystemctl start nginx                   #启动nginx服务
[root@localhosts 03]# vi /uar/share/nginx/html/index.html
aming03

[root@localhosts 03]#curl localhost
aming03


测试
root@localhosts 01]# curl 192.168.142.147
aming02
root@localhosts 01]# curl 192.168.142.147
aming03

在浏览器里面输入:192.168.142.147

77c2258ff380d859eb18af4a2429fccb05a.jpg

 

DR模式搭建 – 准备工作

• 三台机器

• 分发器,也叫调度器(简写为dir)

• 133.130

• rs1

• 133.132

• rs2

• 133.133

• vip

• 133.200

实例:

修改会GATEWAY

[root@localhosts 02]# vi /etc/sysconfig/networks-scripts/ifcfg-ens33
修改会原来的IP地址
GATEWAY=192.168.133.2


[root@localhosts 02]# systemctl restart network

[root@localhosts 03]# vi /etc/sysconfig/networks-scripts/ifcfg-ens33
修改会原来的IP地址
GATEWAY=192.168.133.2

[root@localhosts 03]# systemctl restart network

DR模式搭建

一、

• dir上编写脚本 vim /usr/local/sbin/lvs_dr.sh //内容如下

#! /bin/bash

echo 1 > /proc/sys/net/ipv4/ip_forward

ipv=/usr/sbin/ipvsadm

vip=192.168.133.200

rs1=192.168.133.132

rs2=192.168.133.133

#注意这里的网卡名字

ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip dev ens33:2

$ipv -C

$ipv -A -t $vip:80 -s wrr

$ipv -a -t $vip:80 -r $rs1:80 -g -w 1

$ipv -a -t $vip:80 -r $rs2:80 -g -w 1

二、

• 两台rs上也编写脚本 vim /usr/local/sbin/lvs_rs.sh//内容如下

#/bin/bash

vip=192.168.133.200

#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端

ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip lo:0

#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端

#参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce

echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

• 分别在dir上和两个rs上执行这些脚本

• 测试

实例:

[root@localhosts 01]# vim /usr/local/sbin/lvs_dr.sh 
#! /bin/bash

echo 1 > /proc/sys/net/ipv4/ip_forward

ipv=/usr/sbin/ipvsadm

vip=192.168.133.200

rs1=192.168.133.132

rs2=192.168.133.133

#注意这里的网卡名字
ifdown ens33
ifup ens33
ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip dev ens33:2

$ipv -C

$ipv -A -t $vip:80 -s rr

$ipv -a -t $vip:80 -r $rs1:80 -g -w 1

$ipv -a -t $vip:80 -r $rs2:80 -g -w 1


[root@localhosts 01]#  sh /usr/local/sbin/lvs_dr.sh 


在两台rs上面操作
[root@localhosts 02]# vim /usr/local/sbin/lvs_rs.sh
#/bin/bash

vip=192.168.133.200

#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端

ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip lo:0

#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端

#参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce

echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

​
[root@localhosts 02]# vim /usr/local/sbin/lvs_rs.sh
#/bin/bash

vip=192.168.133.200

#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifdown lo
ifup lo
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip lo:0

#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端

#参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce

echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce


[root@localhosts 02]# sh /usr/local/sbin/lvs_rs.sh


[root@localhosts 03]# vim /usr/local/sbin/lvs_dr.sh
#/bin/bash

vip=192.168.133.200

#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端

ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip lo:0

#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端

#参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce

echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce


[root@localhosts 03]# sh /usr/local/sbin/lvs_dr.sh


在所有的机器上面操作,查看是否有192.168.133.200,IP地址
[root@localhosts ]# route -n

[root@localhosts ]# ip add


[root@localhosts ]# iptables -t nat -F
[root@localhosts ]# curl http://192.168.133.200/
[root@localhosts ]#

[root@localhosts 01]# ipvsadm -ln

测试

在浏览器里面输入:192.168.133.200

aa1b7c169419d62e3258ef311a47b1f02d9.jpg

Keepalived+LVS DR

• 编辑keepalived配置文件 vim /etc/keepalived/keepalived.conf//内容请到https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/lvs_keepalived.conf 获取

• 需要更改里面的ip信息

• 执行ipvsadm -C  把之前的ipvsadm规则清空掉

• systemctl restart network 可以把之前的vip清空掉

• 两台rs上,依然要执行/usr/local/sbin/lvs_rs.sh脚本

• keepalived有一个比较好的功能,可以在一台rs宕机时,不再把请求转发过去

• 测试

实例:

[root@localhosts 03]# systemctl stop nginx                   #关闭nginx 
然后在浏览器刷新页面,发现页面刷新不了
[root@localhosts 03]# ps aux | grep nginx 


[root@localhosts 01]# ipvsadm  -ln



[root@localhosts 01]# vi /etc/keepalived/keepalived.conf        #把里面的东西清空之后复制,下面的内容
vrrp_instance VI_1 {
    #备用服务器上为 BACKUP
    state MASTER
    #绑定vip的网卡为ens33,你的网卡和阿铭的可能不一样,这里需要你改一下
    interface ens33
    virtual_router_id 51
    #备用服务器上为90
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass aminglinux
    }
    virtual_ipaddress {
        192.168.133.200
    }
}
virtual_server 192.168.133.200 80 {
    #(每隔10秒查询realserver状态)
    delay_loop 10
    #(lvs 算法)
    lb_algo wlc
    #(DR模式)
    lb_kind DR
    #(同一IP的连接60秒内被分配到同一台realserver)
    persistence_timeout 60
    #(用TCP协议检查realserver状态)
    protocol TCP

    real_server 192.168.133.132 80 {
        #(权重)
        weight 100
        TCP_CHECK {
        #(10秒无响应超时)
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    real_server 192.168.133.133 80 {
        weight 100
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}


[root@localhosts 01]# systemctl start keepalived             #开启 keepalived 

[root@localhosts 01]# ps aux | grep keep
[root@localhosts 01]# ip add
[root@localhosts 01]# ipvsadm -ln
[root@localhosts 01]# ip add

[root@localhosts 01]# systemctl stop keepalived                   #关闭 keepalived 

[root@localhosts 03]# systemctl start nginx

[root@localhosts 01]# ipvsadm -ln
[root@localhosts 01]# systemctl start keepalived                   #开启 keepalived 
[root@localhosts 01]# ipvsadm -ln

 

 

 

 

常见问题:

dir配置好了,ping外网也能成功,ping新网卡ens37也能ping通,另两台执行curl也能显示出aming02和aming03,但是在浏览器上实验却不成功。这是什么原因造成的?

答:1 网络架构搞清楚: dir一个内网,一个外网, rs只有一个内网, rs需要配置网关为dir的内网ip。

2 仔细检查脚本内容,是否和我的一致。注意,并不是连IP都照搬,需要和你的网络匹配。

3 你的windows电脑是否可以ping通这个“外网”地址?

 

2、生产环境下 部署 lvs dr模式的话,是将分发器 dr 和 rs分开来。

 

还是将 dr和rs(nginx)安装在一起吗 ,要是还要用keepalived ,用2台机器如何做呢?

 

dir1 : 安装nginx + keepalived

dir2:    安装nginx + keepalived 

感觉这样实现不了负载均衡啊,只是高可用,

因为  要是dir1的nginx 或keepalived 宕了,vip 转移到dir2上,提供nginx服务。

答:生产环境中需要把dir和rs分开的。

keepalived+nginx 就是为了给nginx做高可用。 没有考虑rs。

3、为什么停止Nginx应用,keepalived就认为RS宕机呢?我做实验没有开nginx,编辑好dir配置文件,也有2台虚拟机ip

答:nginx是核心服务,它停掉了,keepalived肯定以为你这服务相当于没有。

因为keepalived 的配置文件监控的是80端口(real_server 192.168.188.129 80 ),停掉nginx,80端口不通,keepalived认为这台服务器down掉了。

4、实际生产环境 keepalived+lvs 下域名应该怎么配置, 是绑定vip吗 ? vip应该是公网ip吗 

答:域名应该绑定到vip上。 vip可以是内网啊。 

有的公司,服务器全部跑在内网里,在内网环境下做一个lvs,提供一个内网的vip出来。 外网要想访问,通过端口映射或者用带外网的代理服务器(如,nginx)代理。

 

5、LVS/DR如何处理请求报文的,会修改IP包内容吗?

5.1 vs/dr本身不会关心IP层以上的信息,即使是端口号也是tcp/ip协议栈去判断是否正确,vs/dr本身主要做这么几个事:

1)接收client的请求,根据你设定的负载均衡算法选取一台realserver的ip;

2)以选取的这个ip对应的mac地址作为目标mac,然后重新将IP包封装成帧转发给这台RS;

3)在hash table中记录连接信息。

vs/dr做的事情很少,也很简单,所以它的效率很高,不比硬件负载均衡设备差多少。

数据包、数据帧的大致流向是这样的:client --> VS --> RS --> client

1.2 前面已作了回答,vs/dr不会修改IP包的内容.

 

6. RealServer为什么要在lo接口上配置VIP?在出口网卡上配置VIP可以吗?

6.1 既然要让RS能够处理目标地址为vip的IP包,首先必须要让RS能接收到这个包。

在lo上配置vip能够完成接收包并将结果返回client。

6.2 答案是不可以将VIP设置在出口网卡上,否则会响应客户端的arp request,造成client/gateway arp table紊乱,以至于整个load balance都不能正常工作。

 

7. RealServer为什么要抑制arp帧?

这个问题在上一问题中已经作了说明,这里结合实施命令进一步阐述。我们在具体实施部署的时候都会作如下调整:

       echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce我相信很多人都不会弄懂它们的作用是什么,只知道一定得有。我这里也不打算拿出来详细讨论,只是作几点说明,就当是补充吧。

7.1

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce这两条是可以不用的,因为arp对逻辑接口没有意义。

 

7.2 如果你的RS的外部网络接口是eth0,那么

echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce其实真正要执行的是:

echo "1" >/proc/sys/net/ipv4/conf/eth0/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/eth0/arp_announce所以我个人建议把上面两条也加到你的脚本里去,因为万一系统里上面两条默认的值不是0,那有可能是会出问题滴。

 

8. LVS/DR load balancer(director)与RS为什么要在同一网段中?

从第一个问题中大家应该明白vs/dr是如何将请求转发给RS的了吧?它是在数据链路层来实现的,所以director必须和RS在同一网段里面。

 

9. 为什么director上lo接口除了VIP另外还要在eth0配一个ip(即DIP)?

9.1 如果是用了keepalived等工具做HA或者Load Balance,则在健康检查时需要用到DIP。

9.2 没有健康检查机制的HA或者Load Balance则没有存在的实际意义。

 

10. LVS/DR ip_forward需要开启吗?

不需要。因为director跟realserver是同一个网段,无需开启转发。

 

11. director的vip的netmask一定要是255.255.255.255吗?

lvs/dr里,director的vip的netmask 没必要设置为255.255.255.255,也不需要再去

route add -host $VIP dev eth0:0director的vip本来就是要像正常的ip地址一样对外通告的,不要搞得这么特殊.

 

 

扩展
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

haproxy+keepalived  http://blog.csdn.net/xrt95050/article/details/40926255
nginx、lvs、haproxy比较  http://www.csdn.net/article/2014-07-24/2820837
keepalived中自定义脚本 vrrp_script   http://my.oschina.net/hncscwc/blog/158746
lvs dr模式只使用一个公网ip的实现方法   http://storysky.blog.51cto.com/628458/338726

 

参考链接:

 

 

链接:

理解LVS工作原理     :   http://blog.51cto.com/11010461/2118570

LVS 原理(调度算法、四种模式的实现、四层负载均衡和七层 的区别)   :  https://blog.csdn.net/ioy84737634/article/details/44916241

lvs四种负载均衡类型,十种调度算法                          :    http://blog.51cto.com/11838039/1831426

LVS的Full-NAT模式https://mp.weixin.qq.com/s/aFpvsFR6TPVRs2i8uBUM_A

使用 LVS 实现负载均衡原理及安装配置详解:https://mp.weixin.qq.com/s/x3Kw09Ok2UWfLZRcqZ30yw

应用负载均衡之LVS(一):基本概念和三种模式:https://mp.weixin.qq.com/s/9MFmb0XFxiOcUk4wZtRmtQ

CentOS7.4——构建LVS负载均衡群集—地址转换模式(LVS-NAT):https://www.iyunv.com/thread-448518-1-1.html

 CentOS7.4—构建LVS+Keepalived高可用群集:  https://www.iyunv.com/thread-448517-1-1.html        

lvs+keepalived+nginx实现高性能负载均衡集群:      http://www.cnblogs.com/liuyisai/p/5990645.html

LVM挂载失败mount: you must specify the filesystem type:

https://www.cnblogs.com/aresxin/p/4999006.html

负载均衡SLB高可用的四个层次:  https://mp.weixin.qq.com/s/vmBRAFDxRv9LROCrgePvnA

 

LVS | LVS-NAT 模式安装 : https://blog.csdn.net/liupeifeng3514/article/details/79038714

 

LVS | LVS-DR 模式安装 : https://blog.csdn.net/liupeifeng3514/article/details/79038603

LVS-NAT模型/LVS-DR模型实践        :  http://blog.51cto.com/pirateli/1654733

 

LVS | LVS 负载均衡之工作原理说明(TUN模式) : https://blog.csdn.net/liupeifeng3514/article/details/79038588

LVS | LVS 负载均衡之工作原理说明(DR模式) : https://blog.csdn.net/liupeifeng3514/article/details/79038577

 

LVS | LVS 负载均衡之工作原理说明(NAT模式) : https://blog.csdn.net/liupeifeng3514/article/details/79038553

LVS | LVS 安装使用详解(ipvsadm命令) : https://blog.csdn.net/liupeifeng3514/article/details/79038519

脚本实现VS/DR类型的快速部署         : http://blog.51cto.com/zhaochj/1650202

LVS的VS/NAT及VS/DR类型实现          :    http://blog.51cto.com/zhaochj/1650198

lvs安装及基本语法介绍        :   http://blog.51cto.com/zhaochj/1650098

集群及LVS基础知识整理        :http://blog.51cto.com/zhaochj/1643712

企业实战(2)-实现基于LVS负载均衡集群的电商网站架构    : http://blog.51cto.com/mozart/1981399

 

 

 

LVS在大流量下基于OSPF的负载均衡实施方案 荐        :      http://blog.51cto.com/rfyiamcool/1217667

LVS详解及基于LVS实现web服务器负载均衡            :        http://blog.51cto.com/scholar/1656073

LVS | LVS 10种调度算法简介 : https://blog.csdn.net/liupeifeng3514/article/details/79038498

LVS | LVS 的三种工作方式(TUN原理)(三) : https://blog.csdn.net/liupeifeng3514/article/details/79038474

LVS | LVS 的三种工作方式(DR原理)(二) : https://blog.csdn.net/liupeifeng3514/article/details/79038451

LVS | LVS 的三种工作方式(NAT原理)(一) : https://blog.csdn.net/liupeifeng3514/article/details/79038431

LVS | LVS 关于 arp_ingnone 和 arp_announce 的相关说明 : https://blog.csdn.net/liupeifeng3514/article/details/79048722

【转】ksoftirqd进程耗尽单核100%si处理软中断导致性能瓶颈          :    https://www.jianshu.com/p/f0ed38a79041

 

大型网站架构系列:电商网站架构案例(1) : https://mp.weixin.qq.com/s/W8n3tkH6cAT4OyXbxqzw2g

大型网站架构系列:电商网站架构案例(2) : https://mp.weixin.qq.com/s/j5c75ePAIwPmRI9VlCzfhA

大型网站架构系列:负载均衡详解(2) : 大型网站架构系列:负载均衡详解(2)

大型网站架构系列:负载均衡详解(3) : https://mp.weixin.qq.com/s/uaCykNu4diXpqOPCz4YZJg

大型网站架构系列:负载均衡详解(4) : https://mp.weixin.qq.com/s/vWW5H3sTaSkAieN299a4bw

CentOS6.8下部署LVS+keepalived实现高性能高可用负载均衡      :     http://blog.51cto.com/zlyang/1672523

linux高级技巧:heartbeat+lvs           :      http://os.51cto.com/art/201408/447193.htm#topx

 

RHCE系列之LVM----理论篇    :  http://blog.51cto.com/nolinux/1350941

RHCE系列之LVM----操作篇 荐  :      http://blog.51cto.com/nolinux/1350942

基于LVS负载均衡集群的小米电商网站架构-运维实战手记(二) :  https://mp.weixin.qq.com/s/0ZbD-LCYTz7gOAAz7Nw0EA

 

靠谱运维             

Linux负载均衡软件LVS之一(概念篇)   : https://www.ixdba.net/archives/2012/06/166.htm

Linux负载均衡软件LVS之二(安装篇) : https://www.ixdba.net/archives/2012/06/168.htm

Linux负载均衡软件LVS之三(配置篇) : https://www.ixdba.net/archives/2012/06/170.htm

Linux负载均衡软件LVS之四(测试篇)  : https://www.ixdba.net/archives/2012/06/172.htm

LVS : https://www.cnblogs.com/saneri/category/773541.html

ea9fdee2b9b77c23e87d82defeb2d48471b.jpg

 

 

转载于:https://my.oschina.net/u/3803405/blog/1818319

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值