LVS、nginx反向代理

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  
      
  • 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設計圖

* 搭建過程
    * 在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測試頁

       


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章