CPP集群聊天服務器開發實踐(五):nginx負載均衡配置

1 負載均衡器的原理與功能

單臺Chatserver可以容納大約兩萬臺客戶端同時在線聊天,為了提升并發量最直觀的辦法需要水平擴展服務器的數量,三臺服務器可以容納六萬左右的客戶端。

負載均衡器的作用:

  1. 把client的請求按照負載均衡算法分發到具體業務服務器chatserver上面:保證server與client的長連接,依據輪詢算法/權重算法等將不同client連接到不同server上面,提升client的容量
  2. 能夠和chatserver保持心跳機制,監測chatserver故障:nginx能夠實時監測server是否由于網絡故障無法為client提供服務,可以引入心跳計數器進行判斷
  3. 能夠發現新添加的chatserver設備,方便擴展服務器數量:能夠在不關閉原有服務器的基礎上平滑添加新的server供nginx調度分配

2 nginx的tcp負載均衡配置和功能驗證

選擇nginx的tcp負載均衡模塊需要解決的問題:

  1. 如何進行nginx源碼編譯,包括tcp負載均衡模塊
  2. nginx.conf配置文件中如何配置負載均衡
  3. nginx的平滑加載配置文件啟動

配置參考:Nginx負載均衡實踐-CSDN博客

安裝好nginx之后位于usr/local/nginx之下:

配置文件位于conf文件夾下的nginx.conf,可執行文件位于sbin下。

nginx提供了應用層(http web)和傳輸層(tcp)的負載均衡,在nginx.conf中修改即可。

#nginx tcp loadbalance config
stream{upstream MyServer{/*weight:設置服務器權重,加權輪詢算法中權重大的優先分配客戶端max_fails:與server的心跳機制,超過3次未響應則認為故障fail_timeout:每次心跳監測的時長為30s添加新的服務器無需停止nginx服務,只需要修改此配置文件即可*/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;//客戶端統一連接nginx的8000端口,由nginx進行負載均衡listen 8000;//反向代理對象為MyServerproxy_pass MyServer;tcp_nodelay on;}
}

./nginx -s reload:平滑重啟配置文件

./nginx -s stop:停止nginx服務

結果測試:

(1)啟動nginx

(2)測試連接

兩臺客戶端訪問8000端口的nginx分別被分配到了兩臺服務器。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/895732.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895732.shtml
英文地址,請注明出處:http://en.pswp.cn/news/895732.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MYSQL中的性能調優方法

MySQL性能調優是數據庫管理的重要工作之一,目的是通過調整系統配置、優化查詢語句、合理設計數據庫架構等方法,提高數據庫的響應速度和處理能力。以下是常見的MySQL性能調優方法,結合具體的案例進行說明。 1. 優化查詢語句 查詢語句是數據庫…

【論文筆記】Transformer^2: 自適應大型語言模型

Code repo: https://github.com/SakanaAI/self-adaptive-llms 摘要 自適應大型語言模型(LLMs)旨在解決傳統微調方法的挑戰,這些方法通常計算密集且難以處理多樣化的任務。本文介紹了Transformer(Transformer-Squared)…

HTTP的“對話”邏輯:請求與響應如何構建數據橋梁?

一、前言 作為現代互聯網通信的基石,HTTP協議定義了客戶端與服務器之間的“對話規則”。每一次網頁加載、API調用或文件傳輸的背后,都離不開精心構造的HTTP請求與響應。請求中封裝了用戶的意圖——從請求方法、資源路徑到提交的數據;響應則承…

安裝 Docker Desktop 修改默認安裝目錄到指定目錄

Docker Desktop安裝目錄設置 Docker Desktop 默認安裝位置 (C:\Program Files\Docker\Docker) 是這個 ,導致系統盤占用過大,大概2G ; 那么如何安裝到其他磁盤呢? 根據docker desktop 官網 Docker Desktop install 我們可以看到&a…

基于實例詳解pytest鉤子pytest_generate_tests動態生成測試的全過程

關注開源優測不迷路 大數據測試過程、策略及挑戰 測試框架原理,構建成功的基石 在自動化測試工作之前,你應該知道的10條建議 在自動化測試中,重要的不是工具 作為一名軟件開發人員,你一定深知有效測試策略的重要性,尤其…

Kotlin Lambda

Kotlin Lambda 在探索Kotlin Lambda之前,我們先回顧下Java中的Lambda表達式,Java 的 Lambda 表達式是 Java 8 引入的一項強大的功能,它使得函數式編程風格的代碼更加簡潔和易于理解。Lambda 表達式允許你以一種更簡潔的方式表示實現接口&…

C#學習之DataGridView控件

目錄 一、DataGridView控件常用屬性、方法、事件匯總表 1. 常用方法、屬性和事件匯總 二、DataGridView 控件的常用方法調用 1. DataBind() 方法 2. Clear() 方法 3. Refresh() 方法 4. Sort() 方法 5. ClearSelection() 方法 6. BeginEdit() 方法 7. EndEdit() 方法…

本地事務簡介

本地事務簡介 1 事務基本性質 數據庫事務的幾個特性:原子性(Automicity)、一致性(Consistency)、隔離性或獨立性(islation)和持久性(Durability),簡稱ACID。 原子性:一系列的操作,其整體不可拆分,要么同時成功&#…

PyQt組態軟件 拖拽設計界面測試

PyQt組態軟件測試 最近在研究PyQt,嘗試寫個拖拽設計界面的組態軟件,目前實現的功能如下: 支持拖入控件,鼠標拖動控件位置 拖動控件邊緣修改控件大小支持屬性編輯器,修改當前選中控件的屬性 拖動框選控件,點選控件 控…

軟件評測師復習之計算機網絡(4)

目錄 (一)1.網絡功能和分類2.OSI七層模型3.TCP/IP協議4.傳輸介質(二)1.通信方式和交換方式2.IP地址3.IPv64.網絡規劃與設計5.磁盤冗余陣列6.網絡存儲技術(一) 1.網絡功能和分類 計算機網絡功能:數據通信、資源共享、負載均衡、高可靠性 按分布范圍和拓撲結構劃分: 網絡分類…

機器學習-1:線性回歸

常用的線性回歸模型主要有以下這些 簡單線性回歸多元線性回歸多項式回歸嶺回歸套索回歸彈性網絡回歸逐步回歸 一.簡單的一元線性回歸 1.導入必備的庫 #導入必備的庫 import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.model_selection …

SQL SERVER的PARTITION BY應用場景

SQL SERVER的PARTITION BY關鍵字說明介紹 PARTITION BY關鍵字介紹具體使用場景排名計算累計求和分組求最值分組內百分比計算分組內移動平均計算分組內數據分布統計分組內數據偏移計算 總結 PARTITION BY關鍵字介紹 在SQL SERVER中,關鍵字PARTITION BY主要用于窗口函…

NO.18十六屆藍橋杯備戰|循環嵌套|乘法表|斐波那契|質數|水仙花數|(C++)

循環嵌套 循環嵌套的使? while , do while , for ,這三種循環往往會嵌套在?起才能更好的解決問題,就是我們所說的:循環嵌套。這三種循環都可以任意嵌套使? ?如: 寫?個代碼,打印?個乘法?…

leetcode - hot100 - python - 專題一:哈希

1、兩數之和 簡單 題目: 給定一個整數數組 nums 和一個整數目標值 target,請你在該數組中找出 和為目標值 target 的那 兩個 整數,并返回它們的數組下標。你可以假設每種輸入只會對應一個答案,并且你不能使用兩次相同的元素。你可…

JavaEE-SpringBoot快速入門

文章目錄 本節目標Maven什么是Maven創建一個Maven項目maven項目功能maven的依賴管理全球倉庫, 私服, 本地服務器, 配置國內鏡像 第一個SpringBoot項目創建項目運行SpringBoot程序 SpringBoot原理初步Web服務器 總結 本節目標 了解什么是maven, 配置國內源使用Springboot創建項…

【Viper】配置格式與支持的數據源與go案例

Viper 是一個用于 Go 應用程序的配置管理庫,支持多種配置格式和數據源。 安裝依賴 go get github.com/spf13/viper go get github.com/spf13/viper/remote go get go.etcd.io/etcd/client/v3"github.com/spf13/viper/remote"要寫在etcd客戶端import里 1…

【C/C++】后綴表達式 藍橋杯/ACM備賽

核心考點:1.棧的應用 2.字符串處理 題目描述 所謂后綴表達式是指這樣的一個表達式:式中不再引用括號,運算符號放在兩個運算對象之后,所有計算按運算符號出現的順序,嚴格地由左而右新進行(不用考慮運算符的…

【AI實踐】deepseek支持升級git

當前Windows 11 WSL的git是2.17,Android Studio提示需要升級到2.19版本 網上找到指導文章 安裝git 2.19.2 cd /usr/src wget https://www.kernel.org/pub/software/scm/git/git-2.19.2.tar.gz tar xzf git-2.19.2.tar.gz cd git-2.19.2 make prefix/usr/l…

QEMU 搭建 Ubuntu x86 虛擬機

1. 安裝 QEMU 在 Ubuntu 系統中,可以通過以下命令安裝 QEMU: sudo apt-get update sudo apt-get install qemu-system-x86_64 qemu-kvm libvirt-daemon libvirt-clients bridge-utils virt-manager2. 創建虛擬硬盤鏡像 qemu-img create -f raw ubuntu…

Linux驅動層學習:Linux 設備樹

設備樹是一種數據結構,包含多個節點,用于描述硬件設備及其配置信息,它通常用于嵌入式系統中,尤其是在Linux操作系統中,幫助操作系統識別和管理硬件資源,設備樹不是代碼,而是一種用數據描述硬件信…