本文主要讲述LVS-NAT原理介绍和配置实践,HA高可用方案基于Keepalived。html
LVS-NAT原理介绍和配置实践
2019年09月03日 - 拆分LVS-Keepalived中LVS-NAT
2019年08月23日 - 更新LVS/NAT、LVS/DR、LVS/TUN三种模式的原理和配置实践
2018年12月03日 - 精简和更新配置步骤
2018年07月31日 - 初稿前端
阅读原文 - https://wsgzao.github.io/post...linux
扩展阅读git
LVS - http://www.linuxvirtualserver...
Keepalived - http://www.keepalived.org/github
Virtual Server via NAT - http://www.linuxvirtualserver...
LVS和Keepalived官方中文手册PDF - https://pan.baidu.com/s/1s0P6...算法
如下术语涉及LVS三种工做模式的原理
VS/NAT | VS/TUN | VS/DR | |
---|---|---|---|
server | any | tunneling | non-arp device |
server network | private | LAN/WAN | LAN |
server number | low (10~20) | high | high |
server gateway | load balancer | own router | own router |
模式与特色 | NAT 模式 | IPIP 模式 | DR 模式 |
---|---|---|---|
对服务器的要求 | 服务节点可使任何操做系统 | 必须支持 IP 隧道,目前只有 Linux 系统支持 | 服务器节点支持虚拟网卡设备,可以禁用设备的 ARP 响应 |
网络要求 | 拥有私有 IP 地址的局域网络 | 拥有合法 IP 地址的局域,网或广域网 | 拥有合法 IP 地址的局域,服务器节点与负载均衡器必须在同一个网段 |
一般支持节点数量 | 10 到 20 个,根据负载均衡器的处理能力而定 | 较高,能够支持 100 个服务节点 | 较高,能够支持 100 个服务节点 |
网关 | 负载均衡器为服务器节点网关 | 服务器的节点同本身的网关或者路由器链接,不通过负载均衡器 | 服务节点同本身的网关或者路由器链接,不通过负载均衡器 |
服务节点安全性 | 较好,采用内部 IP,服务节点隐蔽 | 较差,采用公用 IP 地址,节点安全暴露 | 较差,采用公用 IP 地址,节点安全暴露 |
IP 要求 | 仅须要一个合法的 IP 地址做为 VIP 地址 | 除了 VIPO 地址外,每一个服务器界定啊须要拥有合法的 IP 地址,能够直接从路由到客户端 | 除了 VIP 外,每一个服务节点需拥有合法的 IP 地址,能够直接从路由到客户端 |
特色 | 地址转换 | 封装 IP | 修改 MAC 地址 |
配置复杂度 | 简单 | 复杂 | 复杂 |
LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。
在lvs+keepalived环境里面,lvs主要的工做是提供调度算法,把客户端请求按照需求调度在real服务器,keepalived主要的工做是提供lvs控制器的一个冗余,而且对real服务器作健康检查,发现不健康的real服务器,就把它从lvs集群中剔除,real服务器只负责提供服务。vim
重点理解NAT方式的实现原理和数据包的改变。
(1). 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
(2). PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
(3). IPVS比对数据包请求的服务是否为集群服务,如果,修改数据包的目标IP地址为后端服务器IP,而后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP
(4). POSTROUTING链经过选路,将数据包发送给Real Server
(5). Real Server比对发现目标为本身的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP
(6). Director Server在响应客户端前,此时会将源IP地址修改成本身的VIP地址,而后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP后端
LVS/NAT模型的特性
NAT(Network Address Translation 网络地址转换)是一种外网和内外地址映射的技术,内网能够是私有网址,外网可使用NAT方法修改数据报头,让外网与内网可以互相通讯。NAT模式下,网络数据报的进出都要通过LVS的处理。LVS需做为RS(真实服务器)的网关。当包到达LVS时,LVS作目标地址转换(DNAT),将目标IP改成RS的IP。RS接收到包之后,仿佛是客户端直接发给它的同样。RS处理完,返回响应时,源IP是RS IP,目标IP是客户端的IP。这时RS的包经过网(LVS)中转,LVS会作源地址转换(SNAT),将包的源地址改成VIP,这样,这个包对客户端看起来就仿佛是LVS直接返回给它的。客户端没法感知到后端RS的存在。安全
(1)RIP和DIP必须在同一个IP网络,且应该使用私网地址;RS的网关要指向DIP;
(2)请求报文和响应报文都必须经由Director转发;Director易于成为系统瓶颈;
(3)支持端口映射,可修改请求报文的目标PORT;
(4)vs必须是Linux系统,rs能够是任意系统;bash
缺点:在整个过程当中,全部输入输出的流量都要通过LVS 调度服务器。显然,LVS 调度服务器的网络I/O压力将会很是大,所以很容易成为瓶颈,特别是对于请求流量很小,而响应流量很大的Web类应用来讲尤其如此。
优势:NAT模式的优势在于配置及管理简单,因为了使用NAT技术,LVS 调度器及应用服务器能够在不一样网段中,网络架构更灵活,应用服务器只须要进行简单的网络设定便可加入集群。
# Install keepalived # Ubuntu apt-get install keepalived ipvsadm # CentOS yum install keepalived ipvsadm # update iptables vim /etc/sysconfig/iptables # For keepalived: # allow vrrp -A INPUT -p vrrp -j ACCEPT -A INPUT -p igmp -j ACCEPT # allow multicast -A INPUT -d 224.0.0.18 -j ACCEPT # reload iptables service iptables reload # open ip_forward echo "1" > /proc/sys/net/ipv4/ip_forward # edit sysctl.conf vi /etc/sysctl.conf net.ipv4.ip_forward = 1 sysctl -p # keepalived for lvs-nat vim /etc/keepalived/keepalived.conf vrrp_sync_group NC-MAIN-API { group { NC-MAIN-API-PUB } } vrrp_instance NC-MAIN-API-PUB { state BACKUP interface bond1 virtual_router_id 222 priority 100 advert_int 1 nopreempt authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { xx.xx.xx.xx/25 dev bond1 } } virtual_server xx.xx.xx.xx 15000 { delay_loop 6 lb_algo rr lb_kind NAT protocol TCP real_server 10.71.12.69 15000 { weight 100 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 15000 } } real_server 10.71.12.76 15000 { weight 100 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 15000 } } }
修改默认网关指向NAT的VIP地址
LVS和Keepalived的原理介绍和配置实践
LVS原理介绍和配置实践
Keepalived原理介绍和配置实践
LVS-NAT原理介绍和配置实践
LVS-DR原理介绍和配置实践
LVS-TUN原理介绍和配置实践