1、LVS實現nat,dr
-
LVS簡介
LVS是Linux Virtual Server的簡稱,其主要包含VS:Virtual server 和RS:Real server,VS根據請求報文中的目標IP和目標協議及端口通過其調度算法轉發至後端的RS,實現四層路由器,四層交換機。 -
LVS的兩個組件
- ipvadm:用戶空間的命令行工具,規則創建和管理,用於管理集羣服務及Real Server
- ipvs:工作於內核空間的netfilter的INPUT鉤子之上的框架
-
LVS集羣類型中的術語
- VS:Virtual Server ,Director
- RS:Real server,backend server
- CIP:Client IP
- VIP:Virtual Server IP
- DIP:Director IP
- RIP:Real Server IP
-
LVS集羣類型
- lvs-nat:修改請求報文的目標IP,多目標IP的DNAT
- lvs-dr:操縱封裝新的MAC地址
- lvs-tun:在原請求IP報文之外新加一個IP首部
- lvs-fullnat:修改請求報文的源和目的IP(默認不支持)
-
LVS-NAT搭建
-
NAT集羣設計要點
多目標IP的DNAT,通過將請求報文中的目標地址和目標端口修改爲某挑出的RS的RIP和PORT實現轉發,須滿足以下條件
1、RIP和DIP必須在同一個IP網絡,且應該使用私網地址,RS的網關要指向DIP
2、請求報文和響應報文都必須由Director轉發,Director易於成爲系統瓶頸
3、支持端口映射,可修改請求報文的目標端口
4、vs必須是Linux系統,rs可以是任意系統 -
設計TOP
LVS-NAT設計圖
-
搭建過程
- 在VS服務器上安裝ipvsadm命令行工具(Centos默認開啓了ipvs模塊)
yum -y install ipvsadm
- 創建集羣
ipvsadm -A -t 10.192.1.165:80 -s rr ipvsadm -a -t 10.192.1.165:80 -r 192.168.0.2:80 -m ipvsadm -a -t 10.192.1.165:80 -r 192.168.0.3:80 -m
- 查看集羣
[root@ceph-client ~]# ipvsadm -L IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP ceph-client:http rr -> 192.168.0.2:http Masq 1 0 0 -> 192.168.0.3:http Masq 1 0 0 [root@ceph-client ~]#
- 在RS服務器上安裝並配置nginx靜態test.html頁面
- curl測試訪問
[root@yum ~]# for i in {1..10};do curl 10.192.1.165/test.html;done <h1> RS1 192.168.0.2 <h1> <h1> RS2 192.168.0.3 <h1> <h1> RS1 192.168.0.2 <h1> <h1> RS2 192.168.0.3 <h1> <h1> RS1 192.168.0.2 <h1> <h1> RS2 192.168.0.3 <h1> <h1> RS1 192.168.0.2 <h1> <h1> RS2 192.168.0.3 <h1> <h1> RS1 192.168.0.2 <h1> <h1> RS2 192.168.0.3 <h1> [root@yum ~]# 在VS查看 [root@ceph-client ~]# ipvsadm -l IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP ceph-client:http rr -> 192.168.0.2:http Masq 1 0 5 -> 192.168.0.3:http Masq 1 0 5
- 在VS服務器上安裝ipvsadm命令行工具(Centos默認開啓了ipvs模塊)
-
-
LVS-DR搭建
- DR集羣設計要點
Direct Routing,直接路由
通過爲請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是某挑選出的RIP所在接口的MAC地址;源IP/PORT,以及目標IP/PORT均不變
Director和各RS都得配置使用VIP
1、確保前端路由器將目標IP爲VIP的請求報文發往Director
a、在前端網關做靜態綁定(不建議)
b、在RS上使用arptables(不建議)
c、在RS上修改內核參數以限制arp通告及應答級別(推薦)
arp_announce=2
arp_ignore=1
2、RS的RIP可以使用私網地址,也可以是公網地址,RIP與DIP在同一個IP網絡,RIP的網關不能指向DIP,以確保相應報文不會經由Director
3、RS跟Director要在同一個物理網絡
4、請求報文要經由Director,但相應不能經由Director,而是由RS直接發往Client
5、不支持端口映射 -
設計TOP
LVS-DR設計圖
- DR集羣設計要點
* 搭建過程
* 在VS服務器上安裝ipvsadm命令行工具(Centos默認開啓了ipvs模塊)
`yum -y install ipvsadm`
* 創建集羣
```
ipvsadm -A -t 10.192.1.170:80 -s rr
ipvsadm -a -t 10.192.1.170:80 -r 10.192.1.163 -g
ipvsadm -a -t 10.192.1.170:80 -r 10.192.1.164 -g
```
* 查看集羣
```
[root@vs ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.192.1.170:80 rr
-> 10.192.1.163:80 Route 1 0 0
-> 10.192.1.164:80 Route 1 0 0
[root@vs ~]#
```
* 在RS服務器上安裝並配置nginx靜態test.html頁面
* curl測試訪問
```
[root@yum ~]# for i in {1..10};do curl 10.192.1.170/test.html;done
<h1> RS1 10.192.1.164 <h1>
<h1> RS2 10.192.1.163 <h1>
<h1> RS1 10.192.1.164 <h1>
<h1> RS2 10.192.1.163 <h1>
<h1> RS1 10.192.1.164 <h1>
<h1> RS2 10.192.1.163 <h1>
<h1> RS1 10.192.1.164 <h1>
<h1> RS2 10.192.1.163 <h1>
<h1> RS1 10.192.1.164 <h1>
<h1> RS2 10.192.1.163 <h1>
[root@yum ~]#
在VS查看
[root@vs ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.192.1.170:80 rr
-> 10.192.1.163:80 Route 1 0 5
-> 10.192.1.164:80 Route 1 0 5
```
2、nginx反向代理,虛擬主機
- 概念
反向代理(Reverse Proxy)方式是指以代理服務器來接受Internet上的連接請求,然後將請求轉發給內部網絡上的服務器;並將從服務器上得到的結果返回給Internet上請求連接的客戶端,此時代理服務器對外就表現爲一個服務器。 -
反向代理工作原理圖
反向代理工作原理圖
用戶終端爲互聯網用戶,被代理服務器是提供應用服務的服務器。
- 實現nginx反向代理虛擬主機
- 環境:
10.192.1.163 nginx反向代理服務器
10.192.1.164 nginx 虛擬機主機(靜態頁面)
兩臺服務器均已安裝nginx服務 - 配置代理服務器
首先在主配置文件http{}中定義緩存設置 http { ... proxy_cache_path /data/nginx/cache levels=1:1:1 keys_zone=mcache:10m max_size=3g; ... 定義虛擬機主機:conf.d/ilinux.conf } server { listen 80; server_name www.ilinux.com; proxy_cache mcache; proxy_cache_key $request_uri; proxy_cache_methods GET HEAD; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; proxy_cache_use_stale http_502; location / { proxy_pass http://www.index.com; } location ~*.jpg$ { proxy_pass http://10.192.1.164:8081; } } 說明:代理服務器配置了監聽80端口基於FQDN的虛擬主機 並定義了緩存配置 將 url中 以.gpg結尾的圖片訪問代理到http://10.192.1.164:8081這個虛擬主機 將其它的請求代理到http://www.index.com這個虛擬主機
- 配置被代理服務器
cd /etc/nginx/conf.d 分別定義兩個虛擬主機: 定義ilinux虛擬主機 server { listen 80; server_name www.index.com; root /data1/; location / { autoindex on; autoindex_exact_size off; autoindex_localtime on; } } vim /data1/index.thml <h1>www.index.com<h1> 定義圖片訪問虛擬主機 server { listen 8081; server_name _; root /data; location / { autoindex on; autoindex_exact_size off; autoindex_localtime on; } }
-
測試
ilinux測試頁
- 環境: