Redis哨兵模式(Sentinel)高可用方案介紹與配置實踐

Redis Sentinel 是 Redis 官方提供的高可用性(HA)解決方案,用于管理 Redis 主從架構中的故障檢測和故障轉移。通過 Redis Sentinel,可以實現 Redis 主從集群的自動故障恢復,確保服務的高可用性。本文將詳細介紹Redis Sentinel的原理、配置方法以及實踐步驟。

1 Redis Sentinel簡介

1.1 什么是Redis Sentinel

Redis Sentinel是一個分布式系統,用于監控Redis主從節點的健康狀態,并在主節點發生故障時自動將從節點提升為新的主節點。它還可以通知客戶端主從節點的變化。

1.2 Redis Sentinel的核心功能

  • 監控:持續監控主從節點的健康狀態
  • 通知:當 Redis 實例出現故障時,通知管理員或其他應用程序
  • 自動故障轉移:當主節點故障時,自動將從節點提升為新的主節點
  • 配置提供者:為客戶端提供最新的主節點地址

1.3 Redis Sentinel的優勢

  • 高可用性:自動故障轉移,減少人工干預
  • 無縫切換:客戶端可以自動感知主從節點的變化
  • 易于擴展:支持多個Sentinel節點,避免單點故障

2 Redis Sentinel工作原理

1. Sentinel節點
  • Sentinel是一個獨立的進程,可以部署在多個服務器上,每個Sentinel節點會監控Redis主從節點的狀態
2. 故障檢測
  • Sentinel 會定期向 Redis 主從節點發送ping命令,檢測其是否正常運行
  • 如果主節點在指定時間內未響應,Sentinel會將其標記為“主觀下線”
  • 多個Sentinel節點會通過投票機制確認主節點是否“客觀下線”
3. 故障轉移
  • 當主節點被確認為“客觀下線”后,Sentinel會選舉一個從節點作為新的主節點
  • Sentinel會向其他從節點發送peplicaof命令,使其復制新的主節點
  • Sentinel會更新客戶端的配置,使其連接到新的主節點
4. 客戶端連接
  • 客戶端通過 Sentinel 獲取當前的主節點地址,并在主從切換后自動更新連接

3 Redis Sentinel配置與實踐

3.1 環境裝備

主機IP

角色

端口

說明

192.168.10.32

Redis Master + Sentinel

6379/26379

主節點及哨兵節點1

192.168.10.31

Redis Slave + Sentinel

6379/26379

從節點及哨兵節點2

192.168.10.30

Redis Slave + Sentinel

6379/26379

從節點及哨兵節點3

3.2 Redis主從復制配置

3.2.1 主節點配置

vim /usr/local/redis/redis.conf
# 編輯/usr/local/redis/redis.conf文件,修改如下項的內容
bind 0.0.0.0
protected-mode no
requirepass lahmy1c@
daemonize yes
logfile /var/log/redis-server.log# 修改完如上內容后重啟服務
ps -ef |grep redis|grep -v grep |awk '{print $2}'|xargs kill -9 
/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf

3.2.2 從節點配置

vim /usr/local/redis/redis.conf
# 編輯/usr/local/redis/redis.conf文件,修改如下項的內容
bind 0.0.0.0
protected-mode no
requirepass lahmy1c@
replicaof 192.168.10.32 6379
masterauth lahmy1c@
daemonize yes
logfile /var/log/redis-server.log# 修改完如上內容后重啟服務
ps -ef |grep redis|grep -v grep |awk '{print $2}'|xargs kill -9 
/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf

3.2.3 查看主從復制狀態

# 主節點
[root@node3 redis]# /usr/local/redis/bin/redis-cli -a lahmy1c@ info replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.10.31,port=6379,state=online,offset=210,lag=0
slave1:ip=192.168.10.30,port=6379,state=online,offset=210,lag=1
master_failover_state:no-failover
master_replid:ca76bcd56c1d7aec579fc0976d630857da32b34c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:210
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:210
[root@node3 redis]# # 從節點
[root@node2 redis]# /usr/local/redis/bin/redis-cli -a lahmy1c@ info replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:slave
master_host:192.168.10.32
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_read_repl_offset:224
slave_repl_offset:224
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:ca76bcd56c1d7aec579fc0976d630857da32b34c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:224
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:224
[root@node2 redis]# [root@node1 redis]# /usr/local/redis/bin/redis-cli -a lahmy1c@ info replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:slave
master_host:192.168.10.32
master_port:6379
master_link_status:up
master_last_io_seconds_ago:8
master_sync_in_progress:0
slave_read_repl_offset:224
slave_repl_offset:224
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:ca76bcd56c1d7aec579fc0976d630857da32b34c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:224
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:224
[root@node1 redis]# 

3.3 Sentinel配置(所有節點)

3.3.1 編輯sentinel.conf文件

# 處理sentinel.conf配置文件
grep -v '^$\|#' /root/tool/redis-6.2.9/sentinel.conf > /usr/local/redis/sentinel.conf# 編輯/usr/local/redis/sentinel.conf,修改或者增加如下內容
port 26379
daemonize yes
pidfile /var/run/redis/redis-sentinel.pid
logfile /var/log/redis-sentinel.log
dir /tmp
sentinel monitor mymaster 192.168.10.32 6379 2
sentinel auth-pass mymaster lahmy1c@
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 15000
sentinel parallel-syncs mymaster 1
關鍵參數說明:
  • sentinel monitor:監控主節點(名稱、IP、端口、quorum數)
  • sentinel auth-pass:主節點認證密碼
  • sentinel down-after-milliseconds:判定節點不可達的超時時間(毫秒)
  • sentinel failover-timeout:故障轉移超時時間(毫秒)
  • sentinel parallel-syncs:故障轉移后并行同步的從節點數

3.3.2 啟動sentinel服務

# 在所有節點執行如下命令
/usr/local/redis/bin/redis-sentinel /usr/local/redis/sentinel.conf

?3.3.3 檢查sentinel狀態

 /usr/local/redis/bin/redis-cli -p 26379 info sentinel[root@node3 bin]# /usr/local/redis/bin/redis-cli -p 26379 info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.10.32:6379,slaves=2,sentinels=3
[root@node3 bin]#

3.3.4 查看主從狀態

# 查看主節點狀態
/usr/local/redis/bin/redis-cli -p 26379 sentinel master mymaster[root@node3 bin]#  /usr/local/redis/bin/redis-cli -p 26379 sentinel master mymaster1) "name"2) "mymaster"3) "ip"4) "192.168.10.32"5) "port"6) "6379"7) "runid"8) "2c673d7bcd9757ef165bce5aa7a835801318ccb9"9) "flags"
10) "master"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "180"
19) "last-ping-reply"
20) "181"
21) "down-after-milliseconds"
22) "5000"
23) "info-refresh"
24) "4149"
25) "role-reported"
26) "master"
27) "role-reported-time"
28) "546489"
29) "config-epoch"
30) "0"
31) "num-slaves"
32) "2"
33) "num-other-sentinels"
34) "2"
35) "quorum"
36) "2"
37) "failover-timeout"
38) "15000"
39) "parallel-syncs"
40) "1"
[root@node3 bin]# # 查看從節點狀態
/usr/local/redis/bin/redis-cli -p 26379 sentinel slaves mymaster[root@node2 redis]# /usr/local/redis/bin/redis-cli -p 26379 sentinel slaves mymaster
1)  1) "name"2) "192.168.10.30:6379"3) "ip"4) "192.168.10.30"5) "port"6) "6379"7) "runid"8) "e2204c7b72ceee7476f532226824bbeabcf0fd3d"9) "flags"10) "slave"11) "link-pending-commands"12) "0"13) "link-refcount"14) "1"15) "last-ping-sent"16) "0"17) "last-ok-ping-reply"18) "885"19) "last-ping-reply"20) "885"21) "down-after-milliseconds"22) "5000"23) "info-refresh"24) "6055"25) "role-reported"26) "slave"27) "role-reported-time"28) "668938"29) "master-link-down-time"30) "0"31) "master-link-status"32) "ok"33) "master-host"34) "192.168.10.32"35) "master-port"36) "6379"37) "slave-priority"38) "100"39) "slave-repl-offset"40) "137279"41) "replica-announced"42) "1"
2)  1) "name"2) "192.168.10.31:6379"3) "ip"4) "192.168.10.31"5) "port"6) "6379"7) "runid"8) "80996e2f4e6bfbcc2470431e05cb45bdd105ab36"9) "flags"10) "slave"11) "link-pending-commands"12) "0"13) "link-refcount"14) "1"15) "last-ping-sent"16) "0"17) "last-ok-ping-reply"18) "885"19) "last-ping-reply"20) "884"21) "down-after-milliseconds"22) "5000"23) "info-refresh"24) "6056"25) "role-reported"26) "slave"27) "role-reported-time"28) "668943"29) "master-link-down-time"30) "0"31) "master-link-status"32) "ok"33) "master-host"34) "192.168.10.32"35) "master-port"36) "6379"37) "slave-priority"38) "100"39) "slave-repl-offset"40) "137279"41) "replica-announced"42) "1"
[root@node2 redis]# 

4 模擬故障轉移

4.1 模擬主節故障

/usr/local/redis/bin/redis-cli -p 6379 -a lahmy1c@ shutdown

4.2 觀察Sentinel日志

# /var/log/redis-sentinel.log日志將記錄選舉新主節點的過程
54489:X 18 Mar 2025 15:22:23.593 # +sdown master mymaster 192.168.10.32 6379
54489:X 18 Mar 2025 15:22:23.733 # +new-epoch 1
54489:X 18 Mar 2025 15:22:23.740 # +vote-for-leader 255e219ef39458216f990a50b89de6b41e739ec4 1
54489:X 18 Mar 2025 15:22:24.675 # +odown master mymaster 192.168.10.32 6379 #quorum 3/2
54489:X 18 Mar 2025 15:22:24.676 # Next failover delay: I will not start a failover before Tue Mar 18 15:22:54 2025
54489:X 18 Mar 2025 15:22:24.814 # +config-update-from sentinel 255e219ef39458216f990a50b89de6b41e739ec4 192.168.10.32 26379 @ mymaster 192.168.10.32 6379
54489:X 18 Mar 2025 15:22:24.814 # +switch-master mymaster 192.168.10.32 6379 192.168.10.31 6379
54489:X 18 Mar 2025 15:22:24.818 * +slave slave 192.168.10.30:6379 192.168.10.30 6379 @ mymaster 192.168.10.31 6379
54489:X 18 Mar 2025 15:22:24.819 * +slave slave 192.168.10.32:6379 192.168.10.32 6379 @ mymaster 192.168.10.31 6379
54489:X 18 Mar 2025 15:22:29.829 # +sdown slave 192.168.10.32:6379 192.168.10.32 6379 @ mymaster 192.168.10.31 6379

4.3 驗證新主節點

/usr/local/redis/bin/redis-cli -p 6379 -a lahmy1c@ info replication# 此時主節點已經轉移到了master_host:192.168.10.31
[root@node1 redis]# /usr/local/redis/bin/redis-cli -p 6379 -a lahmy1c@ info replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:slave
master_host:192.168.10.31
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_read_repl_offset:232120
slave_repl_offset:232120
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:124c2940281b400d9240f9237c660db96b23166a
master_replid2:ca76bcd56c1d7aec579fc0976d630857da32b34c
master_repl_offset:232120
second_repl_offset:184978
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:232120
[root@node1 redis]# 

5 總結

通過如上步驟,我們就完成了redis sentinel模式的搭建配置。

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

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

相關文章

【深度】JADC2的層級結構以及全域Mesh網絡

文章目錄 內容摘要1. 引言2. JADC2層級結構3. JADC2轉變為CJADC24. 與工業領域自動化金字塔和全域MESH網絡的異同4.1 工業領域自動化金字塔4.2 全域Mesh網絡 #JADC2 #Mesh網絡 #融合計劃 #ABMS #超越計劃 #人工智能 #普羅米修斯 **專欄說明:主要研究作戰概念、新型作…

210、【圖論】課程表(Python)

題目 思路 這道題本質上是一個拓撲排序。每次先統計每個點的入度個數、然后再統計點與點之間的鄰接關系,找到入度為0的點作為起始遍歷點。之后每遍歷到這個點之后,就把這個點后續的鄰接關系邊的點入度減去一。當某個點入度為0時,繼續被加入其…

Mock接口編寫教程-axios-mock-adapter(React)

Mock模擬接口編寫教程 直接在前端實現接口模擬 1.第一步 設置模擬接口 // mock.ts import axios from axios import MockAdapter from axios-mock-adapter// 創建一個模擬適配器 const mock new MockAdapter(axios)// 設置模擬接口 export const setupMock () > {mock.…

CCF 編程能力認證 C++ 四級寶典

CCF編程能力等級認證(以下簡稱GESP)2025年四次認證時間分別為:3月22日、6月28日、9月27日、12月20日,認證方式為線下機考,認證語言包括:C、Python和Scratch三種語言,其中Scratch認證為一到四級&…

OpenCV圖像拼接(4)圖像拼接模塊的一個匹配器類cv::detail::BestOf2NearestRangeMatcher

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 cv::detail::BestOf2NearestRangeMatcher 是 OpenCV 庫中用于圖像拼接模塊的一個匹配器類,專門用于尋找兩幅圖像之間的最佳特征點匹配…

【C#語言】C#中的同步與異步編程:原理、示例與最佳實踐

文章目錄 ?前言?一、同步編程:簡單但低效的線性執行🌟代碼示例🌟執行流程示意圖🌟同步編程特點 ?二、異步編程:非阻塞的高效執行🌟代碼示例🌟執行流程示意圖🌟異步編程核心機制&a…

el-input 不可編輯,但是點擊的時候出現彈窗/或其他操作面板,并且帶可清除按鈕

1.focus“getFocus”鼠標聚焦的時候寫個方法,彈窗起來 getFocus(){ this.定義的彈窗狀態字段 true;} 2.點擊確定的時候,數值賦值到el-input的輸入框,彈窗取消(this.定義的彈段字端 false) 3.但是會有個問題就是el-input 不可點…

事件響應計劃:網絡彈性的關鍵

網絡安全事件響應計劃不僅僅是技術上的需要,更是企業的當務之急。在網絡威脅比以往任何時候都更加復雜和頻繁的時代,了解并做好準備應對這些事件可能會決定是恢復還是災難。 以下是簡要分析: 網絡安全事件不僅僅是技術故障;它們…

正則表達式詳解(regular expression)

💡 正則表達式(Regular Expression, regex)知識點總結 💡 正則表達式是一種用于匹配字符串的模式,廣泛用于搜索、替換、驗證等操作。 📌 正則表達式的主要作用 1?? 字符串匹配 🧐 檢查一個…

全球化2.0 | ZStack云計算系統工程師(ZCCE)國際認證培訓成功舉辦

近日,ZStack云計算系統工程師(ZCCE)國際認證培訓在上海成功舉辦。本次培訓采用 "線下 線上直播" 雙軌模式,同步開設中文與英文課程,吸引了來自中國、東南亞、獨聯體、北美、中東等多個國家和地區的近 90 名…

C++學習之nginx+fastDFS

目錄 1.知識點概述 2.fastcgi復習 3.文件上傳流程分析 4.文件下載流程和優化 5.在存儲節點上安裝nginx和fastdfs插件 6.mod-fdsf.com配置文件修改 7.解決nginx的worker無法啟動,拷貝配置文件操作 8.客戶 通過瀏覽器訪問存儲節點404問題 9.nginx服務器處理資…

【AIGC】Win10系統極速部署Docker+Ragflow+Dify

【AIGC】WIN10僅3步部署DockerRagflowDify 一、 Docker快速部署1.F2進入bios界面,按F7設置開啟VMX虛擬化技術。保存并退出。2.打開控制面板配置開啟服務3.到官網下載docker安裝包,一鍵安裝(全部默認勾選) 二、 RagFlow快速部署1.確…

token升級(考慮在分布式環境中布置token,結合session保證請求調用過程中token不會過期。)

思路: 首先,用戶的需求是確保使用同一個Token的外部調用都在一個Session中處理。 需要考慮Token與Session綁定、安全措施、Session管理、分布式處理等。 使用Redis作為Session存儲, 在Java中 通過Spring Data Redis或Lettuce庫實現。 2.生成…

新一代電子數據取證專家 | 蘇州龍信信息科技有限公司

本文關鍵詞:電子取證、手機取證、計算機取證、云取證 關于我們About us 蘇州龍信信息科技有限公司專注于電子數據取證、大數據、信息安全等領域,核心業務主要涵蓋取證工具研發、大數據融合分析、案件技術支持、取證能力培訓等,先后為執法部門…

研究生研究方向系統基于springboot SSM

目錄 摘要 一、系統背景與目的 二、開發流程 三、系統架構與技術選型 四、功能分析 4.1 用戶角色與權限管理 4.2研究方向管理功能 4.3學習資源管理功能 4.4科研項目跟蹤功能 4.5學術交流與分享功能 4.6導師指導與評估功能 摘要 基于Spring Boot的研究生研究方向系統…

[解決] PDF轉圖片,中文亂碼或顯示方框的解決方案

在Java開發中,將PDF文件轉換為圖片是一項常見的需求,但過程中可能會遇到中文亂碼或顯示方框的問題。本文將深入探討這一問題,并提供詳細的解決方案,幫助開發者順利地完成PDF到圖片的轉換。 一、問題現象 在使用Java庫(如Apache PDFBox)將PDF轉換為圖片時,如果PDF文件中…

「JavaScript深入」WebSocket:高效的雙向實時通信技術

WebSocket WebSocket 的特點1. 全雙工通信2. 持久連接3. 低延遲4. 二進制和文本支持5. 連接管理6. 二進制數據傳輸 WebSocket 協議詳解1. 握手過程2. 數據幀結構 WebSocket 的實現服務器端實現(Node.js ws庫)1. 基礎服務器2. 廣播功能實現3. 心跳機制客…

ABAP 長文本編輯器

加個屏幕 *&---------------------------------------------------------------------* *& Report YDEMO2 *&---------------------------------------------------------------------* *& *&---------------------------------------------------------…

postman小白教程(從入門到實戰,詳細教學)

目錄 1. postman介紹 2. 下載地址 3. 安裝流程 4. 注冊postman賬號 ① 打開postman,點擊【創建賬號】或【登錄】,會跳轉到瀏覽器 ② 若已有賬號可以直接登錄;若無賬號,則創建新賬號 ③ 若登錄成功會彈出提示框,…

Qt 實現波浪填充的圓形進度顯示

話不多說&#xff0c;先上效果圖 代碼示例&#xff1a; #include <QApplication> #include <QWidget> #include <QPainter> #include <QPropertyAnimation> #include <QTimer> #include <cmath>class WaveProgressBar : public QWidget {…