最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis搭建哨兵集群實踐

 更新時間:2026年04月17日 08:45:31   作者:難釋懷  
本文介紹了從零搭建一個1主+2從+3哨兵的高可用Redis架構(gòu),并驗證故障轉(zhuǎn)移效果,文中詳細描述了環(huán)境準(zhǔn)備、搭建Redis主從復(fù)制、配置哨兵集群、驗證哨兵集群狀態(tài)以及模擬故障轉(zhuǎn)移的步驟,最后,還提供了在生產(chǎn)環(huán)境中的最佳實踐和常見問題排查建議

一、前言:為什么需要哨兵集群?

在生產(chǎn)環(huán)境中,單點 Redis 主節(jié)點一旦宕機,整個寫服務(wù)將中斷。

手動切換不僅慢(幾分鐘),還容易出錯。

Redis Sentinel(哨兵)集群 可以實現(xiàn):

  • ? 自動監(jiān)控主從節(jié)點健康狀態(tài)
  • ? 主節(jié)點宕機時自動選舉新主
  • ? 通知客戶端更新連接地址
  • 全程無需人工干預(yù)!

本文將帶你從零搭建一個 1 主 + 2 從 + 3 哨兵 的高可用 Redis 架構(gòu),并驗證故障轉(zhuǎn)移效果。

二、環(huán)境準(zhǔn)備

2.1 服務(wù)器規(guī)劃(可單機模擬)

角色IP 地址端口說明
Master192.168.1.106379主節(jié)點
Slave1192.168.1.116379從節(jié)點1
Slave2192.168.1.126379從節(jié)點2
Sentinel1192.168.1.1026379哨兵1(可與 Master 同機)
Sentinel2192.168.1.1126379哨兵2(可與 Slave1 同機)
Sentinel3192.168.1.1226379哨兵3(可與 Slave2 同機)

單機測試:可在同一臺機器用不同端口模擬(如 6380、6381)

2.2 軟件要求

  • Redis 6.0+(推薦 7.x)
  • Linux / macOS(Windows 僅限 WSL)

三、第一步:搭建 Redis 主從復(fù)制

3.1 配置主節(jié)點(master.conf)

# /etc/redis/master.conf
port 6379
bind 0.0.0.0
daemonize yes
logfile "/var/log/redis/master.log"
dir /var/lib/redis
requirepass "your_strong_password"  # 建議設(shè)置密碼

啟動主節(jié)點:

redis-server /etc/redis/master.conf

3.2 配置從節(jié)點(slave1.conf & slave2.conf)

# /etc/redis/slave1.conf
port 6379
bind 0.0.0.0
daemonize yes
logfile "/var/log/redis/slave1.log"
dir /var/lib/redis
# 關(guān)鍵:指向主節(jié)點
replicaof 192.168.1.10 6379
masterauth "your_strong_password"  # 主節(jié)點密碼

注意:Redis 5.0+ 使用 replicaof 替代 slaveof

啟動兩個從節(jié)點:

redis-server /etc/redis/slave1.conf
redis-server /etc/redis/slave2.conf

3.3 驗證主從同步

# 在主節(jié)點寫入
redis-cli -h 192.168.1.10 -a your_strong_password SET hello world

# 在從節(jié)點讀取
redis-cli -h 192.168.1.11 GET hello  # 應(yīng)返回 "world"

四、第二步:配置哨兵集群

4.1 創(chuàng)建哨兵配置文件(sentinel.conf)

所有哨兵節(jié)點使用相同配置(除日志路徑外)

# /etc/redis/sentinel.conf
port 26379
bind 0.0.0.0
daemonize yes
logfile "/var/log/redis/sentinel.log"
dir /var/lib/redis
# 監(jiān)控名為 mymaster 的主節(jié)點
# quorum=2:至少 2 個哨兵同意才判定主節(jié)點宕機
sentinel monitor mymaster 192.168.1.10 6379 2
# 主節(jié)點密碼(必須配置?。?
sentinel auth-pass mymaster your_strong_password
# 判定主觀下線時間(毫秒)
sentinel down-after-milliseconds mymaster 30000
# 故障轉(zhuǎn)移超時(毫秒)
sentinel failover-timeout mymaster 180000
# 故障轉(zhuǎn)移后,并行同步從節(jié)點數(shù)
sentinel parallel-syncs mymaster 1

關(guān)鍵參數(shù)說明

  • mymaster:主節(jié)點邏輯名稱(客戶端通過此名稱查詢)
  • quorum=2:3 節(jié)點集群中,需 2 個哨兵同意才觸發(fā) ODOWN
  • auth-pass必須配置,否則哨兵無法操作帶密碼的主節(jié)點

4.2 啟動三個哨兵節(jié)點

# 在三臺機器分別執(zhí)行
redis-sentinel /etc/redis/sentinel.conf

單機測試:復(fù)制三份配置,修改 port 為 26379/26380/26381,分別啟動

五、第三步:驗證哨兵集群狀態(tài)

5.1 查看哨兵監(jiān)控信息

redis-cli -p 26379 SENTINEL MASTER mymaster

關(guān)鍵字段:

  • num-slaves: 2(應(yīng)有 2 個從節(jié)點)
  • num-other-sentinels: 2(其他哨兵數(shù)量)
  • flags: 正常應(yīng)為 master,宕機后變?yōu)?nbsp;odown, sdown

5.2 查看所有哨兵共識

redis-cli -p 26379 SENTINEL SENTINELS mymaster

→ 應(yīng)顯示另外兩個哨兵的信息

5.3 客戶端獲取主節(jié)點地址

redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster
# 返回:1) "192.168.1.10" 2) "6379"

六、第四步:模擬故障轉(zhuǎn)移(實戰(zhàn)驗證)

6.1 手動停止主節(jié)點

# 在主節(jié)點機器執(zhí)行
redis-cli -a your_strong_password shutdown

6.2 觀察哨兵日志

# /var/log/redis/sentinel.log
+sdown master mymaster 192.168.1.10 6379  # 主觀下線
+odown master mymaster ...                # 客觀下線
+new-epoch 1
+try-failover master mymaster ...
+vote-for-leader abc123 1                 # 投票
+elected-leader master mymaster ...
+failover-state-select-slave master mymaster ...
+selected-slave slave 192.168.1.11:6379  # 選出新主
+failover-state-send-slaveof-noone ...
+switch-master mymaster 192.168.1.10 6379 192.168.1.11 6379  # 切換完成!

6.3 驗證新主節(jié)點

# 查詢當(dāng)前主節(jié)點
redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster
# 返回:1) "192.168.1.11" 2) "6379"

# 寫入新主
redis-cli -h 192.168.1.11 -a your_strong_password SET test_key new_value

# 從節(jié)點(原主恢復(fù)后)應(yīng)能同步
redis-cli -h 192.168.1.10 GET test_key  # 若原主已重啟

6.4 原主恢復(fù)后自動變?yōu)閺墓?jié)點

重啟原主:

redis-server /etc/redis/master.conf

查看其角色:

redis-cli -h 192.168.1.10 ROLE
# 返回:1) "slave" 2) "192.168.1.11" ...

成功!整個過程全自動,無需人工干預(yù)。

七、客戶端連接示例(Spring Boot)

# application.yml
spring:
  redis:
    sentinel:
      master: mymaster
      nodes:
        - 192.168.1.10:26379
        - 192.168.1.11:26379
        - 192.168.1.12:26379
    password: your_strong_password

應(yīng)用會自動連接當(dāng)前主節(jié)點,切換時可能短暫報錯,重試即可。

八、生產(chǎn)環(huán)境最佳實踐

必須遵守

  1. 至少 3 個哨兵節(jié)點(部署在不同物理機/可用區(qū))
  2. 哨兵與 Redis 實例盡量分離部署(避免資源競爭)
  3. 主從節(jié)點必須設(shè)置密碼,并在哨兵中配置 auth-pass
  4. 監(jiān)控哨兵日志與 +switch-master 事件

推薦配置

  • down-after-milliseconds: 10000~30000(根據(jù)網(wǎng)絡(luò)質(zhì)量)
  • quorum: 3 節(jié)點設(shè) 2,5 節(jié)點設(shè) 3
  • 從節(jié)點設(shè)置 replica-priority 控制升主順序

九、常見問題排查

問題:哨兵無法發(fā)現(xiàn)從節(jié)點

  • 原因:主節(jié)點未正確配置 replicaof,或網(wǎng)絡(luò)不通
  • 解決:檢查 INFO REPLICATION 輸出

問題:故障轉(zhuǎn)移后客戶端連不上

  • 原因:客戶端未使用 Sentinel 模式,或未配置密碼
  • 解決:確保使用 JedisSentinelPool 或 Spring Boot Sentinel 配置

問題:哨兵日志報NOAUTH

  • 原因:未配置 sentinel auth-pass
  • 解決:在 sentinel.conf 中添加主節(jié)點密碼

十、總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • k8s部署redis集群實現(xiàn)過程實例詳解

    k8s部署redis集群實現(xiàn)過程實例詳解

    這篇文章主要為大家介紹了k8s部署redis集群實現(xiàn)過程實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 寶塔中ThinkPHP框架使用Redis的一系列教程

    寶塔中ThinkPHP框架使用Redis的一系列教程

    關(guān)于redis的安裝,在服務(wù)器或者虛擬機上安裝寶塔面板安裝redis,這樣很簡單就可以使用redis了,記得安裝redis的時候不僅要安裝redis軟件,還要進入項目使用的php版本中安裝redis擴展,然后開啟redis軟件
    2023-03-03
  • Redis 操作多個數(shù)據(jù)庫的配置的方法實現(xiàn)

    Redis 操作多個數(shù)據(jù)庫的配置的方法實現(xiàn)

    本文主要介紹了Redis 操作多個數(shù)據(jù)庫的配置的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Django使用Redis進行緩存詳細步驟

    Django使用Redis進行緩存詳細步驟

    這篇文章主要介紹了Django使用Redis進行緩存詳細流程,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • Caffeine實現(xiàn)類似redis的動態(tài)過期時間設(shè)置示例

    Caffeine實現(xiàn)類似redis的動態(tài)過期時間設(shè)置示例

    這篇文章主要為大家介紹了Caffeine實現(xiàn)類似redis的動態(tài)過期時間示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • 詳解redis集群選舉機制

    詳解redis集群選舉機制

    這篇文章主要介紹了詳解redis集群選舉機制,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 阿里Tair分布式鎖與Redis分布式鎖的實現(xiàn)區(qū)別

    阿里Tair分布式鎖與Redis分布式鎖的實現(xiàn)區(qū)別

    本文給大家介紹阿里Tair分布式鎖與Redis分布式鎖的實現(xiàn)區(qū)別解析,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2026-04-04
  • Redis鍵值設(shè)計的實踐

    Redis鍵值設(shè)計的實踐

    本文主要介紹了Redis鍵值設(shè)計的實踐,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • jedis配置含義詳解

    jedis配置含義詳解

    這篇文章主要介紹了jedis配置含義詳解的相關(guān)資料,需要的朋友可以參考下
    2020-04-04
  • Redisson分布式鎖之加解鎖詳解

    Redisson分布式鎖之加解鎖詳解

    這篇文章主要為大家介紹了Redisson分布式鎖加解鎖的詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03

最新評論

东丰县| 开远市| 永泰县| 武陟县| 景宁| 剑阁县| 鄂伦春自治旗| 象州县| 石景山区| 贵州省| 吐鲁番市| 嘉禾县| 类乌齐县| 桃江县| 盐亭县| 永寿县| 油尖旺区| 大安市| 延安市| 都兰县| 曲水县| 和田市| 临武县| 永吉县| 布尔津县| 克拉玛依市| 满洲里市| 杨浦区| 大英县| 昌乐县| 襄汾县| 尼木县| 永嘉县| 兰州市| 大连市| 阳新县| 同德县| 灵宝市| 长宁县| 隆林| 新绛县|