ipvs负载均衡(五)代码结构简易分析
来源:互联网 发布:全民枪战挂机软件 编辑:程序博客网 时间:2024/04/29 21:25
ipvs负载均衡(五)代码结构简易分析
从本章开始,将会开始分析ipvs代码,尽量按照ipvs原理介绍的思路以及netfilter机制进行介绍
如何获取源码
既然要开始阅读ipvs代码,那么肯定需要源码,源码在哪里获得呢?
我这里提供了两个方式:
- 我这里提供了一个git分支里面存储了4.4.60linux内核源码版本的ipvs源码,
https://github.com/Miss-you/kernel-netfilter-sample-code
,其中的ipvs目录;缺点是版本不会更新。 - 下载linux内核源码,https://www.kernel.org,其中ipvs源码是在net/netfilter/ipvs目录下
ipvs文件目录结构
拿到源码之后,也不是立即去阅读源码,而是先要分析文件结构;然后确定主要关注的代码的流程。
现在先来看代码结构,因为命名比较清晰,基本上大部分文件可以通过文件名猜出该文件是负责什么功能
.|-- Kconfig|-- Makefile|-- ip_vs_app.c|-- ip_vs_conn.c|-- ip_vs_core.c|-- ip_vs_ctl.c|-- ip_vs_dh.c|-- ip_vs_est.c|-- ip_vs_fo.c|-- ip_vs_ftp.c|-- ip_vs_lblc.c|-- ip_vs_lblcr.c|-- ip_vs_lc.c|-- ip_vs_nfct.c|-- ip_vs_nq.c|-- ip_vs_ovf.c|-- ip_vs_pe.c|-- ip_vs_pe_sip.c|-- ip_vs_proto.c|-- ip_vs_proto_ah_esp.c|-- ip_vs_proto_sctp.c|-- ip_vs_proto_tcp.c|-- ip_vs_proto_udp.c|-- ip_vs_rr.c|-- ip_vs_sched.c|-- ip_vs_sed.c|-- ip_vs_sh.c|-- ip_vs_sync.c|-- ip_vs_wlc.c|-- ip_vs_wrr.c`-- ip_vs_xmit.c0 directories, 31 files
- ip_vs_conn.c 连接管理相关
- ip_vs_core.c ipvs主干(核心)流程
- ip_vs_ctl.c 用户面配置ipvs
- ip_vs_dh.c 目标地址散列调度(Destination Hashing Scheduling)
- ip_vs_est.c
- ip_vs_fo.c
- ip_vs_ftp.c 支持FTP协议
- ip_vs_lblc.c 基于局部性的最少链接(Locality-Based Least Connections Scheduling)
- ip_vs_lblcr.c 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)
- ip_vs_lc.c 最小连接调度(Least-Connection Scheduling)
- ip_vs_nfct.c
- ip_vs_nq.c 不排队调度(Never Queue Scheduling)
- ip_vs_ovf.c
- ip_vs_pe.c
- ip_vs_pe_sip.c
- ip_vs_proto.c 协议相关,支持UDP/TCP/SCTP
- ip_vs_proto_ah_esp.c
- ip_vs_proto_sctp.c IPVS支持SCTP代码
- ip_vs_proto_tcp.c IPVS支持TCP代码
- ip_vs_proto_udp.c IPVS支持UDP代码
- ip_vs_rr.c 轮叫调度(Round-Robin Scheduling)
- ip_vs_sched.c
- ip_vs_sed.c 最短预期延时调度(Shortest Expected Delay Scheduling)
- ip_vs_sh.c 源地址散列调度(Source Hashing Scheduling)
- ip_vs_sync.c
- ip_vs_wlc.c 加权最小连接调度(Weighted Least-Connection Scheduling)
- ip_vs_wrr.c 加权轮叫调度(Weighted Round-Robin Scheduling)
- ip_vs_xmit.c 报文上下行传输代码
ipvs的IP负载方式主要有三种模式,当然在ipvs引入淘宝之后,是有第四种模式了……:
- NAT模式,NAT模式,用的比较多但是效率低
- TUN模式,IP隧道模式,基本没人用
- DR模式,直接路由模式,需要lvs服务器与实际提供服务的服务器在同一个物理网段(因为直接通过mac地址通信),效率较高
- FULL-NAT模式,好像是淘宝自己开发的吧,这个兼具了NAT的优点以及解决了NAT性能低下的问题
ipvs的IP负载均衡调度算法主要有以下十种
- 轮叫调度(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)
- 最短预期延时调度(Shortest Expected Delay Scheduling)
- 不排队调度(Never Queue Scheduling)
下一步
先从ip_vs_core.c中开始分析
0 0
- ipvs负载均衡(五)代码结构简易分析
- ipvs负载均衡(三)ipvs三种工作方式
- ipvs负载均衡(一)基本概念
- ipvs负载均衡(二)lvs集群介绍
- ipvs负载均衡(四)推荐个原理网站
- IPVS负载均衡(六)浅析ip_vs_core.c
- ipvs负载均衡(四)ipvs三种工作方式之tun模式
- 负载均衡(五)
- LVS IPVS负载均衡机制详解
- 负载均衡实战之一:lvs 核心ipvs
- ipvs负载均衡模块的内核实现
- FreeBSD6.1 +CARP+IPVS双机热备份负载均衡技术
- IPVS-DR+heartbeat+ldirectord实现高可用负载均衡集
- IPVS-DR+heartbeat+ldirectord实现高可用负载均衡集
- 使用IPVS实现Kubernetes入口流量负载均衡
- 简易WCF负载均衡方案
- Nginx负载均衡简易方法
- 简易WCF负载均衡方案
- KNN从原理到实现
- leetcode解题之153&154. Find Minimum in Rotated Sorted Array版(在旋转的数组中查找最小数字)
- 【面经】深信服测试实习生面经
- Android开发技术资料
- linux 安装配置zookeeper
- ipvs负载均衡(五)代码结构简易分析
- linux中虚拟网卡配置
- php中$_GET变量
- HRD释疑
- String、list、map转换为json
- Python学习之对SQLite数据库详解
- Python——列表生成式
- Golang里的Future/Promise
- bzoj2083 POI2010 Intelligence Test