keepalived應用

Keepalived 是一個基于 VRRP(虛擬路由冗余協議)實現的高可用解決方案,常用于構建高可用性的服務器集群,特別是在負載均衡場景中,可確保服務的不間斷運行。以下為你詳細介紹它:

0主要功能

  • 高可用性:借助 VRRP 協議,Keepalived 能在多臺服務器間自動切換,當主服務器出現故障時,備用服務器可迅速接替工作,保障服務的持續可用。
  • 負載均衡:Keepalived 可與 LVS(Linux 虛擬服務器)集成,實現對多臺服務器的負載均衡,依據預設的算法將客戶端請求分發到不同的服務器上。
  • 健康檢查:它能對服務器的健康狀況進行檢查,實時監測服務器的服務狀態,一旦發現服務器異常,就會將其從服務列表中移除,待恢復正常后再添加回來。

Keepalived 的工作原理主要基于 VRRP 協議。VRRP 將多臺路由器(或服務器)組成一個虛擬路由器,這個虛擬路由器有一個唯一的虛擬 IP 地址(VIP)。在這個虛擬路由器中,有一個主路由器(Master)和多個備用路由器(Backup)。

  • 主路由器:承擔處理客戶端請求的任務,同時定期發送 VRRP 通告給備用路由器,告知它們自己的存活狀態。
  • 備用路由器:處于監聽狀態,接收主路由器發送的 VRRP 通告。若在一定時間內未收到通告,備用路由器會認為主路由器出現故障,然后通過選舉機制選出新的主路由器,并接管虛擬 IP 地址,繼續提供服務。

1環境準備

IP地址主機名軟件節點
192.168.72.30masterkeepalived, nginx主節點
192.168.72.32backupkeepalived, nginx從節點
192.168.72.100Vip地址

1.1前期準備

1.1.1修改IP

#master

[root@master ~]# nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.33.30/24 ipv4.gateway 192.168.33.30 ipv4.dns 223.5.5.5 connection.autoconnect yes
[root@master ~]# nmcli c up ens160
?

#backup

[root@master ~]# nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.33.30/24 ipv4.gateway 192.168.33.30 ipv4.dns 223.5.5.5 connection.autoconnect yes
[root@master ~]# nmcli c up ens160

1.1.2關閉防火墻

[root@master ~]# systemctl stop firewalld

[root@backup ~]# systemctl stop firewalld

1.1.3安裝nginx服務

#master

[root@master ~]# systemctl stop firewalld
[root@master ~]# mount /dev/sr0 /mnt
mount: /mnt: WARNING: source write-protected, mounted read-only.
[root@master ~]# dnf install nginx -y
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register.

BaseOS ? ? ? ? ? 757 kB/s | 2.7 kB ? ? 00:00 ? ?
AppStream ? ? ? ?1.3 MB/s | 3.2 kB ? ? 00:00 ? ?
baseos ? ? ? ? ? 2.7 MB/s | 2.7 kB ? ? 00:00 ? ?
appstream ? ? ? ?3.1 MB/s | 3.2 kB ? ? 00:00 ? ?
Dependencies resolved.
=================================================
?Package ?Arch ? Version ? ? ? ? Repo ? ? ? Size
=================================================
Installing:
?nginx ? ?x86_64 2:1.20.1-20.el9 AppStream ?40 k
Installing dependencies:
?nginx-core
? ? ? ? ? x86_64 2:1.20.1-20.el9 AppStream 574 k

Transaction Summary
=================================================
Install ?2 Packages

Total size: 614 k
Installed size: 1.7 M
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
? Preparing ? ? ? ?: ? ? ? ? ? ? ? ? ? ? ? ? 1/1?
? Installing ? ? ? : nginx-core-2:1.20.1-2 ? 1/2?
? Installing ? ? ? : nginx-2:1.20.1-20.el9 ? 2/2?
? Running scriptlet: nginx-2:1.20.1-20.el9 ? 2/2?
? Verifying ? ? ? ?: nginx-2:1.20.1-20.el9 ? 1/2?
? Verifying ? ? ? ?: nginx-core-2:1.20.1-2 ? 2/2?
Installed products updated.

Installed:
? nginx-2:1.20.1-20.el9.x86_64 ? ? ? ? ? ? ? ? ??
? nginx-core-2:1.20.1-20.el9.x86_64 ? ? ? ? ? ? ?

Complete!


?

#backup

[root@backup ~]# mount /dev/sr0 /mnt
mount: /mnt: WARNING: source write-protected, mounted read-only.
[root@backup ~]# dnf install nginx -y
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register.

BaseOS ? ? ? 1.4 MB/s | 2.7 kB ? ? 00:00 ? ?
AppStream ? ?1.4 MB/s | 3.2 kB ? ? 00:00 ? ?
baseos ? ? ? 2.7 MB/s | 2.7 kB ? ? 00:00 ? ?
appstream ? ?3.1 MB/s | 3.2 kB ? ? 00:00 ? ?
Dependencies resolved.
=============================================
?Package
? ? ? Arch ? Version ? ? ? ? Repo ? ? ? Size
=============================================
Installing:
?nginx
? ? ? x86_64 2:1.20.1-20.el9 AppStream ?40 k
Installing dependencies:
?nginx-core
? ? ? x86_64 2:1.20.1-20.el9 AppStream 574 k

Transaction Summary
=============================================
Install ?2 Packages

Total size: 614 k
Installed size: 1.7 M
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
? Preparing ? ? ? ?: ? ? ? ? ? ? ? ? ? ? 1/1?
? Installing ? ? ? : nginx-core-2:1.20 ? 1/2?
? Installing ? ? ? : nginx-2:1.20.1-20 ? 2/2?
? Running scriptlet: nginx-2:1.20.1-20 ? 2/2?
? Verifying ? ? ? ?: nginx-2:1.20.1-20 ? 1/2?
? Verifying ? ? ? ?: nginx-core-2:1.20 ? 2/2?
Installed products updated.

Installed:
? nginx-2:1.20.1-20.el9.x86_64 ? ? ? ? ? ? ??
? nginx-core-2:1.20.1-20.el9.x86_64 ? ? ? ? ?

Complete!

#區分頁面

[root@master ~]# echo "hello master" > /usr/share/nginx/html/index.html?
[root@backup ~]# echo "hello backup" > /usr/share/nginx/html/index.html

#啟動服務

[root@master ~]# systemctl start nginx

[root@backup ~]# systemctl start nginx

#測試

[root@master ~]# curl 192.168.33.30
hello master
[root@backup ~]# curl 192.168.33.32
hello backup

2keepalived配置

2.1下載keepalived

#master

[root@master ~]# dnf install keepalived -y
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register.

Last metadata expiration check: 0:08:59 ago on Tue 18 Mar 2025 07:25:43 PM CST.
Dependencies resolved.
=================================================
?Package ? ?Arch ? Version ? ? ? Repo ? ? ? Size
=================================================
Installing:
?keepalived x86_64 2.2.8-3.el9 ? AppStream 564 k

Transaction Summary
=================================================
Install ?1 Package

Total size: 564 k
Installed size: 1.6 M
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
? Preparing ? ? ? ?: ? ? ? ? ? ? ? ? ? ? ? ? 1/1?
? Installing ? ? ? : keepalived-2.2.8-3.el ? 1/1?
? Running scriptlet: keepalived-2.2.8-3.el ? 1/1?
? Verifying ? ? ? ?: keepalived-2.2.8-3.el ? 1/1?
Installed products updated.

Installed:
? keepalived-2.2.8-3.el9.x86_64 ? ? ? ? ? ? ? ? ?

Complete!

#backup

[root@backup ~]# dnf install keepalived -y
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register.

Last metadata expiration check: 0:08:59 ago on Tue 18 Mar 2025 07:25:43 PM CST.
Dependencies resolved.
=============================================
?Package ?Arch ? Version ? ? Repo ? ? ? Size
=============================================
Installing:
?keepalived
? ? ? ? ? x86_64 2.2.8-3.el9 AppStream 564 k

Transaction Summary
=============================================
Install ?1 Package

Total size: 564 k
Installed size: 1.6 M
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
? Preparing ? ? ? ?: ? ? ? ? ? ? ? ? ? ? 1/1?
? Installing ? ? ? : keepalived-2.2.8- ? 1/1?
? Running scriptlet: keepalived-2.2.8- ? 1/1?
? Verifying ? ? ? ?: keepalived-2.2.8- ? 1/1?
Installed products updated.

Installed:
? keepalived-2.2.8-3.el9.x86_64 ? ? ? ? ? ? ?

Complete!

2.2配置keepalived

#備份配置文件

[root@master ~]# rpm -qc keepalived?
/etc/keepalived/keepalived.conf
/etc/sysconfig/keepalived
[root@master ~]# cp /etc/keepalived//keepalived.conf{,.bak}
?

[root@backup?~]# rpm -qc keepalived?
/etc/keepalived/keepalived.conf
/etc/sysconfig/keepalived
[root@backup ~]# cp /etc/keepalived//keepalived.conf{,.bak}

#master

[root@master ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
? ?router_id master
}

vrrp_instance VI_1 {
? ? state MASTER
? ? interface ens160
? ? virtual_router_id 51
? ? priority 100
? ? advert_int 1
? ? authentication {
? ? ? ? auth_type PASS
? ? ? ? auth_pass 1111
? ? }
? ? virtual_ipaddress {?
? ? ? ? 192.168.33.100
? ? }
}


#backup

[root@backup ~]# vim /etc/keepalived/keepalived.conf
[root@backup ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
? ?router_id master
}

vrrp_instance VI_1 {
? ? state MASTER
? ? interface ens160
? ? virtual_router_id 51
? ? priority 90
? ? advert_int 1
? ? authentication {
? ? ? ? auth_type PASS
? ? ? ? auth_pass 1111
? ? }
? ? virtual_ipaddress {
? ? ? ? 192.168.33.100
? ? }
}

#啟動keepalived服務

[root@master ~]# systemctl start keepalived
[root@backup ~]# systemctl start keepalived

#IP查看

[root@master ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
? ? link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
? ? inet 127.0.0.1/8 scope host lo
? ? ? ?valid_lft forever preferred_lft forever
? ? inet6 ::1/128 scope host?
? ? ? ?valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
? ? link/ether 00:0c:29:7b:ad:14 brd ff:ff:ff:ff:ff:ff
? ? altname enp3s0
? ? inet 192.168.33.30/24 brd 192.168.33.255 scope global noprefixroute ens160
? ? ? ?valid_lft forever preferred_lft forever
? ? inet 192.168.33.100/32 scope global ens160
? ? ? ?valid_lft forever preferred_lft forever
? ? inet6 fe80::20c:29ff:fe7b:ad14/64 scope link noprefixroute?
? ? ? ?valid_lft forever preferred_lft forever


[root@backup ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
? ? link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
? ? inet 127.0.0.1/8 scope host lo
? ? ? ?valid_lft forever preferred_lft forever
? ? inet6 ::1/128 scope host?
? ? ? ?valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
? ? link/ether 00:0c:29:0f:fe:20 brd ff:ff:ff:ff:ff:ff
? ? altname enp3s0
? ? inet 192.168.33.32/24 brd 192.168.33.255 scope global noprefixroute ens160
? ? ? ?valid_lft forever preferred_lft forever
? ? inet6 fe80::20c:29ff:fe0f:fe20/64 scope link noprefixroute?
? ? ? ?valid_lft forever preferred_lft forever
#

#暫停服務,虛擬ip消失

[root@master ~]# ?systemctl stop keepalived.service?
[root@master ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
? ? link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
? ? inet 127.0.0.1/8 scope host lo
? ? ? ?valid_lft forever preferred_lft forever
? ? inet6 ::1/128 scope host?
? ? ? ?valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
? ? link/ether 00:0c:29:7b:ad:14 brd ff:ff:ff:ff:ff:ff
? ? altname enp3s0
? ? inet 192.168.33.30/24 brd 192.168.33.255 scope global noprefixroute ens160
? ? ? ?valid_lft forever preferred_lft forever
? ? inet6 fe80::20c:29ff:fe7b:ad14/64 scope link noprefixroute?
? ? ? ?valid_lft forever preferred_lft forever

[root@backup ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
? ? link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
? ? inet 127.0.0.1/8 scope host lo
? ? ? ?valid_lft forever preferred_lft forever
? ? inet6 ::1/128 scope host?
? ? ? ?valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
? ? link/ether 00:0c:29:0f:fe:20 brd ff:ff:ff:ff:ff:ff
? ? altname enp3s0
? ? inet 192.168.33.32/24 brd 192.168.33.255 scope global noprefixroute ens160
? ? ? ?valid_lft forever preferred_lft forever
? ? inet6 fe80::20c:29ff:fe0f:fe20/64 scope link noprefixroute?
? ? ? ?valid_lft forever preferred_lft forever

實驗完成!!!

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

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

相關文章

5.0 VisionPro調用USB相機的方法與步驟說明(一)

本文介紹如何在C#中調用visionPro以處理USB相機采集到的圖片。示例如下: 主要思路如下: 1. 使用AForge來打開以及采集usb相機照片。 usb相機處于一直運行狀態。每隔100ms采集一次照片。且觸發一次事件。 public void Start() { this.videoSourcePlayer.Stop(); …

論文閱讀:Deep Hybrid Camera Deblurring for Smartphone Cameras

今天介紹一篇 ACM SIGGRAPH 2024 的文章&#xff0c;關于手機影像中的去模糊的文章。 Deep Hybrid Camera Deblurring for Smartphone Cameras Abstract 手機攝像頭盡管取得了顯著的進步&#xff0c;但由于傳感器和鏡頭較為緊湊&#xff0c;在低光環境下的成像仍存在困難&am…

Linux中的基本指令(下)

目錄 mv指令 more指令 less指令 head指令 tail 指令 繼續理解文件 重定向和追加重定向操作 理解管道 find指令 whereis 指令 bc指令 uname ?r指令 grep 指令 關機 擴展命令 zip/unzip 指令 tar指令 關于rzsz 系統間的文件互傳 接上&#xff01; mv指令 m…

Unity大型游戲開發全流程指南

一、開發流程與核心步驟 1. 項目規劃與設計階段 需求分析 明確游戲類型&#xff08;MMORPG/開放世界/競技等&#xff09;、核心玩法&#xff08;戰斗/建造/社交&#xff09;、目標平臺&#xff08;PC/移動/主機&#xff09;示例&#xff1a;MMORPG需規劃角色成長樹、副本Boss…

Unity WebGL IIS報錯無法使用

Unity WebGL IIS報錯無法使用 原因1&#xff1a;WebGL文件夾無訪問權限 右鍵WebGL文件夾-屬性 點擊安全-編輯-添加 輸入ever點擊確定-應用即可

【JDK17】開源應用服務器大比對

接著 next-public 源代碼分析&#xff0c;Java 應用服務器選用 jetty。但是之前普遍使用 Tomcat&#xff0c;那為什么要用 jetty 么&#xff0c;除了這兩個&#xff0c;Java 應用服務器開源現狀并不了解&#xff0c;故而又是一篇科普性的筆記&#xff0c;以下是 又小又快的 Jav…

docker-compose install nginx(解決fastgpt跨區域)

CORS前言 CORS(Cross-Origin Resource Sharing,跨源資源共享)是一種安全措施,它允許或拒絕來自不同源(協議、域名、端口任一不同即為不同源)的網頁訪問另一源中的資源。它的主要作用如下: 同源策略限制:Web 瀏覽器的同源策略限制了從一個源加載的文檔或腳本如何與另一…

算法刷題記錄——LeetCode篇(4) [第301~400題](持續更新)

(優先整理熱門100及面試150&#xff0c;不定期持續更新&#xff0c;歡迎關注) 322. 零錢兌換 給你一個整數數組 coins &#xff0c;表示不同面額的硬幣&#xff1b;以及一個整數 amount &#xff0c;表示總金額。 計算并返回可以湊成總金額所需的最少的硬幣個數。如果沒有任何…

vulnhub靶場之loly靶機

前言 挑戰攻克該靶機30分鐘 靶機&#xff1a;loly靶機&#xff0c;IP地址為192.168.10.11 攻擊&#xff1a;kali&#xff0c;IP地址為192.168.10.6 靶機和攻擊機都采用VMware虛擬機&#xff0c;都采用橋接網卡模式 文章涉及的靶機及工具&#xff0c;都可以自行訪問官網或者項…

Deepseek API+Python測試用例一鍵生成與導出-V1.0.2【實現需求文檔圖片識別與用例生成自動化】

在測試工作中&#xff0c;需求文檔中的圖片&#xff08;如界面設計圖、流程圖&#xff09;往往是測試用例生成的重要參考。然而&#xff0c;手動提取圖片并識別內容不僅耗時&#xff0c;還容易出錯。本文將通過一個自研小工具&#xff0c;結合 PaddleOCR 和大模型&#xff0c;自…

Excel(函數篇):COUNTIF與CONUTIFS函數、SUMIF與SUMIFS函數、ROUND函數、MATCH與INDEX函數、混合引用與條件格式

目錄 COUNTIF和COUNTIFS函數COUNTIF函數COUNTIFS函數SUMIF和SUMIFS函數SUMIF函數SUMIFS函數SUMIFS函數與控件實現動態年月匯總ROUND、ROUNDUP、ROUNDDOWN函數單元格混合引用條件格式與公式,標記整行數據MATCH和INDEX函數COUNTIF和COUNTIFS函數 COUNTIF函數 統計下“蘇州”出現…

上位機數據可視化:使用QtCharts繪制波形圖

工程配置 CMake文件 find_package(Qt5 COMPONENTS Charts REQUIRED)target_link_libraries(zhd-desktop PRIVATE Qt5::Charts)包含頭文件以及名稱空間&#xff08;這個很重要&#xff0c;沒有包含名稱空間編譯器會提示找不到相關的類型&#xff09; #include <QtCharts&g…

S32K144入門筆記(十三):LPIT的API函數解讀

目錄 1. SDK中的函數 2. API函數的釋義 2.1 獲取默認參數 2.2 初始化 2.3 啟動與停止 2.4 計數值的設置于讀取 2.5 中斷API 1. SDK中的函數 在使用SDK的非抽象驅動函數時&#xff0c;函數的定義與聲明在文件lpit_driver.c和lpit_driver.h中&#xff0c;一共有19個函數&a…

CSS - Pseudo-classes(偽類選擇器)

目錄 一、介紹二、常用種類三、案例實現案例一&#xff1a;a標簽使用link/visited/hover/active案例二&#xff1a;表單元素使用focus/disabled案例三、通過其余偽類實現元素靈活選中 一、介紹 CSS 偽類&#xff08;Pseudo-classes&#xff09; 用于定義元素的特定狀態或結構位…

http proxy的原理是什么

Http代理的原理 代理服務器會自動提取請求數據包中的HTTP請求數據發送給服務端&#xff0c;并將服務端的HTTP響應數據轉發給發送請求的客戶端&#xff0c;HTTP代理服務器使用的端口通常是8080。 對于Web客戶端來說&#xff0c;代理扮演的服務器角色&#xff0c;接收請求&…

Ubuntu22.04虛擬機里安裝Yolov8流程

1. 安裝pytorch sudo apt install nvidia-cuda-toolkit nvcc --version # 官方適配地址&#xff1a;https://download.pytorch.org/whl/torch/import torch print(torch.__version__) print(torch.cuda.is_available())2. 安裝環境 # cuDNN 安裝&#xff1a;https://develop…

神經網絡微調技術解析

神經網絡微調技術 微調&#xff08;Fine-tuning&#xff09;是遷移學習的核心技術&#xff0c;通過在預訓練模型基礎上調整參數&#xff0c;使其適應特定任務或領域。以下從傳統方法、參數高效微調&#xff08;PEFT&#xff09;、新興技術三個維度展開&#xff0c;覆蓋主流技術…

Spring 聲明式事務管理

Spring 編程的方式實現事務管理&#xff0c;這樣太過麻煩&#xff0c;需要在每個方法上面加上相應的事務處理操作&#xff0c;聲明式事務處理能夠很好的解決這個問題&#xff0c;比如通過tx命名空間&#xff0c;這樣只需要配置就可以檢測到相關的方法&#xff0c;或者是通過tra…

電機控制常見面試問題(十五)

文章目錄 一、電機氣隙二、電氣時間三.電機三環控制詳解四.驅動板跳線意義五.電機開環自檢 一、電機氣隙 電機氣隙是定子和轉子之間的空隙&#xff0c;防止釘子轉子運轉時物理接觸&#xff0c;此外&#xff0c;氣隙是磁路的重要環節&#xff0c;磁場需通過氣隙傳遞能量&#x…

代碼隨想錄算法訓練營第六十五天| 圖論10

Bellman_ford 隊列優化算法&#xff08;又名SPFA&#xff09; 代碼隨想錄 import collectionsdef main():n, m map(int, input().strip().split())edges [[] for _ in range(n 1)]for _ in range(m):src, dest, weight map(int, input().strip().split())edges[src].append…