负载均衡与高可用三剑客(LVS+NGINX+KEEPALIVED)

LVS是什么?

LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器,是一个由章文嵩博士发起的自由软件项目,官方站点是:The Linux Virtual Server Project¹。LVS的目标是通过Linux操作系统和负载均衡技术,实现一个高性能,高可用,高可扩展的服务器集群系统²。

LVS的体系架构由三个部分组成:最前端的负载均衡层(Load Balancer),中间的服务器群组层(Server Array),最底层的数据共享存储层(Shared Storage)²。负载均衡层由一台或多台负载调度器(Director Server)组成,它们安装了LVS模块和监控模块,负责将用户的请求分发给后端的服务器(Real Server)。服务器群组层由一组提供应用服务的机器组成,它们可以是Web服务器,Mail服务器,FTP服务器等。数据共享存储层为所有的服务器提供共享的数据空间和内容一致性,它可以使用磁盘阵列或者集群文件系统等技术实现。

LVS有三种工作模式:NAT模式,DR模式和TUN模式²。NAT模式是通过修改数据包中的目标IP地址和端口来实现负载均衡,它要求后端服务器的网关指向负载调度器,请求和响应都要经过负载调度器转发。DR模式是通过修改数据包中的目标MAC地址来实现负载均衡,它要求后端服务器使用与负载调度器相同的虚拟IP地址(VIP),请求只经过负载调度器转发,响应直接返回给客户端。TUN模式是通过封装IP隧道来实现负载均衡,它适用于跨网络的集群系统,请求和响应都要经过负载调度器转发。

LVS有十种调度算法,用于选择合适的后端服务器来处理用户的请求²。这些算法有:轮询(RR),加权轮询(WRR),最少连接(LC),加权最少连接(WLC),局部性哈希(LH),目标地址哈希(DH),源地址哈希(SH),最短期望延迟(SED),最小连接数哈希(NQ),最近使用(LCU)等。

参考:
(1) 超详细!一文带你了解 LVS 负载均衡集群! - 掘金.
(2) 超详细LVS详解与配置【转载】 - 知乎 - 知乎专栏.
(3) 電路佈局驗證 - 維基百科,自由的百科全書.
(4) LVS负载均衡(LVS简介、三种工作模式、十种调度算法)_chenhuyang的博客-CSDN博客.

KEEPALIVED是什么?

KEEPALIVED是一个用于提供高可用性的软件,它主要用于实现Linux服务器的故障转移和负载均衡¹。KEEPALIVED可以监控服务器的健康状况,如果检测到故障,它可以自动切换虚拟IP地址(VIP)到备用服务器上,从而保证服务的连续性²。KEEPALIVED还可以与LVS结合,实现更高效的负载均衡功能³。

KEEPALIVED的核心是VRRP协议,它是一种用于管理多台路由器的虚拟路由协议,可以实现路由器之间的动态备份¹。VRRP协议定义了一组路由器为一个VRRP组,其中一台为主路由器(Master),其他为备份路由器(Backup)。主路由器拥有一个虚拟IP地址(VIP),并负责转发数据包。备份路由器监听主路由器的心跳信号,如果检测不到心跳信号,就会通过选举产生一个新的主路由器,并接管VIP和数据转发¹。

KEEPALIVED的配置文件位于/etc/keepalived/keepalived.conf,它主要包含两个部分:全局定义(global_defs)和VRRP实例(vrrp_instance)²。全局定义部分用于设置一些全局参数,如路由器ID,邮件通知等。VRRP实例部分用于定义一个或多个VRRP组,包括组名,状态,优先级,接口,VIP等信息。例如:

global_defs {
  router_id LVS_DEVEL
  notification_email {
    [email protected]
  }
  notification_email_from [email protected]
  smtp_server localhost
  smtp_connect_timeout 30
}

vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 51
  priority 100
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 1111
  }
  virtual_ipaddress {
    192.168.0.100/24 dev eth0 label eth0:1
  }
}

这个配置文件定义了一个名为VI_1的VRRP实例,它的状态是MASTER,使用eth0接口,虚拟路由ID是51,优先级是100,广播间隔是1秒,认证方式是密码1111,虚拟IP地址是192.168.0.100/24。

参考:
(1) Keepalived User Guide — Keepalived 1.4.3 documentation.
(2) Setting up a Linux cluster with Keepalived: Basic configuration.
(3) Keepalived 原理与实战 - 知乎.
(4) Keepalived and high availability: Advanced topics - Enable Sysadmin.

NGINX是什么?

NGINX是一个开源的软件,它可以作为Web服务器,反向代理服务器,缓存服务器,负载均衡器,媒体流服务器等多种功能¹。它最初由Igor Sysoev编写,目的是解决C10K问题,即如何让Web服务器能够同时处理数万个并发连接²。NGINX采用了事件驱动,异步的架构,提高了性能和稳定性,成为了最快的Web服务器之一²。

NGINX作为Web服务器,可以提供静态和动态的内容,支持HTTP/2, WebSocket, gRPC等协议,支持FLV和MP4等多种视频格式的流媒体服务¹。NGINX还可以通过过滤器实现压缩,字节范围,分块响应,XSLT, SSI, 图像转换等功能¹。

NGINX作为反向代理服务器,可以将用户的请求转发给后端的服务器(如FastCGI, uwsgi, SCGI, memcached等),并对其进行缓存,负载均衡和容错¹。NGINX还可以作为邮件代理服务器,支持IMAP, POP3, SMTP等协议,并提供认证和连接重定向的功能¹。

NGINX作为负载均衡器,可以实现HTTP, TCP, UDP等协议的负载均衡,并提供多种调度算法,如轮询(RR),加权轮询(WRR),最少连接(LC),加权最少连接(WLC),哈希(DH, SH)等¹。NGINX还可以实现响应速率限制,连接数限制,访问控制等功能¹。

NGINX还有一个商业版的产品NGINX Plus,它在NGINX的基础上提供了一些额外的功能,如动态配置API,健康检查,会话持久化,活动监控等²。NGINX Plus还提供了专业的技术支持和服务²。

参考:
(1) nginx.
(2) What Is NGINX? - NGINX.
(3) Advanced Load Balancer, Web Server, & Reverse Proxy - NGINX.

LVS、NGINX、KEEPALIVED三者的区别

LVS、NGINX、KEEPALIVED三者都是用于实现高可用和负载均衡的软件,但它们有以下几个主要的区别:

  • LVS是基于IP层的负载均衡,它通过修改数据包的目标IP或MAC地址来实现负载均衡,它不需要对数据包进行解析,所以性能很高,但也缺乏灵活性和功能性。LVS只能对TCP和UDP协议进行负载均衡,不能对HTTP等应用层协议进行负载均衡。
  • NGINX是基于HTTP层的负载均衡,它通过解析HTTP请求头来实现负载均衡,它可以根据URL,Cookie,参数等信息来选择合适的后端服务器,所以灵活性和功能性很强,但也会消耗一定的性能。NGINX不仅可以对HTTP协议进行负载均衡,还可以对其他协议如TCP, UDP, SMTP等进行负载均衡。
  • KEEPALIVED是基于VRRP协议的高可用软件,它通过在多台服务器之间共享一个虚拟IP地址(VIP)来实现故障转移和负载均衡,它可以监控服务器的健康状况,并在故障发生时自动切换VIP到备用服务器上。KEEPALIVED可以与LVS或NGINX结合使用,提供更高的可用性和可扩展性。

如何采用LVS+NGINX+KEEPALIVED, 实现整体服务的负载均衡与高可用

要采用LVS+NGINX+KEEPALIVED实现整体服务的负载均衡与高可用,你可以参考以下步骤¹²:

  • 在两台或多台服务器上安装NGINX,配置好Web服务,并设置好回环虚拟IP(lo:1和lo:2),用于隐藏真实服务器的IP地址。
  • 在两台或多台服务器上安装KEEPALIVED,配置好VRRP实例,设置好虚拟IP地址(VIP),优先级,认证方式等参数,并编写一个脚本来检测NGINX的运行状态,如果NGINX出现故障,就停止KEEPALIVED服务,让VIP切换到其他服务器上。
  • 在两台或多台服务器上安装LVS,配置好调度算法,持续时间,转发模式等参数,并将NGINX服务器的回环虚拟IP作为真实服务器添加到LVS中。
  • 在两台或多台服务器上安装KEEPALIVED,配置好VRRP实例,设置好虚拟IP地址(VIP),优先级,认证方式等参数,并编写一个脚本来检测LVS的运行状态,如果LVS出现故障,就停止KEEPALIVED服务,让VIP切换到其他服务器上。
  • 最后,在客户端使用LVS的VIP来访问Web服务,LVS会根据调度算法将请求转发给NGINX的回环虚拟IP,NGINX会根据应用层协议处理请求并返回响应。如果某个NGINX或LVS出现故障,KEEPALIVED会自动切换VIP到其他正常的服务器上,从而实现高可用和负载均衡。

参考:
(1) keepalived+LVS+nginx搭建高可用负载均衡(二) - 知乎.
(2) Nginx双机主备(KeepAlived实现) - 知乎 - 知乎专栏.
(3) Nginx 集群负载(基于LVS和Keepalived)搭建 - W3Schools.
(4) 【全程干货-超详细步骤】LVS+Keepalived搭建双机热备高可用负载均衡(实战-可上生产环境) - 知乎.

你可能感兴趣的:(知识点小记,负载均衡,lvs,nginx,java,服务器)