企业级调度器 Linux Virtual Server

企业级调度器 Linux Virtual Server

集群 Cluster

Cluster:集群,为解决某个特定问题将多台计算机组合起来形成的单个系统
Cluster 分为三种类型:
LB:Load Balancing,负载均衡,多个主机组成,每个主机只承担一部分访问请求
HA:High Availiablity,高可用
HPC:High-performance computing,高性能

集群和分布式
集群:同一个业务系统部署在多台服务器上。集群中每一台服务器实现的功能没有差别,数据和代码都是一样的

分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起来,才是完整的业务

分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。

Linux Virtual Server简介

LVS:Linux Virtual Server,负载调度器,内核集成,LVS 是全球最流行的四层负载均衡开源软件

LVS工作原理
VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS。LVS是内核
级功能,工作在INPUT链的位置,将发往INPUT的流量进行“处理”

查看内核支持LVS

CONFIG_NETFILTER_XT_MATCH_IPVS=m
#
# IPVS transport protocol load balancing support
#
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_PROTO_AH_ESP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y
CONFIG_IP_VS_PROTO_SCTP=y

#
# IPVS scheduler
#
CONFIG_IP_VS_RR=m
CONFIG_IP_VS_WRR=m
CONFIG_IP_VS_LC=m
CONFIG_IP_VS_WLC=m
CONFIG_IP_VS_FO=m
CONFIG_IP_VS_OVF=m
CONFIG_IP_VS_LBLC=m
CONFIG_IP_VS_LBLCR=m
CONFIG_IP_VS_DH=m
CONFIG_IP_VS_SH=m
CONFIG_IP_VS_MH=m
CONFIG_IP_VS_SED=m
CONFIG_IP_VS_NQ=m

LVS 集群体系架构
在这里插入图片描述
LVS集群类型中的术语
VS:Virtual Server,Director Server(DS), Dispatcher(调度器),Load Balancer
RS:Real Server(lvs), upstream server(nginx), backend server(haproxy)
CIP:Client IP
VIP:Virtual serve IP VS外网的IP
DIP:Director IP VS内网的IP
RIP:Real server IP
访问流程:CIP <–> VIP == DIP <–> RIP

LVS 工作模式

LVS集群的工作模式
lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
lvs-dr:操纵封装新的MAC地址
lvs-tun:在原请求IP报文之外新加一个IP首部
lvs-fullnat:修改请求报文的源和目标IP,默认内核不支持

LVS的NAT模式

lvs-nat:本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和
PORT实现转发
(1)RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
(2)请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
(3)支持端口映射,可修改请求报文的目标PORT
(4)VS必须是Linux系统,RS可以是任意OS系统
在这里插入图片描述

LVS的DR模式

LVS-DR:Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变
DR模式的特点:

  1. Director和各RS都配置有VIP
  2. 确保前端路由器将目标IP为VIP的请求报文发往Director
    在前端网关做静态绑定VIP和Director的MAC地址
    在RS上使用arptables工具
    在RS上修改内核参数以限制arp通告及应答级别
  3. RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director
  4. RS和Director要在同一个物理网络
  5. 请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
  6. 不支持端口映射(端口不能修改)
  7. 无需开启 ip_forward
  8. RS可使用大多数OS系统

LVS的TUN模式

转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP)
TUN模式特点:

  1. RIP和DIP可以不处于同一物理网络中,RS的网关一般不能指向DIP,且RIP可以和公网通信。也就是
    说集群节点可以跨互联网实现。DIP, VIP, RIP可以是公网地址
  2. RealServer的tun接口上需要配置VIP地址,以便接收director转发过来的数据包,以及作为响应的报文源IP
  3. Director转发给RealServer时需要借助隧道,隧道外层的IP头部的源IP是DIP,目标IP是RIP,而RealServer响应给客户端的IP头部是根据隧道内层的IP头分析得到的,源IP是VIP,目标IP是CIP
  4. 请求报文要经由Director,但响应不经由Director,响应由RealServer自己完成
  5. 不支持端口映射
  6. RS的OS须支持隧道功能

在这里插入图片描述

LVS的FULLNAT模式

通过同时修改请求报文的源IP地址和目标IP地址进行转发
CIP --> DIP
VIP --> RIP
fullnat模式特点:

  1. VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP
  2. RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client
  3. 请求和响应报文都经由Director
  4. 相对NAT模式,可以更好的实现LVS-RealServer间跨VLAN通讯
  5. 支持端口映射
    注意:此类型kernel默认不支持
    在这里插入图片描述

LVS工作模式总结和比较

在这里插入图片描述
vs-nat与lvs-fullnat:
请求和响应报文都经由Director
lvs-nat:RIP的网关要指向DIP
lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信

lvs-dr与lvs-tun:
请求报文要经由Director,但响应报文由RS直接发往Client
lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发
lvs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信

LVS 调度算法

ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态分为两种:静态方法和动态方法
静态方法
仅根据算法本身进行调度
1、RR:roundrobin,轮询,较常用,雨露均沾,大锅饭
2、WRR:Weighted RR,加权轮询,较常用
3、SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
4、DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如: Web缓存

动态方法
主要根据每RS当前的负载状态及调度算法进行调度Overhead=value 较小的RS将被调度
1、LC:least connections 适用于长连接应用
2、WLC:Weighted LC,默认调度方法,较常用
3、SED:Shortest Expection Delay,初始连接高权重优先,只检查活动连接,而不考虑非活动连接
4、NQ:Never Queue,第一轮均匀分配,后续SED
5、LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理,实现Web Cache等
6、LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS,实现Web Cache等

LVS 相关软件及命令

程序包:ipvsadm
Unit File: ipvsadm.service
主程序:/usr/sbin/ipvsadm
规则保存工具:/usr/sbin/ipvsadm-save
规则重载工具:/usr/sbin/ipvsadm-restore
配置文件:/etc/sysconfig/ipvsadm-config
ipvs调度规则文件:/etc/sysconfig/ipvsadm

管理集群服务

增、修改:

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

service-address:
-t|u|f:
-t: TCP协议的端口,VIP:TCP_PORT 如: -t 10.0.0.100:80
-u: UDP协议的端口,VIP:UDP_PORT
-f:firewall MARK,标记,一个数字
[-s scheduler]:指定集群的调度算法,默认为wlc

范例: 增加集群
ipvsadm -A -t 10.0.0.100:80 -s wrr

删除:

ipvsadm -D -t|u|f service-address

管理集群上的RS

增、改:

ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]

删:

ipvsadm -d -t|u|f service-address -r server-address
server-address:
rip[:port] 如省略port,不作端口映射
选项:
lvs类型:
-g: gateway, dr类型,默认
-i: ipip, tun类型
-m: masquerade, nat类型
-w weight:权重

范例:
ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.8:8080 -m -w 3

清空定义的所有内容:
ipvsadm -C

查看:

ipvsadm -L|l [options]

--numeric, -n:以数字形式输出地址和端口号
--exact:扩展信息,精确值
--connection,-c:当前IPVS连接输出
--stats:统计信息
--rate :输出速率信息
ipvsadm -Lnc
IPVS connection entries
pro expire state source virtual destination
TCP 00:46 FIN_WAIT 192.168.10.6:51222 172.16.0.100:443 10.0.0.17:443
TCP 00:46 FIN_WAIT 192.168.10.6:51218 172.16.0.100:443 10.0.0.17:443
TCP 00:45 FIN_WAIT 192.168.10.6:39478 172.16.0.100:80 10.0.0.17:80
TCP 00:45 FIN_WAIT 192.168.10.6:51206 172.16.0.100:443 10.0.0.17:443

Ubuntu系统保存规则和开机加载规则

 #保存规则
[root@ubuntu2004 ~]#ipvsadm-save -n > /etc/ipvsadm.rules
#开机自启
[root@ubuntu2004 ~]#vim /etc/default/ipvsadm
AUTO="true

红帽系统保存规则和开机加载规则

#保存规则
[root@rocky8 ~]#ipvsadm-save -n > /etc/sysconfig/ipvsadm
#开机自启
[root@rocky8 ~]#systemctl enable ipvsadm.service

防火墙标记
借助于防火墙标记来分类报文,而后基于标记定义集群服务;可将多个不同的应用使用同一个集群服务进行调度

在Director主机基于标记定义集群服务:

ipvsadm -A -f NUMBER [options]

范例:

[root@lvs ~]#iptables -t mangle -A PREROUTING -d 172.16.0.100 -p tcp -m
multiport --dports 80,443 -j MARK --set-mark 10
[root@lvs ~]#ipvsadm -C
[root@lvs ~]#ipvsadm -A -f 10 -s rr
[root@lvs ~]#ipvsadm -a -f 10 -r 10.0.0.7 -g
[root@lvs ~]#ipvsadm -a -f 10 -r 10.0.0.17 -g
[root@lvs ~]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
FWM 10 rr
-> 10.0.0.7:0 Route 1 0 0
-> 10.0.0.17:0 Route 1 0 0

LVS 持久连接
session 绑定:对共享同一组RS的多个集群服务,需要统一进行绑定,lvs sh算法无法实现
持久连接( lvs persistence )模板:实现无论使用任何调度算法,在一段时间内(默认360s ),能够实现将来自同一个地址的请求始终发往同一个RS

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

LVS 实战案例

LVS-NAT模式案例

LVS-DR模式单网段案例

LVS-TUNNEL隧道模式案例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于一个300字的回答来说,涵盖整个 Linux 内核调度的详细步骤是不太可能的。然而,我可以给你一个大致的概述,让你了解一些关键步骤。 首先,要开始编写一个 Linux 内核调度,你需要对操作系统的基本原理有一定的理解。你需要了解进程与线程的概念,以及它们在操作系统中的调度和执行。你还需要了解调度算法以及其在进程选择方面的应用。 其次,你需要研究 Linux 内核调度的源代码。这将涉及到理解 Linux 内核的整体结构以及调度在其中的位置和功能。你可以从 Linux 的官方源代码仓库中获取这些信息。 一旦你了解了基本原理和调度的源代码,你可以根据你的需求进行修改或编写新的调度。这可能包括更改调度算法、优化调度策略或添加新的功能。你可能还需要做一些基准测试,以确保你的调度在不同的负载情况下表现良好。 最后,你需要将你的调度集成到 Linux 内核中,并进行测试和验证。这可能涉及到构建和安装整个 Linux 内核,然后在实际系统中运行调度以进行测试。你可能还需要一些调试工具来帮助你找出任何问题并进行修复。 总结起来,编写一个 Linux 内核调度是一个复杂的过程,需要深入了解操作系统原理和 Linux 内核的工作机制。这只是一个概述,涉及的步骤远远超过300字的限制。希望这个简短的回答能够给你提供一些指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值