本文主要講述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原理介紹和配置實踐