一文读懂负载均衡之LVS: https://blog.csdn.net/yinwenjie/article/details/46845997html
• LVS是由国人章文嵩开发前端
• 流行度不亚于apache的httpd,基于TCP/IP作的路由和转发,稳定性和效率很高linux
• LVS最新版本基于Linux内核2.6,有好多年不更新了nginx
• LVS有三种常见工做的模式:git
1)VS/NAT模式(Network address translation)web
2)VS/TUN模式(tunneling)算法
3)DR模式(Direct routing)shell
官方三种负载均衡技术比较总结表:apache
• LVS架构中有一个核心角色叫作分发器(Load balance),它用来分发用户的请求,还有诸多处理用户请求的服务器(Real Server,简称rs)vim
• 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,商业的硬件负载均衡设备F五、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的基础架构。
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 集群架构图
负载均衡层位于整个集群系统的最前端,由一台或者多台负载调度器( Director Server )组成, LVS模块就安装在Director Server的系统上。Director Server的主要功能相似路由器,完成LVS 负载转发功能所设定的路由表,利用这些路由表信息把用户的请求分发到Sever Array层的物理服务器( Real Server )上。为了监测各个Real Server服务器的健康情况,在Director Server上还要安装监控模块Ldirectord。
而当监控到某个Real Server不可用时,该服务器会被从LVS 路由表中剔除,恢复时又会从新加入。
服务器阵列或服务器池由一组实际运行应用服务的物理机器组成,Real Server能够是Web服务器、Mail 服务器、FTP服务器、DNS服务器以及视频服务器中的一个或者多个的组合。每一个Real Server之间经过高速的LAN或分布在各地的WAN 相链接。
Director Server同时兼任Real Server的角色,在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的优势:
一、抗负载能力强、工做在第4层仅做分发之用,没有流量的产生,这个特色也决定了它在负载均衡软件里的性能最强的;无流量,同时保证了均衡器IO的性能不会受到大流量的影响;
二、工做稳定,自身有完整的双机热备方案,如LVS+Keepalived和LVS+Heartbeat;
三、应用范围比较广,能够对全部应用作负载均衡;
四、配置性比较低,这是一个缺点也是一个优势,由于没有可太多配置的东西,因此并不须要太多接触,大大减小了人为出错的概率;
LVS的缺点:
一、软件自己不支持正则处理,不能作动静分离,这就凸显了Nginx/HAProxy+Keepalived的优点。
二、若是网站应用比较庞大,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 八种调度算法
一、 轮叫调度
二、 加权轮叫
三、最少链接
四、加权最少链接
五、基于局部性的最少链接
六、带复制的基于局部性的最少链接
七、目标地址散列
八、源地址散列
LVS 的工做模式主要有 4 种:
术语 |
解释 |
Load balancer或director |
负载调度器 |
RS或Real Server |
真实服务器,提供服务的服务器 |
VIP |
虚拟IP地址,客户端访问集群的地址 |
RIP |
集群所提供应用程序的地址(HTTP,FTP) |
DIP |
调度器的真实地址 |
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请求保持
静默。
• 这种模式借助iptables的nat表来实现
• 用户的请求到分发器后,经过预设的iptables规则,把请求的数据包转发到后端的rs上去
• rs须要设定网关为分发器的内网ip
• 用户请求的数据包和返回给用户的数据包所有通过分发器,因此分发器成为瓶颈
• 在nat模式中,只须要分发器有公网ip便可,因此比较节省公网ip资源。
负载调度器(load balancer/ Director),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(咱们可称之为虚拟IP地址)上的。
服务器池(server pool/ Realserver),是一组真正执行客户请求的服务器,执行的服务通常有WEB、MAIL、FTP和DNS等。
共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
LVS集群采用三层结构,其体系结构如图所示:
• 这种模式借助iptables的nat表来实现
• 用户的请求到分发器后,经过预设的iptables规则,把请求的数据包转发到后端的rs上去
• rs须要设定网关为分发器的内网ip
• 用户请求的数据包和返回给用户的数据包所有通过分发器,因此分发器成为瓶颈
• 在nat模式中,只须要分发器有公网ip便可,因此比较节省公网ip资源。
• VS/NAT是一种最简单的方式,全部的RealServer只须要将本身的网关指向Director便可。客户端能够是任意操做系统,但此方式下,一个Director可以带动的RealServer比较有限。在VS/NAT的方式下,Director也能够兼为一台RealServer。VS/NAT的体系结构如图所示。
• 这种模式,须要有一个公共的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地址。
• 这种模式,也须要有一个公共的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报文。
VS/DR的方式是目前大型网站使用最普遍的一种负载均衡手段。
注意:linuxDirctor就是分发器
• 轮询 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负载均衡技术的优缺点概括如下表:
• 三台机器
• 分发器,也叫调度器(简写为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 #开启服务
• 在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地址说明,执行成功了
• 两台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
• 三台机器
• 分发器,也叫调度器(简写为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
1、
• 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
2、
• 两台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
• 编辑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通这个“外网”地址?
二、生产环境下 部署 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。
三、为何中止Nginx应用,keepalived就认为RS宕机呢?我作实验没有开nginx,编辑好dir配置文件,也有2台虚拟机ip
答:nginx是核心服务,它停掉了,keepalived确定觉得你这服务至关于没有。
由于keepalived 的配置文件监控的是80端口(real_server 192.168.188.129 80 ),停掉nginx,80端口不通,keepalived认为这台服务器down掉了。
四、实际生产环境 keepalived+lvs 下域名应该怎么配置, 是绑定vip吗 ? vip应该是公网ip吗
答:域名应该绑定到vip上。 vip能够是内网啊。
有的公司,服务器所有跑在内网里,在内网环境下作一个lvs,提供一个内网的vip出来。 外网要想访问,经过端口映射或者用带外网的代理服务器(如,nginx)代理。
五、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
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
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 负载均衡之工做原理说明(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 的三种工做方式(DR原理)(二) : https://blog.csdn.net/liupeifeng3514/article/details/79038451
【转】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
大型网站架构系列:负载均衡详解(3) : https://mp.weixin.qq.com/s/uaCykNu4diXpqOPCz4YZJg
大型网站架构系列:负载均衡详解(4) : https://mp.weixin.qq.com/s/vWW5H3sTaSkAieN299a4bw
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
LVS(DR模式)+Keepalived(高可用) : https://blog.csdn.net/qq_42036824/article/details/86669940#comments