[network] IPVS / Load balancer / Linux Virtual Server

 

Load Balancer

IPVS: http://kb.linuxvirtualserver.org/wiki/IPVS

  NAT: http://kb.linuxvirtualserver.org/wiki/LVS/NAT

    VIP: http://kb.linuxvirtualserver.org/wiki/VIP

    ARP: http://kb.linuxvirtualserver.org/wiki/ARP_Issues_in_LVS/DR_and_LVS/TUN_Clusters

  TUN: http://kb.linuxvirtualserver.org/wiki/LVS/TUN

    http://www.linuxvirtualserver.org/VS-IPTunneling.html

  DR:http://kb.linuxvirtualserver.org/wiki/LVS/DR

    http://www.linuxvirtualserver.org/VS-DRouting.html

  FNAT: <<LVS_FULLNAT概要设计.docx>>   可以从下面的链接里download。

中文资料:http://linuxvirtualserver.org/zh/index.html

 

LVS集群的通用体系结构 

负载调度器(load balancer)

服务器池(server pool)

共享存储(shared storage)

  分布式锁管理器(Distributed Lock Manager)

 

高可用性

一般来说,调度器的可靠性较高,因为调度器上运行的程序较少而且大部分程序早已经遍历过,但我们不能排除硬件老化、网络线路或者人为误 操作等主要故障。为了避免调度器失效而导致整个系统不能工作,
我们需要设立一个从调度器作为主调度器的备份。两个心跳(Heartbeat)进程[6]分 别在主、从调度器上运行,它们通过串口线和UDP等心跳线来相互定时地汇报各自的健康状况。
当从调度器不能听得主调度器的心跳时,从调度器通过ARP欺骗 (Gratuitous ARP)来接管集群对外的Virtual IP Address,同时接管主调度器的工作来提供负载调度服务。
当主调度器恢复时,这里有两种方法,一是主调度器自动变成从调度器,二是从调度器释放 Virtual IP Address,主调度器收回Virtual IP Address并提供负载调度服务。
这里,多条心跳线可以使得因心跳线故障导致误判(即从调度器认为主调度器已经失效,其实主调度器还在正常工作)的概论 降到最低。 通常,当主调度器失效时,主调度器上所有已建立连接的状态信息将丢失,已有的连接会中断。客户需要向重新连接,从调度器才会将新连接调 度到各个服务器上,这对客户会造成一定的不便。
为此,IPVS调度器在Linux 内核中实现一种高效状态同步机制,将主调度器的状态信息及时地同步到从调度器。当从调度器接管时,绝大部分已建立的连接会持续下去。

 

负载均衡的发展历史,以及NAT、TUN、DR三种方式优缺点的比较

http://linuxvirtualserver.org/zh/lvs3.html

 

PrivateLink是啥

https://docs.aws.amazon.com/aws-technical-content/latest/aws-vpc-connectivity-options/aws-privatelink.html

在支持fullnat的基础上,可以通过配置实现 PrivateLink

 

LVS集群的负载调度

http://linuxvirtualserver.org/zh/lvs4.html

 

LVS项目下的软件,包括:http://www.linuxvirtualserver.org/software/index.html

 

IPVS: http://www.linuxvirtualserver.org/software/ipvs.html

包括,内核模块:  /linux-4.18-rc2/net/netfilter/ipvs

管理工具:ipvsadm   https://mirrors.edge.kernel.org/pub/linux/utils/kernel/ipvsadm/

 

看代码

  /linux-4.18-rc2/net/netfilter/ipvs

入口:

2373 module_init(ip_vs_init); 

hook

2116 static const struct nf_hook_ops ip_vs_ops[] = {                                 
2117         /* After packet filtering, change source only for VS/NAT */             
2118         {                                                                       
2119                 .hook           = ip_vs_reply4,                                 
2120                 .pf             = NFPROTO_IPV4,                                 
2121                 .hooknum        = NF_INET_LOCAL_IN,                             
2122                 .priority       = NF_IP_PRI_NAT_SRC - 2,                        
2123         },                                                                      
2124         /* After packet filtering, forward packet through VS/DR, VS/TUN,        
2125          * or VS/NAT(change destination), so that filtering rules can be        
2126          * applied to IPVS. */                                                  
2127         {                                                                       
2128                 .hook           = ip_vs_remote_request4,                        
2129                 .pf             = NFPROTO_IPV4,                                 
2130                 .hooknum        = NF_INET_LOCAL_IN,                             
2131                 .priority       = NF_IP_PRI_NAT_SRC - 1,              
。。。 。。。

 

为了清楚 hook点的进入条件和场景:

阅读 netfilter相关内容: 跳转至 

[network] netfilter

 

posted on 2018-06-28 21:43  toong  阅读(257)  评论(0编辑  收藏  举报