Nginx socket負載


Netty Tcp 負載均衡(上)----Nginx

 閱讀約 6 分鍾

為什么要負載均衡

隨着設備連接數增多,單台服務器支撐的TCP長連接數有限,這個時候程序架構就需要改變,一般都會采取橫向擴展,增加多台服務器程序。怎么將TCP長連接均衡的路由到不同的服務器,這個時候就需要實現負載均衡了。

兩種不同的場景和方案

目前筆者想到的兩種應用場景是:

  1. 客戶端實現比較簡單,所有客戶端都會連接同一個ip域名和端口。客戶端不會去請求可用服務器列表,然后去根據具列表選擇不同的服務器。比如說一些DTU等硬件設備或者因為前期沒有考慮負載均衡而導致的遺留老項目。
    解決方案:
    在目標服務器上做TCP負載均衡,轉發到不同的服務器上,但是這種方案需要解決負載均衡服務器的單點故障。例如可以通過Nginx開啟TCP負載均衡功能來實現。
  2. 客戶端本身就實現了請求可用服務器列表,然后根據列表去連接不同的服務器。

方案一:Nginx實現負載均衡

1. 安裝Nginx
參考的資料:https://my.oschina.net/ouyush...
參考的資料:http://www.jiagoumi.com/work/...
(0)安裝依賴的軟件

(1)下載:wget http://nginx.org/download/ngi...

(2)解壓:執行指令

tar -xzvf nginx-1.12.2.tar.gz -C 你的目錄 

(3)配置: 需要添加 with-stream參數 nginx tcp負載均衡需要

 ./configure --prefix=/opt/nginx-1.9.3 --with-http_stub_status_module --with-http_realip_module --with-http_ssl_module --with-pcre --with-http_realip_module --with-stream

(4)make

(5)make install
nginx會安裝到特定的文件夾 /opt,如果一開始把源碼包下載到改目錄,編譯安裝時會提示類似錯誤

clipboard.png

把源碼包移到其它目錄就能解決。

2.修改nginx.conf添加負載均衡配置
官方樣例:

worker_processes auto; error_log /var/log/nginx/error.log info; events { worker_connections 1024; } stream { upstream backend { hash $remote_addr consistent; server backend1.example.com:12345 weight=5; server 127.0.0.1:12345 max_fails=3 fail_timeout=30s; server unix:/tmp/backend3; } upstream dns { server 192.168.0.1:53535; server dns.example.com:53; } server { listen 12345; proxy_connect_timeout 1s; proxy_timeout 3s; proxy_pass backend; } server { listen 127.0.0.1:53 udp; proxy_responses 1; proxy_timeout 20s; proxy_pass dns; } server { listen [::1]:12345; proxy_pass unix:/tmp/stream.socket; } }

自定義測試配置為:

#tcp load balance stream{ #更多更詳細的參數,查看文檔或網絡 upstream netty_test{ server 192.168.0.26:6666 weight=1; server 192.168.0.26:6667 weight=1; } server{ listen 6665; proxy_pass netty_test; } } http { include mime.types; default_type application/octet-stream; ... 

以上配置只是為了方便測試,因此配置的較為簡陋,生產環境中,詳細配置請看官方樣例。
相關端口不要忘記開放,會存在防火牆導致無法連接的情況。

3.連接測試
啟動兩個netty服務器程序,在生產環境中會部署到不同的服務器,這里測試,在同一台PC上啟動兩個netty程序,端口分別為6666和6667。使用客戶端連接192.168.0.26:6665,當建立4個連接時,客戶端會被平均路由到 192.168.0.26:6666和6667兩個server

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM