理解Linux中的ipvs与ipvsadm工具
ipvs 是什么?
ipvs (Ip virtual Server),是内置在Linux内核的,工作在第四层协议的负载均衡器。
ipvs的功能有哪些?
- 1:负载均衡
......
ipvs 之中的相关概念
- DS: Director Server。指的是前端负载均衡器节点。
- RS: Real Server。后端真实的工作服务器。
- VIP: 向外部直接面向用户请求,作为用户请求的目标的IP地址。
- DIP: Director Server IP,主要用于和内部主机通讯的IP地址。
- RIP: Real Server IP,后端服务器的IP地址。
- CIP: Client IP,访问客户端的IP地址。
ipvs NAT模式实现的背后原理
......
- DS: Director Server。指的是前端负载均衡器节点。
- RS: Real Server。后端真实的工作服务器。
- VIP: 向外部直接面向用户请求,作为用户请求的目标的IP地址。
- DIP: Director Server IP,主要用于和内部主机通讯的IP地址。
- RIP: Real Server IP,后端服务器的IP地址。
- CIP: Client IP,访问客户端的IP地址。
ipvs NAT模式实现的背后原理
ipvs的实现,还是基于 netfilter 之中的hook。ipvs 会拉取 符合规则的 ,流向INPUT链的数据包,然后将数据包投向POSTROUTING链,在数据包流入POSTROUTING链之前,进行NAT转换。
自己觉得,在数据包被从 INPUT链 拉向 POSTROUTING链的时候,已经修改了数据包的流向,还决定了数据包应该还发送哪个网卡。
问题:
1: 应用ipvs之后,当流向INPUT链的数据包符合ipvs规则,被拉向 POSTROUTING链之后,是否还会被iptables INPUT链之中的规则所应用?
不会的。 验证方式,设置ipvs规则后,自己手动在iptables 的 INPUT链增加LOG规则,然后curl 发送请求,查看内核之中是否会有输出信息。
2: 使用ipvs之后,为什么 conntrack 无法跟踪连接的请求?
ipvs 会截取从HOOK点 流经的数据包,导致数据包 不会流经 内核的CT(连接跟踪)模块,所以自然连接跟踪表之中是不会有连接跟踪的记录的。
ipvs 模式
如何理解 ipvs 模式?
负载均衡这个方案具有不同技术方案来实现,类似于到达终点有不同的路径。
ipvs的模式有哪些?
- 1: NAT 模式
- 2: 直接路由模式,DR
- 3: IP隧道模式
问题:
1: 使用 ipvs NAT 模式,iptables 表之中是否会多出新的规则?
不会的。
ipvs 负载均衡算法
- 1:轮循调度rr,Round Robin
- 2:加权轮循wrr,Weighted Round Robin
- 3:目标地址散列DH, Destination Hashing
- 4: 源地址散列SH, Source Hashing
- 5:最少链接LC, Least Connections
- 6:加权最少链接WLC, Weighted Least Connections
- 7:最短的期望延迟SED, Shortest Expected Delay Scheduling
ipvsadm (ipvs 客户端):Linux 上用以设置 ipvs 规则的命令
ipvsadm之中的相关概念:
- 1: 虚拟服务
- 2: 虚拟服务规则
注意: 虚拟服务规则是虚拟服务之中的规则,两者是一对多的关系。
参数
虚拟服务参数:
- -A: 添加一条新的虚拟服务
- -L:显示内核中的虚拟服务规则
- -E:编辑一个虚拟服务
- -D:删除一个虚拟服务
- -t:TCP协议的虚拟服务,指定虚拟服务的网络协议类型。 后面需要跟着ip:端口
- -p: 后面跟时间,默认是360秒。实现无论使用任何算法,在一段时间内,能够实现将来自同一个地址的请求始终发向同一个RS
虚拟服务规则参数:
- -r:真实的服务器,后面跟着真实的服务器地址
- -s:指定使用的调度算法,有这样几个选项rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq
- -a:在一个虚拟服务之中添加一个真实的服务器
- -d:在一个虚拟服务之中删除一个真实的服务器
工作模式参数:
- -m:指定LVS的工作模式为NAT模式
- -g:指定LVS的工作模式为直接路由 模式
- -i:指定LVS的工作模式为 隧道模式
其他参数:
- -w:使用的时候,后面加数字,表示权重
- -n: 输出信息以数字形式显示。
ipvsadm 使用小例子
1: 使用docker容器模拟 服务器,使用ipvs 进行负载均衡实验。
ipvsadm之中的相关概念:
- 1: 虚拟服务
- 2: 虚拟服务规则
注意: 虚拟服务规则是虚拟服务之中的规则,两者是一对多的关系。
参数
虚拟服务参数:
- -A: 添加一条新的虚拟服务
- -L:显示内核中的虚拟服务规则
- -E:编辑一个虚拟服务
- -D:删除一个虚拟服务
- -t:TCP协议的虚拟服务,指定虚拟服务的网络协议类型。 后面需要跟着ip:端口
- -p: 后面跟时间,默认是360秒。实现无论使用任何算法,在一段时间内,能够实现将来自同一个地址的请求始终发向同一个RS
虚拟服务规则参数:
- -r:真实的服务器,后面跟着真实的服务器地址
- -s:指定使用的调度算法,有这样几个选项rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq
- -a:在一个虚拟服务之中添加一个真实的服务器
- -d:在一个虚拟服务之中删除一个真实的服务器
工作模式参数:
- -m:指定LVS的工作模式为NAT模式
- -g:指定LVS的工作模式为直接路由 模式
- -i:指定LVS的工作模式为 隧道模式
其他参数:
- -w:使用的时候,后面加数字,表示权重
- -n: 输出信息以数字形式显示。
ipvsadm 使用小例子
1: 使用docker容器模拟 服务器,使用ipvs 进行负载均衡实验。
目的:熟悉ipvsadm 的使用
步骤:
1: 创建两个docker容器,用以模拟不同的服务器。容器的功能,访问容器的8000端口,会返回容器的hostname。
docker run -d -p 8000:8000 --name first -t jwilder/whoami
docker run -d -p 8001:8000 --name second -t jwilder/whoami
2: 创建一个虚拟服务,对指定地址的访问请求 指定所使用负载均衡算法
ipvsadm -A -t 本机IP地址:端口 -s rr
3: 为虚拟服务之中增加虚拟服务规则,使用nat模式进行负载均衡,将请求转发到具体的服务器上。
注意:一个虚拟服务的唯一标志是 ip地址:端口
ipvsadm -a -t 本机IP地址:端口 -r 真实ip地址1:端口1 -m
ipvsadm -a -t 本机IP地址:端口 -r 真实ip地址2:端口2 -m
4: 访问本机地址,查看返回的结果,验证负载均衡的功能
curl 本机IP地址:端口
curl 本机IP地址:端口
实验结果发现: 两次返回的内容不一致。
2: 创建一个虚拟服务
ipvsadm -A -t 虚拟IP:端口 -s 负载均衡算法
3: 查看虚拟服务列表
ipvsadm -Ln
4: 显示虚拟服务详情
ipvsadm -Ln -t 虚拟ip:端口
5: 向一个虚拟服务之中添加规则
ipvsadm -a -t 虚拟ip:端口 -r 真实ip:真实端口 -m
6: 在虚拟服务之中删除规则
ipvsadm -d -t 虚拟ip:端口 -r 真实ip:真实端口
7: 删除虚拟服务
ipvsadm -D -t 虚拟ip:端口
8: 修改一个虚拟服务
ipvsadm -E -t 虚拟ip:端口
问题:
1: 使用ipvs 实现 负载均衡 和 使用iptables 实现负载均衡的优势?
自己目前的认知: ipvs 本身就是对负载均衡这个场景而设计,它所内置的数据结构在大数据量的情况下,更加高效。
推荐阅读
-
常见的防火墙配置命令和系统服务管理工具在CentOS 8的Linux系统中: systemctl与firewall
-
理解Linux中的ipvs与ipvsadm工具
-
在Linux中,深度解析CPU负载测试的工具与技巧
-
理解Linux中的线程原理与线程管理
-
Linux中的几种防火墙工具:ufw、firewalld与iptables简介
-
理解工作流:自动化业务流程管理与Activiti实践" **简述** 工作流(Workflow)是一种利用电脑技术自动化管理业务流程的方式,让不同参与者按既定路径执行任务,确保文档、信息或任务在预设规则下顺利传递,最终达成期望的业务目标。 **核心概念** - **工作流自动化**: 计算机驱动业务流程处理与执行,如在参与者间自动传递文档和任务。 - **目标与应用**: 管理工作流程确保按时、由合适的人执行,同时允许人工介入以增强灵活性。 - **工作流框架示例**: Activiti、JBPM、OSWorkflow 和 Workflow,它们背后通常依赖数据库支持。 - **关键组件**: ProcessEngine 在 Activiti 中扮演核心角色,负责流程实例创建、数据管理和流程监控。 **相关领域** - **业务流程管理 (BPM)**: 一种系统性方法论,聚焦于构建并优化端到端卓越业务流程以提升企业业绩,在EMBA、MBA等商业课程中得到关注。 - **业务流程建模与标记语言 (BPMN)**: 用于绘制业务流程图的工具,探讨其在不同场景下的应用精确度、标准化价值以及未来发展愿景。 **辅助术语** - 流对象 (Flow Objects): BPMN 中用于描述流程中活动、决策、序列和其他元素的具体实现单元。
-
理解与运用Linux系统中的export命令指南
-
理解Linux中的错误码:errno.h与返回值 - EINVAL详解
-
理解Linux中OPEN函数的返回值与错误处理指南
-
理解与操作指南:Linux 环境中的ps命令