ipvs负载均衡(五)代码结构简易分析

来源:互联网 发布:全民枪战挂机软件 编辑:程序博客网 时间:2024/04/29 21:25

ipvs负载均衡(五)代码结构简易分析

从本章开始,将会开始分析ipvs代码,尽量按照ipvs原理介绍的思路以及netfilter机制进行介绍

如何获取源码

既然要开始阅读ipvs代码,那么肯定需要源码,源码在哪里获得呢?

我这里提供了两个方式:

  1. 我这里提供了一个git分支里面存储了4.4.60linux内核源码版本的ipvs源码,https://github.com/Miss-you/kernel-netfilter-sample-code,其中的ipvs目录;缺点是版本不会更新。
  2. 下载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引入淘宝之后,是有第四种模式了……:

  1. NAT模式,NAT模式,用的比较多但是效率低
  2. TUN模式,IP隧道模式,基本没人用
  3. DR模式,直接路由模式,需要lvs服务器与实际提供服务的服务器在同一个物理网段(因为直接通过mac地址通信),效率较高
  4. FULL-NAT模式,好像是淘宝自己开发的吧,这个兼具了NAT的优点以及解决了NAT性能低下的问题

ipvs的IP负载均衡调度算法主要有以下十种

  1. 轮叫调度(Round-Robin Scheduling)
  2. 加权轮叫调度(Weighted Round-Robin Scheduling)
  3. 最小连接调度(Least-Connection Scheduling)
  4. 加权最小连接调度(Weighted Least-Connection Scheduling)
  5. 基于局部性的最少链接(Locality-Based Least Connections Scheduling)
  6. 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)
  7. 目标地址散列调度(Destination Hashing Scheduling)
  8. 源地址散列调度(Source Hashing Scheduling)
  9. 最短预期延时调度(Shortest Expected Delay Scheduling)
  10. 不排队调度(Never Queue Scheduling)

下一步

先从ip_vs_core.c中开始分析

0 0
原创粉丝点击