web集群學習:nginx+keepalived實現負載均衡高可用性

目錄

項目架構

一,環境介紹

二,項目部署

在Web服務器上配置Web測試頁面

nginx負載均衡配置

配置Nginx_Master

通過vrrp_script實現對集群資源的監控(1>通過killall命令探測服務運行狀態)

通過vrrp_script實現對集群資源的監控(2、開發檢測nginx存活的shell腳本)

三,項目測試

四,實現不搶占模式


項目架構

Nginx+Keepalived實現高可用

在?Keepalived?+ Nginx 高可用負載均衡架構中,keepalived 負責實現高可用。它是一個高性能的服務器高可用或者熱備解決方案,Keepalived主要來防止服務器單點故障的發生問題,可以通過其與Nginx的配合實現Web服務器端的高可用。使用keepalived可以保證nginx的高可用,他能監控nginx的健康狀態,當nginx出現宕機時自動主備切換。

一,環境介紹

服務器名稱IP用途
Nginx_Master172.16.90.111提供負載均衡
Nginx_Backup172.16.90.112提供負載均衡
LVS-DR-VIP172.16.90.200網站的VIP地址
Web1服務器172.16.90.113提供Web服務
Web2服務器172.16.90.114提供Web服務

二,項目部署

在Web服務器上配置Web測試頁面

web01配置:

cd /usr/share/nginx/html/
echo "web test page,`hostname -I`." > index.html 
systemctl restart nginx

web02配置同上

nginx負載均衡配置

兩臺nginx做同樣配置

1、安裝nginx

yum install http://nginx.org/packages/rhel/7/x86_64/RPMS/nginx-1.10.0-1.el7.ngx.x86_64.rpm

?2、配置nginx反向代理

[root@nginx_master ~]# cd /etc/nginx/conf.d/
[root@nginx_master conf.d]# mv default.conf{,.bak}
[root@nginx_master conf.d]# vim web.confupstream webpools {server 172.16.90.113;server 172.16.90.114;
}server {location / {proxy_pass http://webpools;index index.html;}
}

3,重啟nginx服務,并測試訪問nginx

nginx -t
systemctl restart nginx

客戶端訪問測試負載均衡:

for ((i=1;i<=10;i++)); do curl 172.16.90.111; done

配置Nginx_Master

安裝keepalived

yum install keepalived -y

通過vrrp_script實現對集群資源的監控(1>通過killall命令探測服務運行狀態)

配置keepalived

vim /etc/keepalived/keepalived.confvrrp_script chk_nginx {script "killall -0 nginx"#script "</dev/tcp/127.0.0.1/80"#script "if [ -f /var/run/httpd/httpd.pid ];then exit 0;else exit 1;fi"#script "/etc/keepalived/check_nginx.sh"interval 2fall 2rise 1}vrrp_instance VI_1 {state MASTERinterface ens32 //填你對應的網卡名稱virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}notify_master "/etc/keepalived/master.sh"notify_backup "/etc/keepalived/backup.sh"notify_fault "/etc/keepalived/fault.sh"track_script{chk_nginx}virtual_ipaddress {172.16.90.200/24 dev ens32}}

相關參數說明:

notify的用法:

notify_master:當當前節點成為master時,通知腳本執行任務(一般用于啟動某服務,比如 nginx,haproxy等)

notify_backup:當當前節點成為backup時,通知腳本執行任務(一般用于關閉某服務,比如nginx,haproxy等)

notify_fault:當當前節點出現故障,執行的任務;

根據提供的路徑腳本路徑,編寫提供日志記錄的腳本:

vim /etc/keepalived/master.sh
#!/bin/bash
LOGFILE=/etc/keepalived/nginx_state.log
echo "[master]" >> $LOGFILE
date >> $LOGFILEvim /etc/keepalived/backup.sh
#!/bin/bash
LOGFILE=/etc/keepalived/nginx_state.sh
echo "[backup]" >> $LOGFILE
date >> $LOGFILEvim /etc/keepalived/fault.sh
#!/bin/bash
LOGFILE=/etc/keepalived/nginx_state.log
echo "[dault]" >> $LOGFILE
date >> $LOGFILE

給文件賦予執行權限

chmod +x /etc/keepalived/*.sh

Nginx_Backup配置同上

通過vrrp_script實現對集群資源的監控(2、開發檢測nginx存活的shell腳本)

vim /etc/keepalived/check_nginx.sh#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];thensystemctl start nginxsleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ]
thensystemctl stop keepalivedfi
fi

給文件賦予執行權限

chmod +x /etc/keepalived/*.sh

配置keepalived

vim /etc/keepalived/keepalived.confvrrp_script chk_nginx {#script "killall -0 nginx"#script "</dev/tcp/127.0.0.1/80"#script "if [ -f /var/run/httpd/httpd.pid ];then exit 0;else exit 1;fi"script "/etc/keepalived/check_nginx.sh"interval 2fall 2rise 1}vrrp_instance VI_1 {state MASTERinterface ens32 //填你對應的網卡名稱virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}notify_master "/etc/keepalived/master.sh"notify_backup "/etc/keepalived/backup.sh"notify_fault "/etc/keepalived/fault.sh"track_script{chk_nginx}virtual_ipaddress {172.16.90.200/24 dev ens32}}

Nginx_Backup配置同上

三,項目測試

重啟主從調度的nginx和keepalived

[root@nginx_master ~]# systemctl restart nginx keepalived
[root@nginx_backup ~]# systemctl restart nginx keepalived

Master,Backup都正常,只有Master對外提供服務

[root@nginx_master ~]# ip a | grep "172.16.90.200"
inet 172.16.90.200/24 scope global ens32

Master宕機,Backup接替Master對外提供服務

模擬Master的keepalived服務器停止
[root@nginx_master ~]# systemctl stop keepalived.service
此時VIP在Backup上
[root@nginx_backup ~]# ip a | grep "172.16.90.200"
inet 172.16.90.200/24 scope global ens32

在客戶機上驗證是否Backup接管后還能實現負載均衡

for ((i=1;i<=10;i++)); do curl 172.16.90.200; done

Master恢復正常,Master繼續提供服務,Backup停止服務

模擬Master的keepalived服務恢復正常
[root@nginx_master ~]# systemctl start keepalived.service
此時VIP在Master上
[root@nginx_master ~]# ip a | grep "172.16.90.200"
inet 172.16.90.200/24 scope global ens32

四,實現不搶占模式

上述主節點一宕機,備節點就會接管,主節點修復好了,又會重新接管服務。服務的切換存在一定的風險和不穩定性,為了避免生產中多次網絡抖動,要實現不搶占模式

nopreempt 設置的是高可用集群中的不搶占功能:設置 nopreempt可以實現主節點故障恢復后不再切回到主節點,讓服務一直在備用節點下工作, 直到備用節點出現故障才會進行切換。在使用不搶占功能時,在“state” 狀態為 “BACKUP” 的節點上設置,而且這個節點的優先級必須高于其他節點

Nginx_Master上

vim /etc/keepalived/keepalived.confvrrp_script chk_nginx {#script "killall -0 nginx"#script "</dev/tcp/127.0.0.1/80"#script "if [ -f /var/run/httpd/httpd.pid ];then exit 0;else exit 1;fi"script "/etc/keepalived/check_nginx.sh"interval 2fall 2rise 1}vrrp_instance VI_1 {state BACKUP   //原來的MASTER改為BACKUPinterface ens32 //填你對應的網卡名稱virtual_router_id 51priority 100nopreept    //添加這行advert_int 1authentication {auth_type PASSauth_pass 1111}notify_master "/etc/keepalived/master.sh"notify_backup "/etc/keepalived/backup.sh"notify_fault "/etc/keepalived/fault.sh"track_script{chk_nginx}virtual_ipaddress {172.16.90.200/24 dev ens32}}

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

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

相關文章

div輸入框的文字超過指定行數用省略號表示css

實現效果&#xff1a;超過四行用省略號表示 實現方法&#xff1a; .text{overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 4; // 自定義行數-webkit-box-orient: vertical; }

Go和Java實現外觀模式

Go和Java實現外觀模式 下面我們通過一個構造各種形狀的案例來說明外觀模式的使用。 1、外觀模式 外觀模式隱藏系統的復雜性&#xff0c;并向客戶端提供了一個客戶端可以訪問系統的接口。這種類型的設計模式屬于結構型 模式&#xff0c;它向現有的系統添加一個接口&#xff…

【設計模式】代理模式

在代理模式&#xff08;Proxy Pattern&#xff09;中&#xff0c;一個類代表另一個類的功能。這種類型的設計模式屬于結構型模式。 在代理模式中&#xff0c;我們創建具有現有對象的對象&#xff0c;以便向外界提供功能接口。 介紹 意圖&#xff1a;為其他對象提供一種代理以…

【面試問題】事務中執行了異步任務分發數據,由于事務未提交,導致異步任務無法執行

文章目錄 問題描述&#xff1a;解決辦法&#xff1a; 問題描述&#xff1a; OverrideTransactional(rollbackFor Exception.class)public ServiceResponse ctsqCallbackProcess(OaFlowRecord params) {// 查詢任務單數據// 更新任務單信息// 異步分發數據到CRMS系統}客戶數據分…

TX Text Control .NET Server for ASP.NET Crack

TX Text Control .NET Server for ASP.NET Crack TX Text Control.NET Server for ASP.NET是用于Web應用程序或服務的服務器端組件。它是一個完全可編程的ASP.NET文字處理引擎&#xff0c;提供了廣泛的文字處理功能。使用TX Text Control.NET Server&#xff0c;程序員可以開發…

react組件化開發詳解

React是一個流行的JavaScript庫&#xff0c;用于構建用戶界面&#xff0c;并且以組件化的方式進行開發。下面將詳解React組件化開發的概念和步驟&#xff1a; 組件化思維&#xff1a; 組件化開發是將復雜的用戶界面劃分為獨立、可重用的小部件&#xff08;組件&#xff09;。…

【833. 字符串中的查找與替換】

來源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 你會得到一個字符串 s (索引從 0 開始)&#xff0c;你必須對它執行 k 個替換操作。替換操作以三個長度均為 k 的并行數組給出&#xff1a;indices, sources, targets。 要完成第 i 個替換操作: 檢查…

Spring事務傳播機制

hi ,大家好,繼續為大家帶來Spring事務傳播機制的相關知識 文章目錄 &#x1f917;1.事務傳播機制是什么&#x1f917;2.事務傳播機制作用&#x1f917;3.事務傳播機制 &#x1f917;1.事務傳播機制是什么 定義了多個包含了事務的?法&#xff0c;相互調?時&#xff0c;事務是…

C++教程 - How to C++系列專欄第3篇

關于專欄 這個專欄是優質的C教程專欄&#xff0c;如果你還沒看過第0篇&#xff0c;點擊C教程 - How to C系列專欄第0篇去第0篇 本專欄一致使用操作系統&#xff1a;macOS Ventura&#xff0c;代碼編輯器&#xff1a;CLion&#xff0c;C編譯器&#xff1a;Clang 感謝一路相伴…

[C++ 網絡協議編程] UDP協議

目錄 1. UDP和TCP的區別 2. UDP的工作原理 3. UDP存在數據邊界 4. UDP的I/O函數 4.1 sendto函數 4.2 recvfrom函數 4. 已連接(connected)UDP套接字和未連接(unconnected)UDP套接字 5. UDP的通信流程 5.1 服務器端通信流程 5.2 客戶端通信流程 1. UDP和TCP的區別 主要…

從安全角度分析Angular本地存儲

隨著Web應用程序的不斷增長&#xff0c;前端開發人員慢慢意識到使用瀏覽器提供的本地存儲技術可以在不使用外部數據庫的情況下方便地保存應用程序的數據。Angular作為目前最流行的前端框架之一&#xff0c;也在其API中提供了許多本地存儲技術的支持。但是&#xff0c;在使用本地…

Electron教程_編程入門自學教程_菜鳥教程-免費教程分享

教程簡介 Electron是一個是使用JavaScript&#xff0c;HTML和CSS構建跨平臺的桌面應用程序框架。 Electron 通過將 Chromium 和 Node.js 合并到同一個運行時環境中&#xff0c;并將其打包為 Mac&#xff0c;Windows 和 Linux 系統下的應用來實現這一目的。 Electron入門教程 …

【深度學習】日常筆記16

可以將pd.DataFrame數據結構理解為類似于Excel中的表格。pd.DataFrame是pandas庫提供的一個二維數據結構&#xff0c;用于存儲和操作具有行和列的數據。它類似于Excel中的工作表&#xff0c;其中每一列可以是不同的數據類型&#xff08;例如整數、浮點數、字符串等&#xff09;…

關于安卓打包生成aar,jar實現(一)

關于安卓打包生成aar&#xff0c;jar方式 背景 在開發的過程中&#xff0c;主項目引入三方功能的方式有很多&#xff0c;主要是以下幾個方面&#xff1a; &#xff08;1&#xff09;直接引入源代碼module&#xff08;優點&#xff1a;方便修改源碼&#xff0c;易于維護&#…

Spring_AOP

一、AOP簡介 AOP&#xff0c;Aspect Oriented Programming,面向切面編程,是對面向對象編程0OP的升華。OOP是縱向對一個事物的抽象&#xff0c;一個對象包括靜態的屬性信息&#xff0c;包括動態的方法信息等。而AOP是橫向的對不同事物的抽象,屬性與屬性、方法與方法、對象與對象…

算法訓練營題目day17

110. 平衡二叉樹 給定一個二叉樹&#xff0c;判斷它是否是高度平衡的二叉樹。 本題中&#xff0c;一棵高度平衡二叉樹定義為&#xff1a; 一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1 。 func isBalanced(root *TreeNode) bool {h:getHeight(root)if h -1{r…

Vue 安裝開發者工具

1.下載開發者工具&#xff0c;下載地址&#xff1a;http://book.wiyp.top/App/Vue3開發者工具-谷歌/Vue3.crx 2.打開谷歌瀏覽器&#xff0c;點擊擴展&#xff0c;點擊管理擴展程序。 3.開啟開發者模式&#xff0c;將 Vue3 開發者工具文件拖拽到瀏覽器中進行安裝。 注&#xff…

chatGPT小白快速入門培訓課程-001

一、前言 本文是《chatGPT小白快速入門培訓課程》的第001篇文章&#xff0c;全部內容采用chatGPT和chatGPT開源平替軟件生成。完整內容大綱詳見&#xff1a;《chatGPT小白快速入門課程大綱》。 本系列文章&#xff0c;參與&#xff1a; AIGC征文活動 #AIGC技術創作內容征文# …

使用pymupdf實現PDF內容搜索并顯示功能

簡介&#xff1a; 在日常工作和學習中&#xff0c;我們可能需要查找和提取PDF文件中的特定內容。本文將介紹如何使用Python編程語言和wxPython圖形用戶界面庫來實現一個簡單的PDF內容搜索工具。我們將使用PyMuPDF模塊來處理PDF文件&#xff0c;并結合wxPython構建一個用戶友好的…

動態HTTP代理與競爭情報收集的關聯

Hey&#xff0c;各位爬友們&#xff01;作為一名專業的爬蟲HTTP代理提供者&#xff0c;今天我要和大家聊一聊動態HTTP代理與競爭情報收集之間的關聯。在這篇文章中&#xff0c;我將向大家解釋怎么使用動態HTTP代理完成在競爭中的情報收集&#xff0c;并分享一些實用的技巧。 首…