1 LVS-集群和分布式
1.1 集群
LVS(Linux Virtual Server)集群,即Linux虚拟服务器集群,是一个在Unix/Linux平台下实现负载均衡集群功能的系统。它由国人章文嵩博士在1998年开发,是中国国内最早出现的自由软件项目之一,现在LVS已经是Linux内核标准的一部分。LVS集群通过将多台服务器组织起来,共同对外提供服务,以提高系统的整体性能、可扩展性和高可用性。
1.1.1 集群的基本概念
- 集群(Cluster):为解决某个特定问题将多台计算机组合起来形成的单个系统。这些计算机在对外提供服务时,只表现为一个整体,只提供一个访问入口(如域名或IP地址)。
- LVS集群:特指使用LVS技术构建的服务器集群,它通过负载均衡调度器将客户端请求分发到后端的多台服务器上,从而实现请求的均衡处理和高可用性。
1.1.2 集群的组成
LVS集群主要由以下几个部分组成:
- 调度器(Director/Dispatcher/Load Balancer):也称为代理服务器或前端服务器,负责接收客户端的请求,并根据预设的负载均衡算法将请求转发给后端服务器。调度器是集群对外提供服务的唯一入口。
- 后端服务器(Real Server/Backend Server):负责处理调度器转发过来的请求,并将处理结果返回给客户端。后端服务器可以是一台或多台,根据集群的规模和需求进行配置。
- 共享存储(可选):为后端服务器提供稳定、一致的文件存取服务,确保整个集群的统一性。共享存储可以使用NAS设备或提供NFS共享服务的专用服务器。
1.1.3 集群的工作模式
LVS集群支持多种工作模式,每种模式都有其特点和适用场景:
- NAT(Network Address Translation)模式:
- 修改请求报文的目标IP地址和端口,将请求转发给后端服务器。
- 后端服务器的响应报文通过调度器返回给客户端,因此调度器容易成为瓶颈。
- 支持端口映射,可以修改请求报文的目标端口。
- DR(Direct Routing)模式:
- 通过重新封装MAC地址来转发请求报文,不修改IP地址和端口。
- 响应报文由后端服务器直接返回给客户端,不经过调度器,减轻了调度器的压力。
- 需要确保前端路由器将目标IP为VIP的请求报文发往调度器。
- TUN(Tunneling)模式:
- 在请求报文之外再封装一个新的IP报文首部,将报文通过隧道转发给后端服务器。
- 支持跨网络部署集群节点,但响应报文仍然由后端服务器直接返回给客户端。
- 需要后端服务器支持隧道功能。
- 集群常见的三种类型
1.1.4 集群常见的三种类型
LVS(Linux Virtual Server)集群常见的三种类型主要包括负载均衡集群(Load Balancing Cluster,简称LB)、高可用集群(High Availability Cluster,简称HA)和高性能运算集群(High Performance Computing Cluster,简称HPC)。
1. 负载均衡集群(LB)
目标:以提高应用系统的响应能力,尽可能处理更多的访问请求,减少延迟为目标,获得高并发、高负载的整体性能。
特点:
-
负载分配依赖于主节点的分流算法,将来自客户机的访问请求分担给多个服务器节点,从而缓解整个系统的负载压力。
-
常见的负载均衡技术包括“DNS轮询”、“应用层交换”、“反向代理”等。
-
在LVS中,负载均衡集群通过LVS调度器将访问请求分发给后端的真实服务器(Real Server),实现请求的分散处理和响应的收集。
2. 高可用集群(HA)
目标:以提高应用系统的可靠性,尽可能地减少中断时间为目标,确保服务的连续性,达到高可用(HA)的容错效果。
特点:
-
高可用集群通过冗余部署和资源监控,确保在单点故障发生时能够迅速切换到备用节点,保持服务不中断。
-
常见的高可用技术包括“故障切换”、“双机热备”、“多机热备”等。
-
在LVS中,高可用集群可以通过配置主备调度器实现热备份,确保在主调度器故障时能够自动切换到备调度器,保持负载均衡服务的连续性。
3. 高性能运算集群(HPC)
目标:以提高应用系统的CPU运算速度,扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算能力。
特点:
-
高性能运算集群通过整合多个服务器的CPU、内存等计算资源,实现超大规模的计算任务处理。
-
常见的高性能运算技术包括“云计算”、“网格计算”等。
-
在LVS中,虽然LVS本身主要关注负载均衡和高可用,但高性能运算集群的概念可以启发我们在构建大规模计算环境时,考虑将LVS作为其中的一部分,通过负载均衡优化计算任务的分配和执行。
1.1.5 集群的优势
- 高性能:LVS工作在网络层,由操作系统内核直接处理流量,具有高效的数据处理能力。
- 高可用性:通过负载均衡和容错机制,确保集群在部分服务器故障时仍能对外提供服务。
- 可扩展性:支持动态添加或删除后端服务器,以适应业务规模的变化。
- 低成本:将多台低性能的服务器组合成一个高性能的服务器集群,降低了硬件成本。
1.2 分布式
1.2.1 LVS分布式架构
在分布式架构中,LVS通常作为负载均衡层(Load Balancer)部署在前端,负责接收客户端的请求并根据一定的调度算法将请求分发给后端的服务器集群。LVS分布式架构主要由以下几个部分组成:
- 负载均衡层(Load Balancer):
- 一台或多台LVS服务器构成负载调度器,也称为Director Server。
- 负责接收客户端的请求,并根据调度算法将请求分发给后端的Real Server。
- 监控Real Server的健康状况,动态地从LVS路由表中添加或剔除不健康的服务器。
- 服务器群组层(Server Array):
- 由一台或多台实际运行的应用服务器构成,也称为Real Server。
- 负责处理LVS分发过来的请求,并将处理结果返回给客户端。
- Real Server之间可以通过有效网络互连,实现数据的共享和通信。
- 共享存储层(Shared Storage)(可选):
- 提供共享存储空间和内容一致性的存储区域,如数据库、OSS存储、FS文件服务器等。
- 在需要共享数据或资源的分布式系统中,共享存储层是不可或缺的。
2 LVS-NAT模式原理及部署方法
2.1 LVS-NAT模式原理
LVS-NAT(Linux Virtual Server Network Address Translation)模式是LVS(Linux Virtual Server)的一种工作模式,其原理基于网络地址转换(NAT)技术。在这种模式下,LVS服务器充当了网络中的网关角色,它接收来自客户端的请求,并根据配置的负载均衡算法选择一个合适的后端真实服务器(Real Server)来处理这些请求。然后,LVS服务器将请求报文中的目标IP地址和端口号修改为选中的Real Server的IP地址和端口号,并将修改后的请求报文转发给Real Server。Real Server处理完请求后,将响应报文发送给LVS服务器,LVS服务器再将响应报文中的源IP地址和端口号修改为虚拟IP地址(VIP)和客户端的IP地址,最后将响应报文发送给客户端。
具体来说,LVS-NAT模式的工作流程如下:
- 请求接收:LVS服务器监听虚拟IP地址上的特定端口,接收来自客户端的请求。
- 负载均衡:根据配置的负载均衡算法(如轮询、加权轮询等),LVS服务器选择一个合适的Real Server来处理请求。
- 地址转换:LVS服务器将请求报文中的目标IP地址和端口号修改为选中的Real Server的IP地址和端口号。
- 请求转发:将修改后的请求报文转发给选中的Real Server。
- 请求处理:Real Server处理请求,并将响应报文发送给LVS服务器。
- 响应转发:LVS服务器将响应报文中的源IP地址和端口号修改为VIP和客户端的IP地址,然后将响应报文发送给客户端。
2.2 LVS-NAT模式部署方法
LVS-NAT模式的部署主要包括以下几个步骤:
2.2.1 配置LVS
1.准备一台LVS,配置两块网卡,一块是NAT模式,一块是仅主机模式
2.对网卡eth0配置IP
3.对网卡eth1配置网关
4.wq退出保存并激活
6.配置成功
7.打开内核路由功能
8.wq退出保存
9.生效
2.2.2 配置两个webserver
1.两个webserver网卡都是仅主机模式
2.分别对两个webserver配置IP
webserver1
webserver2
3.分别对两个webserver配置网关
webserver1
wq退出保存并激活
webserver2
wq退出保存并激活
4.分别对两个webserver安装httpd
5.分别对两个webserver配置httpd
webserver1
webserver2
2.2.3 测试LVS到webserver
2.2.4 在LVS中安装LVS软件
2.2.5 在LVS中配置ipvsadm
2.2.6 测试
3 LVS-ipvsadm的常用参数
3.1 虚拟服务器管理
- 添加虚拟服务器
-A|--add-service
:在内核的虚拟服务器表中添加一条新的虚拟服务器记录。- 示例:
ipvsadm -A -t 192.168.1.100:80 -s rr
,表示添加一个TCP服务的虚拟服务器,IP为192.168.1.100,端口为80,使用轮询(rr)调度算法。
- 编辑虚拟服务器
-E|--edit-service
:编辑内核虚拟服务器表中的一条虚拟服务器记录。
- 删除虚拟服务器
-D|--delete-service
:删除内核虚拟服务器表中的一条虚拟服务器记录。
- 清除所有虚拟服务器
-C|--clear
:清除内核虚拟服务器表中的所有记录。
- 恢复虚拟服务器规则
-R|--restore
:从标准输入恢复虚拟服务器规则。
- 保存虚拟服务器规则
-S|--save
:将虚拟服务器规则保存到标准输出,输出格式为-R选项可读的格式。
3.2 真实服务器管理
- 添加真实服务器
-a|--add-server
:在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。- 示例:
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.200:80 -m -w 1
,表示在虚拟服务器中添加一个真实服务器,IP为192.168.1.200,端口为80,使用NAT模式(-m),权值为1。
- 编辑真实服务器
-e|--edit-server
:编辑一条虚拟服务器记录中的某条真实服务器记录。
- 删除真实服务器
-d|--delete-server
:删除一条虚拟服务器记录中的某条真实服务器记录。
3.3 显示和设置
- 显示虚拟服务器表
-L|--list
:显示内核虚拟服务器表。- 示例:
ipvsadm -Ln
,以数字形式输出地址和端口号。
- 虚拟服务表计数器清零
-Z|--zero
:虚拟服务表计数器清零(清空当前的连接数量等)。
- 设置连接超时值
--set tcp tcpfin udp
:设置TCP、TCP FIN和UDP的连接超时值。
- 启动/停止同步守护进程
--start-daemon
:启动同步守护进程。--stop-daemon
:停止同步守护进程。
- 显示帮助信息
-h|--help
:显示帮助信息。
3.4 其他选项
- 服务类型
-t|--tcp-service
:说明虚拟服务器提供的是TCP服务。-u|--udp-service
:说明虚拟服务器提供的是UDP服务。-f|--fwmark-service
:说明是经过iptables标记过的服务类型。
- 调度算法
-s|--scheduler
:使用的调度算法,如rr(轮询)、wrr(加权轮询)、lc(最少连接)、wlc(加权最少连接)等。
- 工作模式
-g|--gatewaying
:指定LVS的工作模式为直接路由模式(默认模式)。-i|--ipip
:指定LVS的工作模式为隧道模式。-m|--masquerading
:指定LVS的工作模式为NAT模式。
- 权值
-w|--weight
:真实服务器的权值。
- 持久服务
-p|--persistent [timeout]
:持久稳固的服务,来自同一个客户的多次请求将被同一台真实的服务器处理。
- --rate
4 LVS实战项目-DR模式的实现
4.1 配置环境
1.LVS主机环境
2.router环境
3.client环境
4.webserver1环境
5.webserver2环境
4.2 在webserver1和webserver2中解决响应问题
webserver1
webserver2
4.3 在LVS、webserver1和webserver2中加回环IP
LVS
webserver1
webserver2
4.4 在client测试通不通到其他主机
4.5 在LVS中添加策略
4.6 测试
5 LVS-调度算法
LVS(Linux Virtual Server)是一种基于Linux内核的高可用性负载均衡软件,它通过将客户端请求分发到多个后端真实服务器(Real Server),来提高系统性能和可靠性。LVS支持多种调度算法,这些算法用于决定请求的转发方式,以实现负载均衡。以下是LVS中常见的调度算法及其简要说明:
5.1 静态调度算法
- 轮询(Round Robin, RR)
- 将收到的请求按顺序轮流分配到集群中的Real Server。
- 优点:简洁性,无需记录当前所有连接的状态,无状态调度。
- 加权轮询(Weighted Round Robin, WRR)
- 根据Real Server的处理能力给予不同的权重,性能好的服务器分配更多的请求。
- 优点:能够根据实际处理能力分配请求,提高资源利用率。
- 目标地址散列(Destination Hashing, DH)
- 根据请求的目标IP地址作为哈希键从静态分配的哈希表中找出对应的服务器。
- 优点:同一个目标地址的请求始终转发到第一次调度的Real Server,可用于实现正向代理缓存场景中的负载均衡。
- 源地址散列(Source Hashing, SH)
- 根据请求的源IP地址作为哈希键从静态分配的哈希表中找出对应的服务器。
- 优点:同一个IP地址的请求始终发往第一次调度的Real Server,可实现会话绑定。
5.2 动态调度算法
- 最少连接(Least-Connection, LC)
- 动态地将网络请求调度到连接数最少的Real Server上。
- 优点:如果集群各服务器性能相近,这种算法可以较好地均衡负载。
- 加权最少连接(Weighted Least-Connection Scheduling, WLC)
- 集群服务器性能差异较大时,使用这种算法比较合适,具有较高权重值的服务器将承受较大比例的活动连接负载。
- 优点:能够根据实际性能和负载情况动态调整请求分配。
- 最短期望延迟(Shortest Expected Delay Scheduling, SED)
- 当使用WLC算法时,如果Real Server的连接数和权重比例一样,SED算法保障高权重优先。
- 优点:确保性能最好的服务器优先处理请求。
- 永不排队(Never Queue Scheduling, NQ)
- 如果有Real Server的连接数为0,就直接分配过去,无需进行SED运算。
- 优点:减少等待时间,提高响应速度。
- 基于局部性的最少连接(Locality-Based Least Connections, LBLC)
- 根据请求的目标IP找出该目标IP最近使用的服务器,若该服务器可用且没超载,就将请求发给它。
- 优点:提高Cache命中率,优化集群系统的处理能力。
- 带复制的基于局部性的最少连接(LBLC with Replication, LBLCR)
- 该算法维护从一个目标IP地址到一组服务器的映射,按最少连接原则从组内选出一台没有超载的服务器,将请求发给它。
- 优点:解决LBLC负载不均衡的问题,提高系统的稳定性和性能。
5.3 其他调度算法
LVS还支持其他调度算法,如Overflow-connection(OVF)等,这些算法在不同的应用场景下具有各自的优势和适用场景。
6 LVS-mark标记解决调度问题
接着上面的环境
6.1 在LVS中修改策略
6.2 在webserver1和webserver中安装mod_ssl
webserver1
webserver2