這篇文章帶大家了解Redis中的哨兵模式。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。
主從切換技術的方法是:
- 當主伺服器宕機時,需要將從伺服器手動切換(
slaveof no one
)到主從伺服器,這需要人工幹預。 - 這既費時又費力,但也會在一段時間內導致服務不可用。這不是推薦的方法。
- 更多的時間,我們優先考慮哨兵模式,這是目前企業應用程式的主流模式。 Redis Sentinel是Redis的高度可用的實作。
- Sentinel是管理多個Redis實例的工具。它可以監視,通知Redis並自動進行故障轉移。
Redis Sentinel的基本概念
#主從複製和Sentinel高可用性架構的示意圖
Redis Sentinel架構
#Redis Sentinel的主要功能Sentinel的主要功能包括:
#主節點生存檢測,主從操作檢測,自動故障轉移以及主從切換。
- Redis的最小標記配置是一台主機和一台從機;
- Redis的Sentinel系統可用來管理多個Redis伺服器。
- 系統可以執行以下四個任務:
#1、監視:Sentinel會不斷檢查主伺服器和從屬伺服器是否正常運行;
2、通知:當受監控的Redis伺服器出現問題時,Sentinel會透過API腳本向管理員或其他應用程式發送通知;
#3、自動故障轉移:當主節點無法正常運作時,Sentinel將啟動自動故障轉移操作。它將與發生故障的主節點處於主從關係的從節點之一升級到新的主節點,並將其他從節點指向新的主節點;
4、 配置提供者:在Redis Sentinel模式下,初始化客戶端應用程式時,它將連接Sentinel節點集合以取得主節點的資訊;
##Redis Sentinel如何運作
- #當哨兵節點連接到Redis實例時,它將建立兩個連接:cmd和pub/sub。 Sentinel透過cmd連線將指令傳送到Redis,並透過pub/sub連線到Redis實例上的其他哨兵實例。
- Sentinel與Redis主節點和從節點進行互動的命令
- 每個Sentinel每秒向其已知的主實例,從屬實例和其他Sentinel實例發送一個PING命令。
- 如果一個實例花費的時間比上次對PING指令的有效回覆(毫秒)後down所指定的時間更長,那麼Sentinel會將該實例標記為
- 主觀離線。
- 如果將主伺服器標記為主觀註銷,則將監視主伺服器的所有Sentinel節點以確認主伺服器確實已經每秒進入一次主觀註銷狀態。
- 如果將主伺服器標記為主觀註銷,並且在指定的時間範圍內有足夠的哨兵(至少在設定檔中指定的數量)與該判斷相符,則將主伺服器標記為客觀下線。
- 通常,每個Sentinel每10秒向其所有已知的主伺服器和從伺服器發送INFO命令。當Sentinel將主伺服器標記為離線時,Sentinel發送INFO指令給離線主伺服器的所有從屬伺服器的頻率將從每10秒一次變更為每秒一次。
- Sentinel和其他哨兵協商主節點的狀態。如果主節點處於SDOWN狀態,投票將自動選擇新的主節點。將其餘的從節點指向新的主節點
- 以進行資料複製。
#
- 如果沒有足夠的哨兵以允許主伺服器登出,則將刪除主伺服器的客觀登出狀態。當主伺服器對Sentinel的PING指令傳回有效答覆時,主伺服器的主觀離線狀態將會被刪除。
- note
#健壯的Redis Sentinel群集應至少使用三個Sentinel實例,並確保將這些實例放置在不同的電腦上,甚至放置在不同的物理區域上.
Sentinel無法保證強一致性。常見客戶端應用程式庫中支援Sentinel。
Sentinel需要不斷測試和觀察以確保高可用性
#測試
- 建立設定檔
內容簡單設定如下:
port 16379 # 哨兵端口号 daemonize yes sentinel monitor master 127.0.0.1 6379 1 # 监视master protected-mode no logfile "/usr/local/bin/sentinel-1/sentinel-1.log" # 日志文件
- 先啟動redis設定集群,啟動redis-cli,設6379為master
- 再啟動sentinel
sudo redis-sentinel sentinel-1/sentinel.conf
- 關閉6379
- #查看另外兩個redis-cli的角色狀況
- ##再啟動6379
- 查看sentinel日誌
# Example sentinel.conf
# *** IMPORTANT ***
# 绑定IP地址
# bind 127.0.0.1 192.168.1.1
# 保护模式(是否禁止外部链接,除绑定的ip地址外)
# protected-mode no
# port <sentinel-port>
# 此Sentinel实例运行的端口
port 26379
# 默认情况下,Redis Sentinel不作为守护程序运行。 如果需要,可以设置为 yes。
daemonize no
# 启用守护进程运行后,Redis将在/var/run/redis-sentinel.pid中写入一个pid文件
pidfile /var/run/redis-sentinel.pid
# 指定日志文件名。 如果值为空,将强制Sentinel日志标准输出。守护进程下,如果使用标准输出进行日志记录,则日志将发送到/dev/null
logfile ""
# sentinel announce-ip <ip>
# sentinel announce-port <port>
#
# 上述两个配置指令在环境中非常有用,因为NAT可以通过非本地地址从外部访问Sentinel。
#
# 当提供announce-ip时,Sentinel将在通信中声明指定的IP地址,而不是像通常那样自动检测本地地址。
#
# 类似地,当提供announce-port 有效且非零时,Sentinel将宣布指定的TCP端口。
#
# 这两个选项不需要一起使用,如果只提供announce-ip,Sentinel将宣告指定的IP和“port”选项指定的服务器端口。
# 如果仅提供announce-port,Sentinel将通告自动检测到的本地IP和指定端口。
#
# Example:
#
# sentinel announce-ip 1.2.3.4
# dir <working-directory>
# 每个长时间运行的进程都应该有一个明确定义的工作目录。对于Redis Sentinel来说,/tmp就是自己的工作目录。
dir /tmp
# sentinel monitor <master-name> <ip> <redis-port> <quorum>
#
# 告诉Sentinel监听指定主节点,并且只有在至少<quorum>哨兵达成一致的情况下才会判断它 O_DOWN 状态。
#
#
# 副本是自动发现的,因此您无需指定副本。
# Sentinel本身将重写此配置文件,使用其他配置选项添加副本。另请注意,当副本升级为主副本时,将重写配置文件。
#
# 注意:主节点(master)名称不能包含特殊字符或空格。
# 有效字符可以是 A-z 0-9 和这三个字符 ".-_".
sentinel monitor mymaster 127.0.0.1 6379 2
# 如果redis配置了密码,那这里必须配置认证,否则不能自动切换
# Example:
#
# sentinel auth-pass mymaster MySUPER--secret-0123passw0rd
# sentinel down-after-milliseconds <master-name> <milliseconds>
#
# 主节点或副本在指定时间内没有回复PING,便认为该节点为主观下线 S_DOWN 状态。
#
# 默认是30秒
sentinel down-after-milliseconds mymaster 30000
# sentinel parallel-syncs <master-name> <numreplicas>
#
# 在故障转移期间,多少个副本节点进行数据同步
sentinel parallel-syncs mymaster 1
# sentinel failover-timeout <master-name> <milliseconds>
#
# 指定故障转移超时(以毫秒为单位)。 它以多种方式使用:
#
# - 在先前的故障转移之后重新启动故障转移所需的时间已由给定的Sentinel针对同一主服务器尝试,是故障转移超时的两倍。
#
# - 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。
#
# - 取消已在进行但未生成任何配置更改的故障转移所需的时间
#
# - 当进行failover时,配置所有slaves指向新的master所需的最大时间。
# 即使过了这个超时,slaves依然会被正确配置为指向master。
#
# 默认3分钟
sentinel failover-timeout mymaster 180000
# 脚本执行
#
# sentinel notification-script和sentinel reconfig-script用于配置调用的脚本,以通知系统管理员或在故障转移后重新配置客户端。
# 脚本使用以下规则执行以进行错误处理:
#
# 如果脚本以“1”退出,则稍后重试执行(最多重试次数为当前设置的10次)。
#
# 如果脚本以“2”(或更高的值)退出,则不会重试执行。
#
# 如果脚本因为收到信号而终止,则行为与退出代码1相同。
#
# 脚本的最长运行时间为60秒。 达到此限制后,脚本将以SIGKILL终止,并重试执行。
# 通知脚本
#
# sentinel notification-script <master-name> <script-path>
#
# 为警告级别生成的任何Sentinel事件调用指定的通知脚本(例如-sdown,-odown等)。
# 此脚本应通过电子邮件,SMS或任何其他消息传递系统通知系统管理员 监控的Redis系统出了问题。
#
# 使用两个参数调用脚本:第一个是事件类型,第二个是事件描述。
#
# 该脚本必须存在且可执行,以便在提供此选项时启动sentinel。
#
# 举例:
#
# sentinel notification-script mymaster /var/redis/notify.sh
# 客户重新配置脚本
#
# sentinel client-reconfig-script <master-name> <script-path>
#
# 当主服务器因故障转移而变更时,可以调用脚本执行特定于应用程序的任务,以通知客户端,配置已更改且主服务器地址已经变更。
#
# 以下参数将传递给脚本:
#
# <master-name> <role> <state> <from-ip> <from-port> <to-ip> <to-port>
#
# <state> 目前始终是故障转移 "failover"
# <role> 是 "leader" 或 "observer"
#
# 参数 from-ip, from-port, to-ip, to-port 用于传递主服务器的旧地址和所选副本的新地址。
#
# 举例:
#
# sentinel client-reconfig-script mymaster /var/redis/reconfig.sh
# 安全
# 避免脚本重置,默认值yes
# 默认情况下,SENTINEL SET将无法在运行时更改notification-script和client-reconfig-script。
# 这避免了一个简单的安全问题,客户端可以将脚本设置为任何内容并触发故障转移以便执行程序。
sentinel deny-scripts-reconfig yes
# REDIS命令重命名
#
#
# 在这种情况下,可以告诉Sentinel使用不同的命令名称而不是正常的命令名称。
# 例如,如果主“mymaster”和相关副本的“CONFIG”全部重命名为“GUESSME”,我可以使用:
#
# SENTINEL rename-command mymaster CONFIG GUESSME
#
# 设置此类配置后,每次Sentinel使用CONFIG时,它将使用GUESSME。 请注意,实际上不需要尊重命令案例,因此在上面的示例中写“config guessme”是相同的。
#
# SENTINEL SET也可用于在运行时执行此配置。
#
# 为了将命令设置回其原始名称(撤消重命名),可以将命令重命名为它自身:
#
# SENTINEL rename-command mymaster CONFIG CONFIG
更多程式相關知識,請造訪:
程式設計教學以上是聊聊Redis中的哨兵模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Redis超越SQL數據庫的原因在於其高性能和靈活性。 1)Redis通過內存存儲實現極快的讀寫速度。 2)它支持多種數據結構,如列表和集合,適用於復雜數據處理。 3)單線程模型簡化開發,但高並發時可能成瓶頸。

Redis在高並發和低延遲場景下優於傳統數據庫,但不適合複雜查詢和事務處理。 1.Redis使用內存存儲,讀寫速度快,適合高並發和低延遲需求。 2.傳統數據庫基於磁盤,支持複雜查詢和事務處理,數據一致性和持久性強。 3.Redis適用於作為傳統數據庫的補充或替代,但需根據具體業務需求選擇。

Redisisahigh-performancein-memorydatastructurestorethatexcelsinspeedandversatility.1)Itsupportsvariousdatastructureslikestrings,lists,andsets.2)Redisisanin-memorydatabasewithpersistenceoptions,ensuringfastperformanceanddatasafety.3)Itoffersatomicoper

Redis主要是一個數據庫,但它不僅僅是數據庫。 1.作為數據庫,Redis支持持久化,適合高性能需求。 2.作為緩存,Redis提升應用響應速度。 3.作為消息代理,Redis支持發布-訂閱模式,適用於實時通信。

redisisamultifaceTedToolThatServesAsAdatabase,server和more.itfunctionsasanin-memorydatastrustore,supportsvariousDataStructures,and CanbeusedAsacache,MessageBroker,sessionStorage,sessionStorage,sessionstorage,andford forderibedibedlocking。

Redisisanopen-Source,內存內部的庫雷斯塔氏菌,卡赫和梅斯吉級,excellingInsPeedAndVersatory.itiswidelysusedforcaching,Real-Timeanalytics,Session Management,Session Managements,and sessighterboarderboarderboardobboardotoitsssupportfortfortfortfortfortfortfortfortorvortfortfortfortfortfortforvortfortforvortforvortforvortfortforvortforvortforvortforvortdatastherctuct anddatataCcessandcessanddataaCces

Redis是一個開源的內存數據結構存儲,用作數據庫、緩存和消息代理,適合需要快速響應和高並發的場景。 1.Redis使用內存存儲數據,提供微秒級的讀寫速度。 2.它支持多種數據結構,如字符串、列表、集合等。 3.Redis通過RDB和AOF機制實現數據持久化。 4.使用單線程模型和多路復用技術高效處理請求。 5.性能優化策略包括LRU算法和集群模式。

Redis的功能主要包括緩存、會話管理和其他功能:1)緩存功能通過內存存儲數據,提高讀取速度,適用於電商網站等高頻訪問場景;2)會話管理功能在分佈式系統中共享會話數據,並通過過期時間機制自動清理;3)其他功能如發布-訂閱模式、分佈式鎖和計數器,適用於實時消息推送和多線程系統等場景。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器