利用nginx實現基于傳輸層的四層負載均衡

nginx利用ngx_stream_core_module實現四層的負載均衡服務。作為四層負載均衡nginx和lvs的區別在于:

  • lvs工作于內核層,相對來說效率更高,性能更強;

  • nginx工作于用戶空間;

  • lvs不會受到套接字數量的限制;

  • nginx作為四層負載均衡也需要監聽套接字來和客戶端,后臺服務器進行連接,會受到套接字數量限制,不過這個問題可以通過keepalive長連接來避免;

一、實驗環境

此次實驗基于三臺服務器實現,分別負載httpd服務、ssh服務和mysql服務:

  • nginx四層負載均衡器:192.168.11.100

  • 內網真實服務器RS-1:192.168.11.201;

  • 內網真實服務器RS-2:192.168.11.202;

二、實驗配置步驟:

內網服務器配置:

  1. 內網兩臺服務器分別安裝nginx、和mysql服務,并開啟相關服務

    yum install -y nginx mariadb-server

nginx負載均衡器配置:

  1. 修改/etc/nginx/nginx.conf配置文件:

    #定義http、mysql和ssh的負載均衡集群并調用,默認算法為rr(輪詢)# stream {         upstream websrvs {                 server 192.168.11.201:80;                 server 192.168.11.202:80;         }          upstream mysqlsrvs {                 server 192.168.11.201:3306;                 server 192.168.11.202:3306;         }          upstream sshsrvs {                 server 192.168.11.201:22;                 server 192.168.11.202:22;         }         server {                 listen 80;                 proxy_pass websrvs;         }         server {                 listen 10022;                 proxy_pass sshsrvs;         } }
  2. 測試是否可行:

    1. 測試http:

      利用nginx實現基于傳輸層的四層負載均衡

    2. 測試ssh:

      利用nginx實現基于傳輸層的四層負載均衡

      可以看到兩次登錄的主機名完全不一樣

    3. 測試mysql:

      在一個數據庫建立新庫,名字為testdb,另一個不建立,然后用for循環查詢庫即可看到結果:

      利用nginx實現基于傳輸層的四層負載均衡

      可以看到每次呈現的數據庫都不一樣,所以說明是通過輪詢方法連接到兩臺不同的數據庫了。

原創文章,作者:王子豪,如若轉載,請注明出處:http://www.www58058.com/79335

(1)
王子豪王子豪
上一篇 2017-07-03 12:30
下一篇 2017-07-03 15:42

相關推薦

  • 鏈接分析算法之:主題敏感PageRank

      前面的討論提到。PageRank忽略了主題相關性,導致結果的相關性和主題性降低,對于不同的用戶,甚至有很大的差別。例如,當搜索“蘋果”時,一個數碼愛好者可能是想要看 iphone 的信息,一個果農可能是想看蘋果的價格走勢和種植技巧,而一個小朋友可能在找蘋果的簡筆畫。理想情況下,應該為每個用戶維護一套專用向量,但面對海量用戶這種方法顯然不可行。所…

    Linux干貨 2016-02-17
  • FHS文件系統下個各目錄功能

    FHS文件系統下個各目錄功能 FHS文件系統的建立是為了讓開發者和用戶可以預測軟件安裝文件和文件夾的位置。對整個linux的文件系統系統做了以下的規范:     /bin:命令二進制文件的存放目錄;     /boot:系統啟動時一些文件存放的目錄,包含引導linux的重要文件,…

    Linux干貨 2016-10-18
  • 設計模式(一)工廠模式Factory(創建型)

      在面向對象編程中, 最通常的方法是一個new操作符產生一個對象實例,new操作符就是用來構造對象實例的。但是在一些情況下, new操作符直接生成對象會帶來一些問題。舉例來說, 許多類型對象的創造需要一系列的步驟: 你可能需要計算或取得對象的初始設置; 選擇生成哪個子對象實例; 或在生成你需要的對象之前必須先生成一些輔助功能的對象。 在…

    Linux干貨 2015-06-23
  • CentOS啟動流程排錯

    grub legacy配置文件:/boot/grub/grub.conf     default=#: 設定默認啟動的菜單項;落單項(title)編號從0開始      timeout=#:指定菜單項等待選項選擇的時長     &…

    Linux干貨 2016-09-13
  • CentOS啟動流程排錯

    grub legacy CentOS 6啟動流程: POST –> Boot Sequence(BIOS) –> Boot Loader –> Kernel(ramdisk) –> rootfs –> switchroot –> /sbin/init …

    Linux干貨 2016-09-13
  • linux 學習筆記

    第一周

    Linux干貨 2018-03-16
欧美性久久久久