文章目錄
- 前言
- 1. Ubuntu下nginx安裝
- 2. nginx的tcp負載配置
前言
假設一臺機器支持兩萬的并發量,現在我們需要保證八萬的并發量。首先想到的是升級服務器的配置,比如提高 CPU 執行頻率,加大內存等提高機器的物理性能來解決此問題。但是單臺機器的性能畢竟是有限的。
這個時候我們就可以增加服務器的數量,將用戶請求分發到不同的服務器上分擔壓力,這就是負載均衡。那我們就需要有一個第三方組件充當負載均衡器,由它負責將不同的請求分發到不同的服務器上。這里介紹 Nginx
的負載均衡功能。
Nginx
作為 tcp
負載均衡模塊的原因:
- 把
client
的請求按照負載算法分發到具體的業務服務器ChatServer
上 - 能夠
ChantServer
保持心跳機制,檢測ChatServer
故障 - 能夠發現新添加的
ChatServer
設備,方便擴展服務器數量
1. Ubuntu下nginx安裝
在服務器快速集群環境搭建中,都迫切需要一個能拿來即用的負載均衡器,nginx在1.9版本之前,只支持http協議web服務器的負載均衡,從1.9版本開始以后,nginx開始支持tcp的長連接負載均衡,但是nginx默認并沒有編譯tcp負載均衡模塊,編寫它時,需要加入–with-stream參數來激活這個模塊。
nginx編譯加入–with-stream參數激活tcp負載均衡塊
1、安裝包下載
地址:https://nginx.org/download/
2、上傳至Ubuntu中并解壓縮
tar -zxvf nginx-1.16.1.tar.gz
nginx編譯安裝需要先安裝pcre、openssl、zlib等庫。也可以直接編譯執行下面的configure命令,
根據錯誤提示信息,安裝相應缺少的庫即可。
下面的make命令會向系統路徑拷貝文件,需要在root用戶下執行
sudo ./configure -with-stream
sudo make && make install
編譯完成后,默認安裝在了/usr/local/aginx目錄。
cd /usr/local/nginx
可執行文件在sbin目錄里面,配置文件在conf日錄里面。
sudo vim ./conf/nginx.conf
sudo ./sbin/nginx -s reload#重讀conf
sudo ./sbin/nginx#啟動
2. nginx的tcp負載配置
在bash中使用
sudo netstat -tanp
查看當前tcp連接情況
安裝的nginx默認會啟動監聽,要注意一下他們的端口位置
在events與http之間添加tcp的配置,如下:
#user nobody;
worker_processes 1;#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024;
}# nginx tcp loadbalance config
stream {upstream MyServer {server 127.0.0.1:6000 weight=1 max_fails=3 fail_timeout=30s;server 127.0.0.1:6002 weight=1 max_fails=3 fail_timeout=30s;}server {proxy_connect_timeout 1s;#proxy_timeout 3s;listen 8080;proxy_pass MyServer;tcp_nodelay on;}
}http {include mime.types;default_type application/octet-stream;#log_format main '$remote_addr - $remote_user [$time_local] "$request" '# '$status $body_bytes_sent "$http_referer" '# '"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;#gzip on;server {listen 90;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;location / {root html;index index.html index.htm;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}
其中,tcp部分為
# nginx tcp loadbalance config
stream { #這里的端口指向的是服務器端口upstream MyServer { #要添加多少個服務器,就在下面開放多少個端口server 127.0.0.1:6000 weight=1 max_fails=3 fail_timeout=30s;server 127.0.0.1:6002 weight=1 max_fails=3 fail_timeout=30s;}server {proxy_connect_timeout 1s; #設置代理連接超時時間#proxy_timeout 3s;listen 8080; #監聽端口,客戶端連接此端口即可,nginx自動處理分配消息給服務器proxy_pass MyServer; #代理的名字tcp_nodelay on; }
}
客戶端只需連接nginx配置的監聽端口,即可與服務器進行通信