基于LVS高可用架构实现Nginx集群分流

Posted 踩踩踩从踩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于LVS高可用架构实现Nginx集群分流相关的知识,希望对你有一定的参考价值。

Nginx实用插件_踩踩踩从踩的博客-CSDN博客

前言

前面文章介绍nginx的核心及扩展插件必要的性能优化,以及在nginx中如何实用用https;本篇文章会继续讲解重要的概念 lvs高可用框架,怎么利用虚拟服务,使得nginx高可用,以及 负载均衡策略;基于Keepalived实现LVS高可用,负载均衡器LVS跟Nginx差别

也是源自对应请求量高并发的情况才 nginx集群进行高可用,如何实用lvs进行分流 

LVS简介

LVS(Linux Virtual Server)linux 虚拟服务,由中国人章文嵩创造和开发的linux内核项目。 一句话理解:将一堆的linux服务节点虚拟成一台服务器, 对外提供相同的ip访问,对内实现各服务器的负载调度。
利用一个ip 将多个服务器虚拟成一个
特点
  • 有一个负载调度器—负载均衡
  • 内部结构对客户端透明—封装
  • 无感知的增删服务节点—可伸缩
  •  检测服务健康状态—高可用

 

 这就是lvs达到的效果  ,对于客户端感觉像是一个的样子。

为什么要用LVS

互联网发展需求
要求web服务能具有可伸缩性、高可用性、可管理、性价比高这几个特性
服务器面临提升瓶颈
升级单台硬件设备显然代价非常大,服务集群化更具可扩展性和成本效益。
构建集群的方法
  • 基于DNS,DNS将域名解析为服务器的不同IP地址来将请求分发到不同的服务器,实现集群负载
  • 基于客户端,客户端需要值得服务集群信息。
  • 基于调度程序,调度程序可以以精细的粒度调度请求(例如每个连接) ,以便在服务器之间实更好的负载平衡。
  • 基于IP
LVS属于基于IP级负载均衡,IP级的开销很小,服务器节点的最大数量可以达到25或高达100

应用框架结构

在LVS框架中,提供了含有三种IP负载均衡技术的IP虚拟服务 器软件IPVS,基于内容请求分发的内核Layer-7交换机KTCPVS和集群管理软件。再上层则是集群管理、网络服务、电子商
务应用。
IP级负载均衡—IPVS
应用级负载均衡—KTCPVS

 LVS如何工作

第四层负载均衡IPVS
        IPVS (IP Virtual Server) 在Linux内核中实现传输层负载平衡,即所谓的第4层交换。在主机上运行的IPVS 充当真实服务器集群前端的负载均衡器,它可以将对基于TCP / UDP的服务的请求定向到真实服务器,并使真实服务器的服务在虚拟服务上显示为虚拟服务。单个IP地址LinuxDirector中共有三种IP负载均衡技术(数 据包转发方法)。它们是通过NAT 的虚拟服务器、通过 IP隧道 的虚拟服务器、通过 直接路由 的虚拟服务器。 数据包进行转换
第七层负载均衡KTCPVS
        由于用户空间TCP Gateway的开销太大,我们提出在操作系统的内核中实现Layer-7交换方法,来避免用户空间与核心空间的切换和内存复制的开销。在Linux操作系统的内核中,我们实现了Layer-7交换,称之为KTCPVS(Kernel TCP Virtual Server)。目前,KTCPVS已经能对HTTP请求进行基于内容的调度,但它还不很 成熟 ,在其调度算法和各种协议的功能支持等方面,有大量的工作需要做。
如何工作的

IPVS - NAT

NAT —(Network Address Translation网络地址转换)。将IP地址从一个组映射到另一个组的功能, 于设置 。负载均衡器可能是服务器数量超过20的整个系统的瓶颈,因为请求数据包和响应数据包都需要由负载均衡器重写。
通过NAT的虚拟服务器的优点是真实服务器可以运行任何支持TCP/IP协议的操作系统,真实服务器可以使用私有Internet地址,并且负载均衡器只需要IP地址。
 
缺点是通过NAT的虚拟服务器的可扩展性是有限的。当服务器节点(通用PC服务器)的数量增加到大约20或更多时,负载平衡器可能是整个系统的瓶颈,因为请求包和响应包都需要由负载平衡器重写。

NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。

这种方法需要在专用网(私网IP)连接到因特网(公网IP)的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址(公网IP地址)。这样,所有使用本地地址(私网IP地址)的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。

IPVS - IP TUN

IP TUN — IP(tunnel 隧道)。将发往一个IP地址的数据报包装并重定向到另一个IP地址。是最具扩展 的。
TUN模式是通过ip隧道技术减轻lvs调度服务器的压力,许多Internet服务(例如WEB服务器)的请求包很短小,而应答包通常很大,负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量。相比NAT性能要高的多,比DR模式的优点是不限制负载均衡器与RS在一个物理段上。
缺点 ,需要所有的服务器(lvs、RS)支持"IP Tunneling"(IP
Encapsulation)协议
优点 ,由于服务器通过使用IP隧道相互连接,负载均衡器和真实服
务器可以驻留在不同的LAN甚至WAN上。

 IPVS - DR

DR —(direct route 直接路由)虚拟IP地址由真实服务器和负载均衡器共享。负载均衡器的接口也配置了虚拟IP地址,用于接受请求数据包,并直接将数据包路由到选定的服务器。所有真实服务器的非arp别 接口都配置了虚拟IP地址,或者将发往虚拟IP地址的数据包重定向到本地套接字,以便真实服务器可以在本地处理数据包。
具有 最佳性能 。VS / DR使用MAC欺骗技术,因此它要求负载均衡器的NIC和真实服务器的NIC之一必须位于同一IP网段和物理段中。

高可用Nginx集群安装

如何搭建一个nginx高可用集群

高可用Nginx集群安装搭建手册 提取码:nnfp

环境准备

两台linux服务器,IP地址分别为

192.168.120.103

192.168.120.58

准备IP地址信息打印程序balancer-1.0.0.jar,http://hostname:port/server/ip,打印服务器的IP端口号信息。

安装两台Nginx

安装步骤,参考前面Nginx的手册来操作,将Nginx分别安装在前面准备的两台linux服务器上。

启动Nginx,都为80端口,代理前面的的balancer-1.0.0.jar服务。

安装LVS

LVS全称为Linux Virtual Server,工作在ISO模型中的第四层,由于其工作在第四层,因此与iptables类似,必须工作在内核空间上。因此lvs与iptables一样,是直接工作在内核中的,叫ipvs,主流的linux发行版默认都已经集成了ipvs,因此用户只需安装一个管理工具ipvsadm即可。
LVS现在已成为Linux内核的一部分,默认编译为ip_vs模块,必要时能够自动调用。以下操作可以手动加载ip_vs模块,并查看当前系统中ip_vs模块的版本信息。

安装依赖

$ sudo yum install -y popt-static kernel-devel make gcc openssl-devel lftplibnl* popt* openssl-devel lftplibnl* popt* libnl* libpopt* gcc*

加载LVS

# 通过下面命令来检查,如果没有显示,则说明没有加载
$ lsmod |grep ip_vs
ip_vs                 145497  0 
# 加载LVS,执行下面命令就可以把ip_vs模块加载到内核
$ sudo modprobe ip_vs
# 查看LVS版本号,说明安装成功
$ cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn

安装ipvsadm

curl "http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz" -o ipvsadm-1.26.tar.gz
tar zxf ipvsadm-1.26.tar.gz  
cd ipvsadm-1.26 
rpm -qa | grep kernel-devel	# 确认是否安装了kernel-devel(默认已经安装)
su root # 需要root权限执行
make && make install

curl "http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.25-1.src.rpm" -o ipvsadm-1.25-1.src.rpm
sudo rpm -ivh ipvsadm-1.25-1.src.rpm

# 检查是否安装成功,显示下面的内容表示安装成功
$ sudo ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

LVS DR模式

DR模式是LVS三种实现负载均衡方式中性能最好的一个,下面就使用这个模式,配置Nginx负载均衡的实现。

设定IP环境如下

VIP:192.168.120.200

lvs-director:192.168.120.58

Nginx1:192.168.120.103

Nginx2:192.168.120.58

DR配置

LVS配置

编辑lvs文件

sudo vim /usr/local/sbin/lvs_dr.sh

输入下面内容

#! /bin/bash
# 1,启用ip转发;0,禁止ip转发;默认0。
echo 1 > /proc/sys/net/ipv4/ip_forward
# 定义两个变量方便后面使用
ipv=/sbin/ipvsadm
vip=192.168.120.200
# 通过ifconfig,找到自己的网卡名,我这里是enp0s3
# 下掉enp0s3:0的虚拟ip
ifconfig enp0s3:0 down
# 通过ifconfig,找到自己的网卡名,在其下面绑定虚拟ip
# 在enp0s3上绑定虚拟ip,虚拟ip地址的广播地址是它本身
ifconfig enp0s3:0 $vip broadcast $vip netmask 255.255.255.255 up
# 添加路由规则
route add -host $vip dev enp0s3:0
# 清除原有转发规则
$ipv -C
# 新增虚拟服务,采用轮询策略,负载转发端口是8080
$ipv -A -t $vip:8080 -s rr

# 定义实际服务ip
rs1=192.168.120.103
rs2=192.168.120.58
# -a在虚拟IP中添加上游服务信息;-t表示tcp服务
# -r表示真实服务信息;-g指定为LVS为直接路由模式
$ipv -a -t $vip:8080 -r $rs1:80 -g
$ipv -a -t $vip:8080 -r $rs2:80 -g

 

使配置生效

sudo sh /usr/local/sbin/lvs_dr.sh
sudo ipvsadm

ipvsadm操作说明

sudo ipvsadm -C 清除
说明:
-A  --add-service在服务器列表中新添加一条新的虚拟服务器记录
-t 表示为tcp服务
-u 表示为udp服务
-s --scheduler 使用的调度算法, rr | wrr | lc | wlc | lblb | lblcr | dh | sh | sed | nq 默认调度算法是 wlc
-a --add-server 在服务器表中添加一条新的真实主机记录
-r --real-server  真实服务器地址
-m --masquerading 指定LVS工作模式为NAT模式
-w --weight 真实服务器的权值
-g --gatewaying 指定LVS工作模式为直接路由器模式(也是LVS默认的模式)
-i --ipip 指定LVS的工作模式为隧道模式

sudo ipvsadm -help 可以查看更多的帮助信息

真实服务配置

在lvs的DR和TUn模式下,用户的访问请求到达真实服务器后,是直接返回给用户的,而不再经过前端的Director Server,因此,就需要在每个Real server节点上增加虚拟的VIP地址,这样数据才能直接返回给用户。

2台真实web服务器的配置信息,编辑lvs_dr_rs.sh文件

sudo vim /usr/local/sbin/lvs_dr_rs.sh

输入内容

#! /bin/bash
vip=192.168.120.200
ifconfig enp0s3:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip enp0s3:0
# 关闭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

关闭arp解析

 

arp_ignore:当ARP请求发过来后发现自己正是请求的地址是否响应;

0 - 利用本地的任何地址,不管配置在哪个接口上去响应ARP请求;
1 - 哪个接口上接受ARP请求,就从哪个端口上回应。

arp_announce :定义不同级别,当ARP请求通过某个端口进来是否利用这个接口来回应。

0 - 利用本地的任何地址,不管配置在哪个接口上去响应ARP请求;
1 - 避免使用另外一个接口上的mac地址去响应ARP请求;
2 - 尽可能使用能够匹配到ARP请求的最佳地址。

使配置生效

sudo sh /usr/local/sbin/lvs_dr_rs.sh
sudo sysctl -p

测试

在浏览器输入访问

http://192.168.120.200:8080/server/ip

安装Keepalived

只有一台LVS服务,万一挂了怎么办?需要Keepalived来做高可用,准备两台linux服务器,用来安装两台keepalived,Keepalived安装过程如下。

安装依赖

2.0.18版本

sudo yum install -y openssl-devel popt-devel libnl-devel kernel-devel gcc

安装Keepalived

2.0.18版本

cd ~
wget https://www.keepalived.org/software/keepalived-2.0.18.tar.gz
tar -xvzf keepalived-2.0.18.tar.gz
cd keepalived 
# 安装到/usr/local/keepalived目录
./configure --prefix=/usr/local/keepalived --sysconf=/etc  

sudo make & sudo make install

 

配置

配置放在/etc/keepalived/,三份配置文件(一个nginx_monitor监控脚本,主备各一份keepalived配置)

Nginx监控脚本

新建nginx_monitor.sh文件

sudo vim /etc/keepalived/nginx_monitor.sh

脚本内容

#!/bin/bash
# shell脚本监控:如果程序的进程存在,则认为没有问题
if [ "$(ps -ef | grep "nginx"| grep -v grep| grep -v keepalived )" == "" ]
  then
    # 输出日志
    echo "nginx ############# app down " >> /var/log/messages
    exit 1
  else
    # 一切正常
	exit 0
fi

执行脚本

# 创建nginx monitor 脚本,并赋予可执行权限
sudo chmod +x /etc/keepalived/nginx_monitor.sh
# 测试一下脚本能不能执行
sh /etc/keepalived/nginx_monitor.sh 
# 没报错即表示为成功

Keepalived配置

主配置 /etc/keepalived/keepalived-nginx-master.conf

# 定义一个名为monitor的脚本
vrrp_script monitor {
     # 监控脚本存放地址
	 script "/etc/keepalived/nginx_monitor.sh"
	 # 每隔1秒执行一次
	 interval 1
}

# 定义一个vrrp示例
vrrp_instance VI_1 {
	state MASTER    #(主机为MASTER,备用机为BACKUP)
	interface enp0s3  #(HA监测网卡接口)

	virtual_router_id 61 #(主、备机的virtual_router_id必须相同,不大于255)
	priority 90 #(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高)
	advert_int 1 #(VRRP Multicast广播周期秒数)

	track_script {
		monitor #(监控脚本名称)
	}
	virtual_ipaddress {
            192.168.120.200 #(VRRP HA虚拟IP)
	}
}

备份配置 /etc/keepalived/keepalived-nginx-backup.conf

# 定义一个名为monitor的脚本
vrrp_script monitor {
     # 监控nginx的脚本存放地址
	 script "/etc/keepalived/nginx_monitor.sh"
	 # 每隔1秒执行一次
	 interval 1
}

# 定义一个vrrp示例
vrrp_instance VI_1 {
	state BACKUP    #(主机为MASTER,备用机为BACKUP)
	interface enp0s3  #(HA监测网卡接口)

	virtual_router_id 61 #(主、备机的virtual_router_id必须相同)
	priority 80 #(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高)
	advert_int 1 #(VRRP Multicast广播周期秒数)

	track_script {
		monitor #(监控脚本名称)
	}
	virtual_ipaddress {
            192.168.120.200 #(VRRP HA虚拟IP)
	}
}
# - master主机
keepalived-nginx-master.conf
# - backup备机
keepalived-nginx-backup.conf

启动Keepalived服务

# 启动master主机
/usr/local/keepalived/sbin/keepalived -f /etc/keepalived/keepalived-nginx-master.conf
# 启动backup备机
/usr/local/keepalived/sbin/keepalived -f /etc/keepalived/keepalived-nginx-backup.conf

注意事项

两台keepalived服务间需要通信,关闭防火墙

firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
systemctl list-unit-files|grep firewalld.service
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动

[root@localhost ~]#systemctl stop firewalld.service
[root@localhost ~]#systemctl disable firewalld.service
启动一个服务:systemctl start firewalld.service
关闭一个服务:systemctl stop firewalld.service
重启一个服务:systemctl restart firewalld.service
显示一个服务的状态:systemctl status firewalld.service
在开机时启用一个服务:systemctl enable firewalld.service
在开机时禁用一个服务:systemctl disable firewalld.service
查看服务是否开机启动:systemctl is-enabled firewalld.service;echo $?
查看已启动的服务列表:systemctl list-unit-files|grep enabled

测试

关闭master服务,服务是否仍然可用,backup服务是否替补上来。

LVS负载策略分析

LVS负载策略

  • 轮询(Round Robin)
调度器通过"轮询"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
  • 加权轮询(Weighted Round Robin)
调度器通过"加权轮询"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
  • 最少连接(Least Connections)
调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。
  • 加权最少链接(Weighted Least Connections)
在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

 

  • 基于局部性的最少链接(Locality-Based Least Connections)
针对目标IP地址的负载均衡,主要用于Cache集群系统。根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少连接"的原则选出一个可用的服务器,将请求发送到该服务器。
  • 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
与LBLC算法类似,不同的是它维护一个从目标IP地址到一组服务器的映射,LBLC算法维护一个从目标IP地址到一台服务器的映射。根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最少连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最少连接"原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中
删除,以降低复制的程度。

  • 目标地址散列(Destination Hashing)
"目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
  • 源地址散列(Source Hashing)
"源地址散列"调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

基于Keepalived实现LVS高可用

什么是Keepalived

Keepalived是一款为Linux系统、基于Linux的基础架构,提供 负载平衡 高可用性 的网络路由软件。由 C语言编写,简单而强大。一句话理解,类似于heartbeat,用来防止单点故障的软件。
负载平衡 ,通过LVS的IPVS内核模块,实现第四层负载均衡。
高可用性 ,通过虚拟冗余路由协议(VRRP),实现了动态自适应地管理负载平衡的服务器池。
Keepalived可以独立使用,也可以一起使用提供弹性基础架构
虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP)是由IETF提出的解决 局域网中配置静态网关出现单点失效现象的路由协议,解决路由器的。
Keepalived提供两个主要功能:
  • LVS系统的健康检查
  • 实现VRRPv2堆栈以处理负载均衡器故障转移

Keepalived for Linux

用 C 编写的路由软件。该项目的主要目标是为 Linux 系统和 Linux 基础设施提供简单而强大的负载平衡和高可用性设施。负载平衡框架依赖于众所周知且广泛使用的Linux 虚拟服务器 (IPVS)内核模块,提供第 4 层负载平衡。保持实现实现一组检查器,以动态和自适应地维护和管理负载平衡服务器池根据他们的健康。另一方面,VRRP协议实现了高可用性。VRRP 是路由器故障转移的基本砖块。此外,Keepalived 还向 VRRP 有限状态机器实施一组挂钩,提供低级和高速协议交互。为了提供最快的网络故障检测,保持实现BFD协议。VRRP 状态过渡可以考虑 BFD 提示以推动快速状态过渡。可独立或全部使用保持框架,以提供弹性基础设施。

 

 Keepalived的设计

子进程都有自己的I/O多路复用调度器,这样可以优化VRRP调度抖动,VRRP调度比健康检查器更敏感关键。这样拆分最小化了健康检查外部库的使用,并将其自身操作最小化到空闲主循环,以避免由自身引起的故障。
父进程监视框架称为看门狗。每个子进程打开一个接受unix域套接字,然后在守护进程引导时,父进程连接到那些unix域套接字并向子进程发送周期性(5s)hello数据包。如果父进程无法向远程连接的unix域套 接字发送hello数据包,则只需重启子进程。
这样的设计确保Keepalived的健壮性和稳定性,另外两个好处:
1. 父进程发给远程连接的hello数据包是通过子进程I/O多路复用器调度程序完成的,可以检测子程调度框架中的deadloop
2. 通过使用sysV信号来检测死亡的子进程

Keepalived的结构 

Keepalived由控制平面、IO多路复用调度器、内存管理、核心组件构成。核心组件中包含了前面提到的三个进程,父进程WatchDog程序、子进程检查程序、子进程VRRP协议栈程序。
WatchDog
派生、监控(VRRP & Healthchecking)子进程。
检查程序
负责realserver的运行状况检查。检查器测试realserver是否还活着,从而决定,自动从LVS拓扑中删除或添加realserver。
VRRP协议栈
VRRP(Virtual Router Redundancy Protocol 虚拟路由器冗余协议)专门用于处理一组路由器组中路由器故障接管工作。

健康检查—Checkers

健康检查注册在全局调度框架中,有以下类型的运行状况检查:
TCP_CHECK
在第4层工作,使用无阻塞/超时的TCP连接,如果远程服务器未回复此请求(超时),则测试错误,并从服务器池中删除该服务器。
HTTP_GET
在第5层工作,对指定的URL执行HTTP GET。使用MD5算法对HTTP GET结果进行摘要, 与期望值不匹配,则测试不通过,并将服务器从服务器池中删除。
SSL_GET
与HTTP_GET相同,但使用到远程Web服务器的SSL连接。
MISC_CHECK
通过System call调用自定义的脚本作为运行状况检查器运行,结果必须为0或1。 脚用来测试内部应用程序的理想方法
针对system call 写一个脚本去测试进程的存活,对功能进行增强。

高可用特性—VRRP Stack  

在设计网络的时候必须考虑冗余容灾,包括线路冗余,设备冗余等,防止网络存在
单点故障,在路由器或三层交换机处实现冗余就显得尤为重要。
在网络里面VRRP协议就是来做这事的,Keepalived运用VRRP协议来实现高可用性。

 

VRRP是用来实现路由器冗余的协议,VRRP协议将多台路由器设备虚拟成一个设备,
对外提供虚拟路由器IP。路由器组内部,路由器分为Master、Backup两种状态,
Master是一台对外提供服务的IP的路由器,或者是通过算法选举产生的,其他的
状态为BACKUP 。
MASTER路由器,实现针对虚拟路由器IP的各种网络功能,如ARP请求,ICMP,以及
数据的转发等。
BACKUP状态路由器,只接收MASTER的VRRP状态信息,不执行对外的网络功能。
当Master失效时,BACKUP将接管原先MASTER的网络功能。
由于设计和健壮性的原因,这个模块已完全集成在Keepalived守护程序中

LVS和Nginx异同分析 

LVS后面的服务一定要接Nginx服务吗?
能直接接Tomcat吗?能直接接RPC服务吗?
为什么不这样做呢?
LVS基于网络模型的第四层负载均衡,即传输层。
Nginx基于网络模型的第七层负载均衡,及应用用层。
两个都可以用来做Web服务器的负载均衡
传输层的LVS比Nginx能够处理的并发更高,性能更强大
应用层的Nginx则比LVS的功能特性更加丰富、更加成熟稳定

其实都是为了解决高并发的问题。但lvs 从传输层,去处理,当然并发更高。

都有第四层、第七层负载均衡的机制。

Nginx在第7层更加成熟稳定、功能更加丰富,大量的第三方模块和插件。LVS比拟不了,LVS应用层的负债均衡还不够成熟。

LVS处于第四层负债均衡,并且集成到了LInux内核中,基于IP级别的负债均衡,又在内核中,效率更加的高效、Nginx四层负载均衡无法比拟。

得益于Nginx在第7层能拿到更多的数据,功能更强大,才连接tomcat服务器。

keepalived与lvs,他们是一个功能包含关系,keepalived依赖lvs的ipvs模块。keepalived除了能进行负载均衡、还能提供负载均衡、还能提供高可用的特性。单点故障的问题。

以上是关于基于LVS高可用架构实现Nginx集群分流的主要内容,如果未能解决你的问题,请参考以下文章

基于 Docker 的 ELK 高可用集群架构

网站集群架构实战(LVS负载均衡Nginx代理缓存Nginx动静分离Rsync+Inotify全网备份Zabbix自动注册全网监控)--技术流ken

lvs+keepalived+nginx实现高性能负载均衡集群

LVS+Keepalived 实现高可用负载均衡集群

LVS负载均衡简介

lvs+keepalived+nginx实现高性能负载均衡集群(转)