Nginx如何配置Tcp負載均衡

本文使用nginx作為代理服務器,用來做負載均衡。只是一個簡單的應用示例,并不涉及原理。

Nginx如何配置Tcp負載均衡

(這里主機有限,42.192.22.128主機8000端口用來做代理服務器監聽端口,8181是服務監聽端口)
客戶端訪問代理服務器,由代理服務器分發請求給相應的服務端。
修改nginx的配置文件來配置Tcp負載均衡(Nginx安裝后配置文件在/usr/local/nginx/conf/nginx.config中,Nginx可執行程序在/usr/local/nginx/sbin目錄下)
在nginx.conf配置文件中添加如下字段:

Nginx如何配置Tcp負載均衡

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)

Nginx如何配置Tcp負載均衡

客戶端用一個簡單的Qt小程序模擬一下:

void?Widget::on_btnConnection_clicked() { ????m_pTcpSocket->connectToHost(ui->lineeditIp->text(),?ui->lineeditPort->text().toUShort()); ????qDebug()?state(); }  void?Widget::on_btnSend_clicked() { ????qDebug()?state(); ????QByteArray?byteArray; ????byteArray.append(ui->texteditMsg->toPlainText()); ????const?char?*pChatMsg?=?byteArray.data(); ????qDebug()?write(pChatMsg,?byteArray.size()); }

先后啟動兩個客戶端,通過TCP連接至42.192.22.128:8000,并發送消息,可以看到消息被分發到了兩臺主機上,說明客戶端的請求確實被分發到了不同的服務端上。

Nginx如何配置Tcp負載均衡

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享