搜尋
首頁資料庫Redis深入搞懂Redis中的哨兵

深入搞懂Redis中的哨兵

Apr 26, 2023 pm 05:59 PM
redis資料庫後端

Redis哨兵詳解,哨兵搭建流程,哨兵的運作流程和選舉原理(主觀下線,客觀下線,如何選舉出哨兵leader)。

深入搞懂Redis中的哨兵

Redis哨兵(sentinel)

哨兵是什麼?

吹哨人巡查監控後台master主機是否有故障,如果故障了根據投票數自動將某一個從庫轉換為新主庫,繼續對外服務。 【相關推薦:Redis影片教學

俗稱,無人值守運維。

幹什麼?

  • 主從監控:監控主從redis庫執行是否正常
  • 訊息通知:哨兵可以將故障轉移的結果傳送給客戶端
  • 故障轉移:將其中一個Slave作為新的Master
  • 配置中心:客戶端透過連接哨兵來獲得目前Redis服務的主節點位址

案例

架構

3個哨兵:自動監控和維護集群,不存放數據,只是吹哨者。

1主2從:用於讀取與存放資料

深入搞懂Redis中的哨兵

#步驟

  • 將redis安裝路徑下的sentinel.conf 拷貝到myredis目錄下

    cp sentinel.conf /myredis/sentinel26379.conf
  • 修改設定檔

    vim sentinel26379.conf
        
    bind 0.0.0.0
        
    # protected-mode yes 修改为 protected-mode no
    protected-mode no
    
    # daemonize no 修改为 daemonize yes
    daemonize yes
    
    # port 
    port 26379
    
    # pid文件名字,pidfile
    pidfile /var/run/redis_26379.pid
        
    # log文件名字,logfile(修改 logfile "" 为 logfile "/myredis/26379.log")
    logfile "/myredis/26379.log"
    
    # 指定当前的工作目录(修改 dir /temp 为 dir /myredis)
    dir /myredis

    設定要監控的master伺服器

    quorum:確認客觀下線的最少哨兵數。同意故障遷移的法定票數。

    # sentinel monitor <master-name> <ip> <redis-port> <quorum>

    設定連線master服務的密碼

    # sentinel auth-pass <master-name> <password>

    #我們知道,網路是不可靠的,有時候一個sentinel會因為網路阻塞而誤以為一個master redis已經死掉了,在sentinel集群環境下需要多個sentinel互相溝通來確認某個master是否真的死了,quorum這個參數是進行客觀下線的一個依據,意思是至少有quorum個sentinel認為這個master有故障,才會對這個master進行下線以及故障轉移。因為有的時候,某個sentinel節點可能因為自身網路原因,導致無法連接master,而此時master並沒有出現故障,所以,這就需要多個sentinel都一致認為該master有問題,才可以進行下一步操作,這保證了公平性和高可用。

安裝三台linux

ip和port分別為

# sentinel00
192.168.157.112    26379
# sentinel01
192.168.157.113    26380
# sentinel02
192.168.157.118    26381

設定三台哨兵

sentinelxxxx.conf檔案

sentinel00

sentinel26379.conf

bind 0.0.0.0
daemonize yes
protected-mode no
port 26379
logfile "/myredis/sentinel26379.log"
pidfile /var/run/redis-sentinel26379.pid
dir /myredis
sentinel monitor mymaster 192.168.157.115 6379 2
sentinel auth-pass mymaster 1234

sentinel01

sentinel26380.conf

bind 0.0.0.0
daemonize yes
protected-mode no
port 26380
logfile "/myredis/sentinel26380.log"
pidfile /var/run/redis-sentinel26380.pid
dir /myredis
sentinel monitor mymaster 192.168.157.115 6379 2
sentinel auth-pass mymaster 1234

sentinel02

sentinel26381. conf

bind 0.0.0.0
daemonize yes
protected-mode no
port 26381
logfile "/myredis/sentinel26381.log"
pidfile /var/run/redis-sentinel26381.pid
dir /myredis
sentinel monitor mymaster 192.168.157.115 6379 2
sentinel auth-pass mymaster 1234

測試

  • 基於先前的redis複製,啟動1主2從測試是否主從複製是否正常,輸入info replication 檢視是否正常

  • #啟動三台哨兵,完成監控

    redis-sentinel /myredis/sentinel26379.conf --sentinel
    redis-sentinel /myredis/sentinel26380.conf --sentinel
    redis-sentinel /myredis/sentinel26381.conf --sentinel
  • 測試主從複製,一切良好

  • ##查看日誌

深入搞懂Redis中的哨兵

  • 檢視設定檔sentinel.conf

深入搞懂Redis中的哨兵

> 后面为自动新增内容

-

模擬master宕機

  • master主機

    # 模拟宕机
    shudown

    ##問題

    兩台從機資料是否正常? (yes)
    1. 會不會從剩下的兩台機器中選出新的master?(yes)
    2. 之前的master重啟之後會不會重新上位,重新成為master? (no)
  • salve取得資料

深入搞懂Redis中的哨兵

    查看新的master

深入搞懂Redis中的哨兵

    重寫啟動原始master
  • #master不會重新上位。

深入搞懂Redis中的哨兵對比設定檔

#檔案的內容,在執行期間會被sentinel動態修改。 master—slave主從關係切換後,設定檔內容會自動改變。

    sentinel6379.conf 檔案

深入搞懂Redis中的哨兵

    舊master

深入搞懂Redis中的哨兵

  • 新master

深入搞懂Redis中的哨兵

深入搞懂Redis中的哨兵

哨兵运行流程和选举原理

当一个主从配置中的master失效后,sentinel可以选举出一个新的master用于自动替换原master的工作,主从配置中的其他redis服务自动指向新的master同步数据,一般建议sentinel采取奇数台,防止某一台sentinel无法连接到master导致误切换。

SDown主观下线(Subjectively Down)

SDOWN(主观不可用)是单个哨兵自己主观检测到的关于master的状态,从sentinel的角度来看,如果发送了PING心跳后,在一定时间内没有收到合法的回复,就到达了SDOQN的条件。

sentinel配置文件中的 down-after-milliseconds 设置了主观下线的时间长度(默认30秒)。

# sentinel down-after-milliseconds <masterName> <timeout>
sentinel down-after-milliseconds mymaster 30000

ODown客观下线(Objectively Down)

ODOWN需要一定数量的sentinel,多个哨兵达成一致意见才能确认一个master客观上已经宕机了。

# sentinel monitor <master-name> <ip> <redis-port> <quorum>
sentinel monitor mymaster 127.0.0.1 6379 2

选举出领导者哨兵

当主节点被判断客观下线后,各个哨兵节点会进行协商,先选举出一个领导者哨兵节点,并由该领导者哨兵节点进行failover(故障迁移)

领导者哨兵如何选出来的?

Raft算法

监视该主节点的所有哨兵都有可能被选为领导者,选举使用的算法是Raft算法;Raft算法的基本思路是先到先得,即在一轮选举中,哨兵A向B发送成为领导者的申请,如果B没有同意过其他哨兵,则会同意A成为领导者。

深入搞懂Redis中的哨兵

选新的master(im)

整个过程由sentinel自己独立完成,无需人工干涉。

新主登基

某一个slave被选中成为master

选出新的master的规则,剩余slave节点健康的前提下

  1. redis.conf文件中,优先级slave-priority或者replica-priority最高节点(数字越小优先级越高)
  2. 复制偏移量offset最大的从节点。
  3. 最小Run ID的从节点。

深入搞懂Redis中的哨兵

群臣俯首

  • 执行 slaveof no one 命令让选出来的从节点成为新的主节点,并通过 slaveof 命令让其他节点成为其从节点。

  • sentinel leader 会对选举出来的新 master 执行 slaveof no one,将其提升为master节点

  • sentinel leader 向其他slave发送命令,让剩余的slave成为新的master节点的slave。

旧主拜服

  • 将之前的已经下线的旧master设置为新选出的新master的从节点,当旧master重新上线后,它会成为新master的从节点
  • sentinel leader 会让原来的master降级为slave并恢复正常工作。

哨兵使用建议

  • 哨兵节点数量应该为多个,哨兵本身应该为集群,保证高可用
  • 哨兵节点数量应该是奇数
  • 各个哨兵节点的配置应该一致
  • 如果哨兵节点部署在docker等容器里面,尤其要注意端口的正确映射
  • 哨兵集群 + 主从复制,并不能保证数据零丢失

更多编程相关知识,请访问:编程视频!!

以上是深入搞懂Redis中的哨兵的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:掘金社区。如有侵權,請聯絡admin@php.cn刪除
通過命令行查看 Redis 版本通過命令行查看 Redis 版本Apr 10, 2025 pm 04:03 PM

如何查看 Redis 版本?步驟如下:啟動 Redis 客戶端執行 INFO 命令查找 redis_version 字段,其值即為 Redis 版本號。

查看 Redis 版本號的幾種方法比較查看 Redis 版本號的幾種方法比較Apr 10, 2025 pm 04:00 PM

查看 Redis 版本號的方法包括:使用命令行工具 redis-cli、Redis INFO 命令、Redis 管理器和環境變量。 redis-cli --version 適用於本地和遠程實例,而 redis-cli info | grep redis_version 可提供更多信息,但僅適用於本地實例。 Redis 管理器提供圖形化界面,但需要第三方工具。環境變量 echo $REDIS_VERSION 在特定環境(如 Docker)中很有用。

為什麼需要知道 Redis 版本號為什麼需要知道 Redis 版本號Apr 10, 2025 pm 03:57 PM

了解 Redis 版本號至關重要,因為它與兼容性、安全性、性能優化、錯誤修復和文檔相關:確保應用程序與 Redis 版本兼容。識別和解決安全漏洞。優化應用程序性能,利用新的優化。獲取錯誤修復,提升應用程序穩定性。訪問特定版本的信息和支持資源。

Redis 版本兼容性問題Redis 版本兼容性問題Apr 10, 2025 pm 03:54 PM

Redis版本兼容性指的是不同版本之間通信的能力。兼容性分為以下級別:向下兼容:新服務器能處理舊客戶端命令。向上兼容:舊客戶端能連接新服務器,但可能無法使用新功能。完全兼容:不同版本無限制交互。兼容性受協議更改、數據結構變化和新功能添加的影響。使用統一版本、進行測試和使用兼容性庫可以避免兼容性問題。

Redis 如何查看所有 keyRedis 如何查看所有 keyApr 10, 2025 pm 03:51 PM

查看 Redis 中所有 Key 的方法包括:使用 KEYS 命令匹配 Key 名稱;使用 SCAN 命令迭代所有 Key;使用 DUMP 和 RESTORE 命令將 Key 值轉儲和還原;使用 RedisInsight 工具瀏覽 Key;對於 Redis 集群,使用 CLUSTER KEYSLOT 和 CLUSTER GETKEYSINSLOT 命令;使用 Lua 腳本生成包含所有 Key 的表。

Redis 查看所有 key 的命令是什麼Redis 查看所有 key 的命令是什麼Apr 10, 2025 pm 03:48 PM

Redis 的 KEYS 命令可用於查看所有 key:命令語法:KEYS pattern命令參數:pattern 指定搜索 key 時可使用的通配符模式,如 *(任意字符)和 ?(單個字符)。結果:返回與模式匹配的所有 key 的列表。示例:KEYS * 將返回所有 key。技巧:可使用空模式 "*" 查看所有 key,也可使用可變長度通配符 ":" 匹配任意數量的字符。複雜度:O(n),其中 n 是數據庫中的 key 數量。

Redis keys * 命令的作用是什麼Redis keys * 命令的作用是什麼Apr 10, 2025 pm 03:45 PM

Redis keys 命令查找所有與指定模式匹配的鍵,使用通配符 進行匹配。該命令返回一個數組,其中包含匹配的鍵名稱。

使用 keys * 命令有什麼風險使用 keys * 命令有什麼風險Apr 10, 2025 pm 03:42 PM

使用 keys * 命令存在風險,包括:性能影響:掃描整個鍵空間,導致服務器阻塞。內存消耗:獲取所有鍵的列表需要大量內存。數據洩露:返回所有鍵的列表,包括敏感信息。其他潛在風險:超時失敗、鍵空間變化導致列表不完整或不准確、降低服務器可靠性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用