Nginx配置Tcp負載均衡的方法
本文使用Nginx作為代理服務器,用來做負載均衡。隻是一個簡單的應用示例,並不涉及原理。
(這裡主機有限,42.192.22.128主機8000端口用來做代理服務器監聽端口,8181是服務監聽端口)
客戶端訪問代理服務器,由代理服務器分發請求給相應的服務端。
修改Nginx的配置文件來配置Tcp負載均衡(Nginx安裝後配置文件在/usr/local/nginx/conf/nginx.config
中,Nginx可執行程序在/usr/local/nginx/sbin
目錄下)
在nginx.conf
配置文件中添加如下字段:
stream { upstream Server { server 42.192.22.128:8181 weight=1 max_fails=3 fail_timeout=30s; server 1.13.180.100:8181 weight=1 max_fails=3 fail_timeout=30s; } server { listen 8000; proxy_pass Server; } }
這裡主要涉及兩個配置塊upstream
和server
在upstream
中定義瞭兩臺主機,weight
表示權重,兩臺主機都為1,說明代理服務器會平分客戶端請求給上遊服務器,max_fails
與fail_timeout
配合使用,指在fail_timeout
時間段內,如果向當前的上遊服務器轉發失敗次數超過3次,則認為在當前的fail_timeout
時間段內這臺上遊服務器不可用。fail_timeout
表示該時間段內轉發失敗多少次後就認為上遊服務器暫時不可用。server
中指定瞭代理服務器監聽的端口號8000
,proxy_pass
指定upstream
塊中的名字Server
。
配置完成後,使用nginx -s reload
使運行中的Nginx重讀配置項並生效。
上遊服務器使用“瑞士軍刀”nc
命令來模擬TCP服務端,監聽在相應的端口:(這裡的Ip地址是雲主機的內網ip)
客戶端用一個簡單的Qt小程序模擬一下:
void Widget::on_btnConnection_clicked() { m_pTcpSocket->connectToHost(ui->lineeditIp->text(), ui->lineeditPort->text().toUShort()); qDebug() << m_pTcpSocket->state(); } void Widget::on_btnSend_clicked() { qDebug() << m_pTcpSocket->state(); QByteArray byteArray; byteArray.append(ui->texteditMsg->toPlainText()); const char *pChatMsg = byteArray.data(); qDebug() << m_pTcpSocket->write(pChatMsg, byteArray.size()); }
先後啟動兩個客戶端,通過TCP連接至42.192.22.128:8000
,並發送消息,可以看到消息被分發到瞭兩臺主機上,說明客戶端的請求確實被分發到瞭不同的服務端上。
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Nginx使用ngx_http_upstream_module實現負載均衡功能示例
- nginx 負載均衡輪詢方式配置詳解
- Nginx代理Redis哨兵主從配置的實現
- 超實用的Nginx常見配置合集分享
- 基於nginx實現上遊服務器動態自動上下線無需reload的實現方法