Nginx如何實現四層負載均衡?
導讀 | 負載均衡可以分為靜態負載均衡和動態負載均衡,接下來,我們就一起來分析下Nginx如何實現四層靜態負載均衡和四層動態負載均衡。 |
Nginx的四層靜態負載均衡需要啟用ngx_stream_core_module模組,預設情況下,ngx_stream_core_module是沒有啟用的,需要在安裝Nginx時,新增--with-stream配置引數啟用,如下所示。
./configure --prefix=/usr/local/nginx-1.17.2 --with-openssl=/usr/local/src/openssl-1.0.2s --with-pcre=/usr/local/src/pcre-8.43 --with-zlib=/usr/local/src/zlib-1.2.11 --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-cc-opt=-O3 --with-stream --with-http_ssl_module
配置HTTP負載均衡時,都是配置在http指令下,配置四層負載均衡,則是在stream指令下,結構如下所示.
stream { upstream mysql_backend { ...... } server { ...... } }
upstream mysql_backend { server 192.168.175.201:3306 max_fails=2 fail_timeout=10s weight=1; server 192.168.175.202:3306 max_fails=2 fail_timeout=10s weight=1; least_conn; }
server { #監聽埠,預設使用的是tcp協議,如果需要UDP協議,則配置成listen 3307 udp; listen 3307; #失敗重試 proxy_next_upstream on; proxy_next_upstream_timeout 0; proxy_next_upstream_tries 0; #超時配置 #配置與上游伺服器連線超時時間,預設60s proxy_connect_timeout 1s; #配置與客戶端上游伺服器連線的兩次成功讀/寫操作的超時時間,如果超時,將自動斷開連線 #即連線存活時間,透過它可以釋放不活躍的連線,預設10分鐘 proxy_timeout 1m; #限速配置 #從客戶端讀資料的速率,單位為每秒位元組數,預設為0,不限速 proxy_upload_rate 0; #從上游伺服器讀資料的速率,單位為每秒位元組數,預設為0,不限速 proxy_download_rate 0; #上游伺服器 proxy_pass mysql_backend; }
配置完之後,就可以連線Nginx的3307埠,訪問資料庫了。
完整的Nginx配置如下:
user hadoop hadoop; worker_processes auto; error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { use epoll; worker_connections 1024; } stream { upstream mysql_backend { server 192.168.175.100:3306 max_fails=2 fail_timeout=10s weight=1; least_conn; } server { #監聽埠,預設使用的是tcp協議,如果需要UDP協議,則配置成listen 3307 udp; listen 3307; #失敗重試 proxy_next_upstream on; proxy_next_upstream_timeout 0; proxy_next_upstream_tries 0; #超時配置 #配置與上游伺服器連線超時時間,預設60s proxy_connect_timeout 1s; #配置與客戶端上游伺服器連線的兩次成功讀/寫操作的超時時間,如果超時,將自動斷開連線 #即連線存活時間,透過它可以釋放不活躍的連線,預設10分鐘 proxy_timeout 1m; #限速配置 #從客戶端讀資料的速率,單位為每秒位元組數,預設為0,不限速 proxy_upload_rate 0; #從上游伺服器讀資料的速率,單位為每秒位元組數,預設為0,不限速 proxy_download_rate 0; #上游伺服器 proxy_pass mysql_backend; } }
配置Nginx四層靜態負載均衡後,重啟Nginx時,Worker程式一直不退出,會報錯,如下所示。
nginx: worker process is shutting down;
這是因為Worker程式維持的長連線一直在使用,所以無法退出,只能殺掉程式。可以使用Nginx的四層動態負載均衡解決這個問題。
使用Nginx的四層動態負載均衡有兩種方案:使用商業版的Nginx和使用開源的nginx-stream-upsync-module模組。注意:四層動態負載均衡可以使用nginx-stream-upsync-module模組,七層動態負載均衡可以使用nginx-upsync-module模組。
使用如下 為Nginx新增nginx-stream-upsync-module模組和nginx-upsync-module模組,此時,Nginx會同時支援四層動態負載均衡和HTTP七層動態負載均衡。
git clone git clone git clone cp -r nginx-stream-upsync-module/* nginx-upsync/nginx-stream-upsync-module/ cp -r nginx-upsync-module/* nginx-upsync/nginx-upsync-module/ ./configure --prefix=/usr/local/nginx-1.17.2 --with-openssl=/usr/local/src/openssl-1.0.2s --with-pcre=/usr/local/src/pcre-8.43 --with-zlib=/usr/local/src/zlib-1.2.11 --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-cc-opt=-O3 --with-stream --add-module=/usr/local/src/nginx-upsync --with-http_ssl_module
配置HTTP負載均衡時,都是配置在http指令下,配置四層負載均衡,則是在stream指令下,結構如下所示,
stream { upstream mysql_backend { ...... } server { ...... } }
upstream mysql_backend { server 127.0.0.1:1111; #佔位server upsync 192.168.175.100:8500/v1/kv/upstreams/mysql_backend upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off; upsync_dump_path /usr/local/nginx-1.17.2/conf/mysql_backend.conf; }
upsync指令指定從consul哪個路徑拉取上游伺服器配置;
upsync_timeout配置從consul拉取上游伺服器配置的超時時間;
upsync_interval配置從consul拉取上游伺服器配置的間隔時間;
upsync_type指定使用consul配置伺服器;
strong_dependency配置nginx在啟動時是否強制依賴配置伺服器,如果配置為on,則拉取配置失敗時Nginx啟動同樣失敗。
upsync_dump_path指定從consul拉取的上游伺服器後持久化到的位置,這樣即使consul伺服器出現問題,本地還有一個備份
server { #監聽埠,預設使用的是tcp協議,如果需要UDP協議,則配置成listen 3307 udp; listen 3307; #失敗重試 proxy_next_upstream on; proxy_next_upstream_timeout 0; proxy_next_upstream_tries 0; #超時配置 #配置與上游伺服器連線超時時間,預設60s proxy_connect_timeout 1s; #配置與客戶端上游伺服器連線的兩次成功讀/寫操作的超時時間,如果超時,將自動斷開連線 #即連線存活時間,透過它可以釋放不活躍的連線,預設10分鐘 proxy_timeout 1m; #限速配置 #從客戶端讀資料的速率,單位為每秒位元組數,預設為0,不限速 proxy_upload_rate 0; #從上游伺服器讀資料的速率,單位為每秒位元組數,預設為0,不限速 proxy_download_rate 0; #上游伺服器 proxy_pass mysql_backend; }
curl -X PUT -d "{\"weight\":1, \"max_fails\":2, \"fail_timeout\":10}" http://192.168.175.100:8500/v1/kv/upstreams/mysql_backend/192.168.175.201:3306 curl -X PUT -d "{\"weight\":1, \"max_fails\":2, \"fail_timeout\":10}" http://192.168.175.100:8500/v1/kv/upstreams/mysql_backend/192.168.175.202:3306
curl -X DELETE http://192.168.175.100:8500/v1/kv/upstreams/mysql_backend/192.168.175.202:3306
server { listen 13307; upstream_show; }
配置upstream_show指令後,可以透過curl http://192.168.175.100:13307/upstream_show檢視當前動態負載均衡上游伺服器列表。
Nginx的完整配置如下:
user hadoop hadoop; worker_processes auto; error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { use epoll; worker_connections 1024; } stream { upstream mysql_backend { server 127.0.0.1:1111; #佔位server upsync 192.168.175.100:8500/v1/kv/upstreams/mysql_backend upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off; upsync_dump_path /usr/local/nginx-1.17.2/conf/mysql_backend.conf; } server { #監聽埠,預設使用的是tcp協議,如果需要UDP協議,則配置成listen 3307 udp; listen 3307; #失敗重試 proxy_next_upstream on; proxy_next_upstream_timeout 0; proxy_next_upstream_tries 0; #超時配置 #配置與上游伺服器連線超時時間,預設60s proxy_connect_timeout 1s; #配置與客戶端上游伺服器連線的兩次成功讀/寫操作的超時時間,如果超時,將自動斷開連線 #即連線存活時間,透過它可以釋放不活躍的連線,預設10分鐘 proxy_timeout 1m; #限速配置 #從客戶端讀資料的速率,單位為每秒位元組數,預設為0,不限速 proxy_upload_rate 0; #從上游伺服器讀資料的速率,單位為每秒位元組數,預設為0,不限速 proxy_download_rate 0; #上游伺服器 proxy_pass mysql_backend; } server { listen 13307; upstream_show; } }
本文地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2724252/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Nginx】面試官:給我講講Nginx如何實現四層負載均衡?Nginx面試負載
- nginx實現負載均衡Nginx負載
- 【知識分享】四層負載均衡和七層負載均衡負載
- Nginx如何實現負載均衡釋出策略?Nginx負載
- nginx+tomcat實現負載均衡NginxTomcat負載
- Nginx實現簡單的負載均衡Nginx負載
- Keepalived實現Nginx負載均衡高可用Nginx負載
- Docker Compose+nginx實現負載均衡DockerNginx負載
- nginx實現兩臺服務負載均衡Nginx負載
- nginx讓多個tomcat實現負載均衡NginxTomcat負載
- nginx負載均衡Nginx負載
- NGINX 負載均衡Nginx負載
- 【Nginx】負載均衡Nginx負載
- LVS#MySQL+Keepalived四層負載均衡MySql負載
- 【Nginx】如何實現Nginx的高可用負載均衡?看完我也會了!!Nginx負載
- Linux下玩轉nginx系列(五)---nginx實現負載均衡LinuxNginx負載
- Nginx實現請求的負載均衡 + keepalived實現Nginx的高可用Nginx負載
- Nginx 高階篇(三)負載均衡的實現Nginx負載
- .Net Core+Nginx實現專案負載均衡Nginx負載
- Consul-template+nginx實現自動負載均衡Nginx負載
- 【Nginx】如何使用Nginx實現MySQL資料庫的負載均衡?看完我懂了!!NginxMySql資料庫負載
- Nginx負載均衡模式Nginx負載模式
- windows伺服器第四層負載均衡_基於NLB負載均衡詳解Windows伺服器負載
- 【Nginx】Windows平臺下配置Nginx服務實現負載均衡NginxWindows負載
- 負載均衡4層負載
- LVS和Nginx實現負載均衡功能的比較Nginx負載
- Nginx 動靜分離與負載均衡的實現Nginx負載
- Nginx基於TCP/UDP埠的四層負載均衡(stream模組)配置梳理NginxTCPUDP負載
- 在Linux中,如何實現負載均衡?Linux負載
- CentOS7 實現 Keepalived + Nginx 實現高可用 Web 負載均衡CentOSNginxWeb負載
- Ribbon實現負載均衡負載
- GRPC 負載均衡實現RPC負載
- 簡單實踐搭建 nginx 負載均衡Nginx負載
- Nginx負載均衡高可用Nginx負載
- 012.Nginx負載均衡Nginx負載
- Nginx負載均衡詳解Nginx負載
- nginx Win下實現簡單的負載均衡(1)nginx搭建部署Nginx負載
- nginx+php 實現代理與負載均衡 (1臺nginx,2臺php)NginxPHP負載