本文使用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)
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()); }
42.192.22.128:8000,並且發送訊息,可以看到訊息被分發到了兩台主機上,說明客戶端的請求確實被分發到了不同的服務端。
以上是Nginx如何設定Tcp負載平衡的詳細內容。更多資訊請關注PHP中文網其他相關文章!