HAProxy + Keepalived + Nginx 高可用負載均衡系統

1. 項目背景

在現代Web應用中,高可用性和負載均衡是兩個至關重要的需求。本項目旨在通過HAProxy實現流量分發,通過Keepalived實現高可用性,通過Nginx提供后端服務。該架構能夠確保在單點故障的情況下,系統仍然能夠正常運行,并且能夠均衡地分配流量到多個后端服務器。

2. 環境準備

2.1 服務器配置

角色IP 地址服務器名稱功能描述
HAProxy 主節點192.168.65.131haproxy-master負載均衡器(主)
HAProxy 備節點192.168.65.132haproxy-backup負載均衡器(備)
后端 Web 服務器 1192.168.65.133webserver1提供 Web 服務
后端 Web 服務器 2192.168.65.134webserver2提供 Web 服務
虛擬 IP192.168.65.100-用于 Keepalived 高可用

2.2 軟件需求

服務器角色需要安裝的軟件
HAProxy 主節點HAProxy, Keepalived
HAProxy 備節點HAProxy, Keepalived
后端 Web 服務器Nginx

3. 服務器網絡環境配置

3.1 設置靜態IP地址

為確保服務器在重啟后仍能保持固定的網絡配置,在rhel9系統中,需要為每臺服務器設置靜態IP地址。編輯 /etc/NetworkManager/system-connections/ens160.nmconnection文件:

[ipv4]
address1=192.168.65.131/24,192.168.65.2
dns=8.8.8.8;
method=manual

3.2 配置主機名和主機映射

為便于在集群環境中快速識別和管理各服務器,需要為每臺服務器配置主機名。

HAProxy 主節點(192.168.65.131)
  1. 設置主機名

    sudo hostnamectl set-hostname haproxy-master
  2. 更新 /etc/hosts 文件

    sudo vi /etc/hosts

    添加以下內容:

    127.0.0.1   haproxy-master
    192.168.65.131 haproxy-master
    192.168.65.132 haproxy-backup
    192.168.65.133 webserver1
    192.168.65.134 webserver2
HAProxy 備節點(192.168.65.132)
  1. 設置主機名

    sudo hostnamectl set-hostname haproxy-backup
  2. 更新 /etc/hosts 文件

    sudo vi /etc/hosts

    添加以下內容:

    127.0.0.1   haproxy-backup
    192.168.65.131 haproxy-master
    192.168.65.132 haproxy-backup
    192.168.65.133 webserver1
    192.168.65.134 webserver2
后端 Web 服務器 1(192.168.65.133)
  1. 設置主機名

    sudo hostnamectl set-hostname webserver1
  2. 更新 /etc/hosts 文件

    sudo vi /etc/hosts

    添加以下內容:

    127.0.0.1   webserver1
    192.168.65.131 haproxy-master
    192.168.65.132 haproxy-backup
    192.168.65.133 webserver1
    192.168.65.134 webserver2
后端 Web 服務器 2(192.168.65.134)
  1. 設置主機名

    sudo hostnamectl set-hostname webserver2
  2. 更新 /etc/hosts 文件

    sudo vi /etc/hosts

    添加以下內容:

    127.0.0.1   webserver2
    192.168.65.131 haproxy-master
    192.168.65.132 haproxy-backup
    192.168.65.133 webserver1
    192.168.65.134 webserver2

3.3 永久關閉selinux?

sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

重啟并查看

reboot
getenforce

3.4?配置防火墻規則

為保障網絡安全,需要優化防火墻規則,開啟必要的服務端口,同時關閉不必要的端口。使用 firewalld 配置防火墻:

# 開啟HAProxy的80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload# 開啟Keepalived的VRRP端口
firewall-cmd --zone=public --add-port=112/udp --permanent
firewall-cmd --reload

3.5?實現SSH免密登錄

為提高運維效率并減少人為錯誤,需要實現SSH免密登錄。生成SSH密鑰對,并將公鑰復制到所有服務器:

# 在主節點生成密鑰對
ssh-keygen -t rsa# 將公鑰復制到其他服務器
ssh-copy-id haproxy-backup
ssh-copy-id webserver1
ssh-copy-id webserver2

4. 軟件安裝與配置

4.1 HAProxy 主節點和備節點配置

4.1.1 安裝 HAProxy 和 Keepalived

在HAProxy主節點和備節點上安裝必要的軟件:

yum install -y haproxy keepalived
4.1.2 配置 HAProxy

編輯 /etc/haproxy/haproxy.cfg 文件,配置HAProxy以實現流量分發到后端Web服務器:

globallog /dev/log local0log /dev/log local1 noticechroot /var/lib/haproxyuser haproxygroup haproxydaemondefaultslog     globalmode    httpoption  httplogoption  dontlognulltimeout connect 5000timeout client  50000timeout server  50000frontend http_frontbind *:80default_backend http_backbackend http_backbalance roundrobinserver web1 192.168.65.133:80 checkserver web2 192.168.65.134:80 check
4.1.3 配置 Keepalived

編輯 /etc/keepalived/keepalived.conf 文件,配置Keepalived以實現主備切換,確保高可用性:

主節點(192.168.65.131)

global_defs {router_id SERVER1
}
vrrp_instance VI_1 {state MASTERinterface ens160virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1234}virtual_ipaddress {192.168.65.100}
}

備節點(192.168.65.132)

global_defs {router_id SERVER2
}
vrrp_instance VI_1 {state BACKUPinterface ens160virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass 1234}virtual_ipaddress {192.168.65.100}
}
4.1.4 啟動服務

啟動并啟用HAProxy和Keepalived服務,確保配置生效:

sudo systemctl enable haproxy
sudo systemctl start haproxy
sudo systemctl enable keepalived
sudo systemctl start keepalived

?keepalived主節點(192.168.65.131):成功獲取vip:192.168.100?

?keepalived備節點(192.168.65.132):沒有獲取vip,正常

4.2 后端 Web 服務器配置

4.2.1 安裝 Nginx

在后端Web服務器上安裝Nginx,為用戶提供Web服務:

sudo yum install -y nginx
4.2.2 配置 Nginx

編輯 /etc/nginx/conf.d/test1.conf/etc/nginx/conf.d/test2.conf 文件,配置Nginx以響應HTTP請求,并返回服務器標識信息:

Web服務器1(192.168.65.133)

server {listen 80;location / {return 200 "Welcome to Web Server webserver1\n";}
}

Web服務器2(192.168.65.134)

server {listen 80;location / {return 200 "Welcome to Web Server webserver2\n";}
}
4.2.3 啟動 Nginx并測試

啟動并啟用Nginx服務,確保其正常運行:

sudo systemctl enable nginx
sudo systemctl start nginx

5. 測試與驗證

5.1 驗證 HAProxy 和 Keepalived

5.1.1 正常訪問測試

驗證客戶端是否能夠通過虛擬IP正常訪問后端服務器:

curl 192.168.65.100

預期結果: 返回 Welcome to Web Server webserver1?或 Welcome to Web Server webserver2。

5.1.2 主節點故障模擬

驗證在主節點故障時,備節點是否能夠正常接管虛擬IP:

  1. 在主節點(192.168.65.131)上停止Keepalived服務

    systemctl stop keepalived
  2. 在客戶端再次訪問虛擬IP,觀察響應內容。

預期結果: 備節點接管虛擬IP,客戶端仍能正常訪問后端服務器。

主節點(192.168.65.131)失去vip?

?備用節點(192.168.65.132)成功獲取vip?

5.2 驗證 Nginx

驗證后端服務器的Nginx服務是否正常運行:

curl http://192.168.65.133
curl http://192.168.65.134

預期結果: 分別返回 Welcome to Web Server webserver1和 Welcome to Web Server webserver2。

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

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

相關文章

Kubernetes控制平面組件:Kubelet詳解(一):API接口層介紹

云原生學習路線導航頁(持續更新中) kubernetes學習系列快捷鏈接 Kubernetes架構原則和對象設計(一)Kubernetes架構原則和對象設計(二)Kubernetes架構原則和對象設計(三)Kubernetes控…

VIC-2D 7.0 為平面樣件機械試驗提供全視野位移及應變數據軟件

The VIC-2D系統是一個完全集成的解決方案,它基于優化的相關算法為平面試樣的力學測試提供非接觸、全場的二維位移和應變數據,可測量關注區域內的每個像素子集的面內位移,并通過多種張量選項計算全場應變。The VIC-2D 系統可測量超過 2000%變形…

多線程訪問Servlet如何謹慎處理共享資源

1. 避免共享狀態(最佳實踐) 核心思想:Servlet 本身應設計為無狀態(Stateless),不依賴實例變量存儲請求相關數據。 實現方式: 將變量聲明在方法內部(局部變量)&#xff0…

從Windows到Mac的過渡:學習筆記與心得

作為一名長期使用Windows操作系統的用戶,當我決定轉換到Mac時,心中充滿了期待與好奇。Mac以其獨特的操作系統和設計風格著稱,雖然有許多相似之處,但仍有不少差異需要適應。為了幫助其他有類似轉換需求的朋友,我總結了一…

TestNG接口自動化

第一章、 Rest assured接口測試框架 一、概述 接口自動化的框架,主要是用來做接口自動化測試,返回的報文都是JSON 語法比較簡單,只需要掌握常用的方法 用例運行的速度非常快 斷言的機制 Json 封裝相關方法,jsonpath,x…

【速寫】KV-cache與解碼的再探討(以束搜索實現為例)

文章目錄 1 Beam Search 解碼算法實現2 實現帶KV Cache的Beam Search解碼3 關于在帶kv-cache的情況下的use_cache參數 1 Beam Search 解碼算法實現 下面是一個使用PyTorch實現的beam search解碼算法: 幾個小細節: 束搜索可以加入length_penalty&#…

ABP-Book Store Application中文講解 - 前期準備 - Part 3:Acme.BookStore項目模塊詳解之二

1. 匯總 ABP-Book Store Application中文講解-匯總-CSDN博客 2. 前一章 ABP-Book Store Application中文講解 - 前期準備 - Part 3:Acme.BookStore項目模塊詳解 項目之間的引用關系。 目錄 1. .Domain.Shared 2. .Domain 3. .Application.Contracts 4. .Application 5…

【Leetcode刷題隨筆】349. 兩個數組的交集

1. 題目描述 給定兩個數組nums1和nums2&#xff0c;返回它們的交集。輸出結果中的每個元素一定是唯一的。我們可以不考慮輸出結果的順序。 示例1: 輸入:nums1 [1,2,2,1], nums2 [2,2] 輸出&#xff1a;[2] 題目條件&#xff1a; 1 < nums1.length, nums2.length < 10…

Unity打包安卓失敗 Build failure 解決方法

【Unity】打包安卓失敗 Build failure 的解決方法_com.android.build.gradle.internal.res.linkapplicat-CSDN博客 unity在打包時設置手機屏幕橫屏豎屏的方法_unity打包默認橫屏-CSDN博客

Window、CentOs、Ubuntu 安裝 docker

Window 版本 網址&#xff1a;https://www.docker.com/ 下載 下載完成后&#xff0c;雙擊安裝就可以了 Centos 版本 卸載 Docker &#xff08;可選&#xff09; yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-log…

Matlab自學筆記五十四:符號數學工具箱和符號運算、符號求解、繪圖

1.什么是符號數學工具箱&#xff1f; 符號數學工具箱是Matlab針對符號對象的運算功能&#xff0c;它引入了一種特殊的數據類型 - 符號對象&#xff1b; 該數據類型包括符號數字&#xff0c;符號變量&#xff0c;符號表達式和符號函數&#xff0c;還包含符號矩陣&#xff0c;以…

OpenCV進階操作:圖像的透視變換

文章目錄 前言一、什么是透視變換&#xff1f;二、透視變換的過程三、OpenCV透視變換核心函數四、文檔掃描校正&#xff08;代碼&#xff09;1、預處理2、定義輪廓點的排序函數3、定義透視變換函數4、讀取原圖并縮放5、輪廓檢測6、繪制最大輪廓7、對最大輪廓進行透視變換8、旋轉…

【python】基礎知識點100問

以下是Python基礎語法知識的30條要點整理,涵蓋數據類型、函數、控制結構等核心內容,結合最新資料歸納總結: 基礎30問 一、函數特性 函數多返回值 支持用逗號分隔返回多個值,自動打包為元組,接收時可解包到多個變量 def func(): return 1, "a" x, y = func()匿…

采用AI神經網絡降噪算法的通信語音降噪(ENC)模組性能測試和應用

采用AI降噪的語言通話環境抑制模組性能效果測試 隨著AI時代來臨.通話設備的環境噪音抑制也進入AI降噪算法時代. AI神經網絡降噪技術是一款革命性的語音處理技術&#xff0c;他突破了傳統單麥克風和雙麥克風降噪的局限性,利用采集的各種日常環境中的噪音樣本進行訓練學習.讓降噪…

openwrt目錄結構(部分)

1&#xff0c;openwrt 原始目錄需要注意的目錄 tools: 該目錄下存放著一些&#xff0c;編譯工程的自動化工具包和一些在編譯過程用到的命令包&#xff0c; 查看目錄下的Makefile&#xff0c;知道其會在編譯過程中將依賴包下載 例如&#xff1a; autoconf / lzma / mkimage/ …

RDB和AOF的區別

Redis提供兩種主要的持久化機制&#xff1a;RDB&#xff08;Redis Database&#xff09;和AOF&#xff08;Append Only File&#xff09;&#xff0c;它們在數據持久化方式、性能影響及恢復策略上各有特點。以下是兩者的對比分析及使用建議&#xff1a; RDB&#xff08;快照持久…

基于大模型的甲狀腺結節診療全流程預測與方案研究報告

目錄 一、引言 1.1 研究背景與目的 1.2 研究意義 1.3 國內外研究現狀 二、大模型預測原理與方法 2.1 相關大模型概述 2.2 數據收集與預處理 2.3 模型訓練與驗證 三、術前預測與評估 3.1 結節性質預測 3.1.1 良惡性判斷 3.1.2 與傳統診斷方法對比 3.2 手術風險預測…

逆向破解:x64dbg

文章目錄 一、CPU窗口1、反匯編窗口2、寄存器窗口3、棧地址窗口4、十六進制數據窗口5、堆棧參數解析窗口 二、常用快捷鍵三、字符串檢索功能四、調試功能1、上一步 一、CPU窗口 1、反匯編窗口 2、寄存器窗口 寄存器窗口用于顯示和解釋當前線程環境下CPU寄存器的各種狀態值和內…

免布線視頻樁如何重塑停車管理模式

傳統停車管理常因布線復雜、維護成本高而難以推廣&#xff0c;而“免布線視頻樁”通過無線設計、低功耗與高精度檢測&#xff0c;為城市停車提供高效解決方案。作為智慧城市建設的創新工具&#xff0c;免布線視頻樁以即裝即用、長效續航等特性&#xff0c;正在重塑停車管理模式…

【CTFer成長之路】舉足輕重的信息搜集

舉足輕重的信息搜集 信息搜集 常見的搜集 題目描述: 一共3部分flag docker-compose.yml version: 3.2services:web:image: registry.cn-hangzhou.aliyuncs.com/n1book/web-information-backk:latestports:- 80:80啟動方式 docker-compose up -d 題目Flag n1book{info_…