|深入理解LVS,还学不会算我输( 四 )


第二层:服务器池 Server Pool , 群集所提供的应用服务 , 比如:HTTP、FTP 服务器池来承担 , 每个节点具有独立的真实 IP 地址 , 只处理调度器分发过来的客户机请求 。
服务器群集的节点可根据系统所承受的负载进行分担 。 当所有服务器过载时 , 可添加多台服务器来处理不断增加的工作负载 。
对于大多数 Internet 服务(例如Web) , 请求通常没有高度关联 , 并且可以在不同服务器上并行运行 。 因此 , 随着服务器群集的节点数增加 , 整体性能几乎可以线性扩展 。
第三层:共享存储 Shared Storage , 为服务器池中的所有节点提供稳定、一致的文件存储服务 , 确保整个群集的统一性 , 可使用 NAS 设备或提供 NFS (Network File System)网络文件系统共享服务的专用服务器 。
共享存储:可以是数据库系统 , 网络文件系统或分布式文件系统 。 服务器节点需要动态更新的数据应存储在基于数据的系统中 , 当服务器节点并行在数据库系统中读写数据时 , 数据库系统可以保证并发数据访问的一致性 。
静态数据通常保存在网络文件系统(例如 NFS 和 CIFS)中 , 以便可以由所有服务器节点共享数据 。
但是 , 单个网络文件系统的可伸缩性受到限制 , 例如 , 单个 NFS / CIFS 只能支持 4 到 8 个服务器的数据访问 。
对于大型集群系统 , 分布式/集群文件系统可以用于共享存储 , 例如 GPFS , Coda 和 GFS , 然后共享存储也可以根据系统需求进行扩展 。
LVS 负载均衡的基本原理
Netfilter 的基本原理
在介绍 LVS 负载均衡基本原理之前 , 先说一下 Netfilter 的基本原理 。 因为 LVS 是基于 Linux 内核中 Netfilter 框架实现的负载均衡系统 。
Netfilter 其实很复杂也很重要 , 平时说的 Linux 防火墙就是 Netfilter , 不过我们操作的还是 iptables , iptables 和 Netfilter 是 Linux 防火墙组合工具 , 是一起来完成系统防护工作的 。
iptables 是位于用户空间 , 而 Netfilter 是位于内核空间 。 iptables 只是用户空间编写和传递规则的工具而已 , 真正工作的还是 Netfilter 。
两者间的区别:Netfilter 是内核态的 Linux 防火墙机制 , 它作为一个通用、抽象的框架 , 提供了一整套的 hook 函数管理机制 , 提供数据包过滤、网络地址转换、基于协议类型的连接跟踪的功能 , 可在数据包流经过程中 , 根据规则设置若干个关卡(hook 函数)来执行相关操作 。
它共设置了 5 个点 , 包括:

  • prerouting:在对数据包做路由选择之前 , 将应用此链中的规则 。
  • input:当收到访问防火墙本机地址的数据包时 , 将应用此链中的规则 。
  • forward:当收到需要通过防火中转发给其他地址的数据包时 , 将应用此链中的规则 。
  • output:当防火墙本机向外发送数据包时 , 将应用此链中的规则 。
  • postrouting:在对数据包做路由选择之后 , 将应用此链中的规则 。
iptable 是用户层的工具 , 提供命令行接口 , 能够向 Netfilter 中添加规则策略 , 从而实现报文过滤 , 修改等功能 。
通过下图我们可以来了解下 Netfilter 的工作机制:
|深入理解LVS,还学不会算我输
本文插图

当数据包通过网络接口进入时 , 经过链路层之后进入网络层到达PREROUTING , 然后根据目标 IP 地址进行查找路由 。
如目标 IP 是本机 , 数据包会传到 INPUT 上 , 经过协议栈后根据端口将数据送到相应的应用程序;应用程序将请求处理后把响应数据包发送至 OUTPUT 里 , 最终通过 POSTROUTING 后发送出网络接口 。
如目标 IP 不是本机 , 并且服务器开启了 FORWARD 参数 , 这时会将数据包递送给 FORWARD , 最后通过 POSTROUTING 后发送出网络接口 。


推荐阅读