LVS
参考来源:https://www.cnblogs.com/gaoxu387/p/7941381.html
四层负载均衡 IP负载均衡技术
工作模式
工作模式 | 工作原理 | 优点 | 缺点 |
---|---|---|---|
NAT (Network Address Translation)即网络地址转换 | 请求的报文和响应的报文都需要通过 LB 进行ip地址改写
每台内部的 realserver 服务器的网关地址必须是调度器 LB 的内网地址 | 集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。 | 扩展性有限 负载均衡器将成为整个系统的瓶颈 |
DR 直接路由模式 | 在调度器 LB 上修改数据包的目的 MAC 地址实现转发
RS 节点和调度器 LB 只能在一个局域网里面(原因:过 MAC 地址改写机制实现转发)
RS 主机需要绑定 VIP 地址在 LO 接口(掩码32 位)上 | 负载均衡器只是分发请求,应答包通过单独的路由方法返回给客户端
可以使用大多数操作系统做为物理服务器。
DR模式的效率很高,但是配置稍微复杂一点 | 所有 RS 节点和调度器 LB 只能在一个局域网里面。 |
TUN 隧道模式 | 报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP
所有的 realserver 机器上面绑定 VIP 的 IP 地址
不需要 lvs vip 跟 realserver 在同一个网段内 | 负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户 | RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。 |
LVS调度算法
在内核中的连接调度算法上,IPVS已实现了以下八种调度算法:
-
轮叫调度(Round-Robin Scheduling)
-
加权轮叫调度(Weighted Round-Robin Scheduling)
-
最小连接调度(Least-Connection Scheduling)
-
加权最小连接调度(Weighted Least-Connection Scheduling)
-
基于局部性的最少链接(Locality-Based Least Connections Scheduling)
-
带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)
-
目标地址散列调度(Destination Hashing Scheduling)
-
源地址散列调度(Source Hashing Scheduling)
问题 | 答案 |
---|---|
Nginx | 免费的,开源的,高性能的 HTTP 服务器和反向代理,是一个Web服务器,也可以用作负载均衡器和 HTTP 缓存 |
Nginx 整体架构 参考: | 一个主进程(master):不处理网络请求,主要负责调度工作进程(加载配置、启动工作进程、非停升级)
多个工作进程(worker):处理网络请求及响应,每个 worker 进程都可以同时处理数以千计的网络请求 。 |
Nginx 模块化设计 | 核心模块 :提供错误日志记录 、 配置文件解析 、 事件驱动机制 、 进程管理 等核心功能。 标准HTTP模块:提供 HTTP 协议解析相关的功能,比如:端口配置 、 网页编码设置 、 HTTP响应头设置 等等。 可选HTTP模块:主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,比如: Flash 多媒体传输 、解析 GeoIP 请求 邮件服务模块:用于支持 Nginx 的 邮件服务 ,包括对 POP3 协议、 IMAP 协议和 SMTP协议的支持。 第三方模块:是为了扩展 Nginx 服务器应用,完成开发者自定义功能,比如: Json 支持、 Lua 支持等。 |
Nginx的请求方式处理 | 多进程机制:主进程生成一个 子进程出来和客户端建立连接进行交互 好处:各个进程之间相互独立 ,不需要加锁,降低编程的复杂度,降低开发成本;进程互相之间不会影响,确保服务不会中断,从而将风险降到最低。 坏处:操作系统生成一个 子进程 需要进行 内存复制 等操作,在 资源 和 时间 上会产生一定的开销。当有 大量请求 时,会导致 系统性能下降 。
异步非阻塞机制:每个 工作进程 使用 异步非阻塞方式 ,可以处理多个客户端请求 。 工作进程 接收到客户端的请求以后,调用 IO 进行处理,如果不能立即得到结果,就去处理其他请求 (即为非阻塞 ),而客户端在此期间也无需等待响应 ,可以去处理其他事情(即为异步 ) 当 IO 返回时,就会通知此工作进程,该进程得到通知,暂时挂起当前处理的事务去 响应客户端请求 。 |
Nginx事件驱动模型 |
|
Nginx进程处理模型 |
|
|
|
|
|
Keepalived
基于VRRP协议((Virtual Router Redundancy Protocol ,虚拟路由器冗余协议))来实现的LVS服务高可用方案,可以利用其来避免单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
Keepalived服务的工作原理:
Keepalived高可用对之间是通过 VRRP进行通信的, VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。
在 Keepalived服务对之间,只有作为主的服务器会一直发送 VRRP广播包,告诉备它还活着,此时备不会枪占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快可以小于1秒。