Redis哨兵模式:什么是哨兵模式、哨兵模式的優缺點、哨兵模式的主觀下線和客觀下線、投票選舉、Redis 哨兵模式搭建

文章目錄

  • 什么是哨兵模式
  • 哨兵模式的優缺點
  • 主觀下線和客觀下線
  • 投票選舉
  • 哨兵模式場景應用
  • Redis version 6.0.5 集群搭建
    • 下載文件
    • 環境安裝
    • 解壓
    • 編譯
    • 配置文件
    • 啟動
    • 關閉
    • 密碼設置

什么是哨兵模式

哨兵模式是Redis的高可用解決方案之一,它旨在提供自動故障轉移和故障檢測的功能。在傳統的Redis部署中,單個Redis節點可能成為單點故障,一旦該節點宕機,整個系統將不可用。為了解決這個問題,哨兵模式引入了多個Redis節點,其中一個節點被選為主節點,其他節點作為從節點。
在這里插入圖片描述
在上面模式中,哨兵主要有幾個作用:

  • 監控狀態:會向所有監控對象每秒發送ping命令,通過是否有響應來判斷master和所有slave節點狀態。
  • 故障轉移:當一旦發現Master節點異常,它將嘗試進行故障轉移,選擇新的slave節點為master節點,并通過發布訂閱的方式通知其他slave節點修改配置。
    但在上面的模式中,哨兵節點也存在單點故障。因此,為防止Sentinel發生意外,Sentinel也需要實現集群高可用。

哨兵模式的優缺點

優點:
自動故障轉移,提高系統的高可用性。
具有主從復制模式的所有優點,如數據冗余和讀寫分離。
缺點:
配置和管理相對復雜。
依然無法實現數據分片,受單節點內存限制。

主觀下線和客觀下線

主觀下線是指一個哨兵節點認為主節點不可用,但它并不確定其他哨兵節點是否也認為主節點不可用。當一個哨兵節點在一定時間(配置參數:down-after-milliseconds)內無法與主節點通信(比如發送PING命令沒有收到響應),它會認為主節點下線。但在這個階段,其他哨兵節點并不知道這個節點的狀態,僅有一個哨兵主觀地認為主節點宕機。

客觀下線是指一個主節點被多數哨兵節點認定為不可用。當一個哨兵節點認為主節點宕機后,它會向其他哨兵節點詢問對主節點的狀態,并請求其他哨兵進行確認。如果多數(大多數至少需要半數加1)的哨兵節點都認為主節點不可用,那么主節點就會被判定為客觀下線。客觀下線意味著主節點的狀態在整個哨兵集群中得到了確認。

主觀下線和客觀下線的引入是為了避免誤判。如果只有一個哨兵節點認為主節點下線,那么很可能是網絡抖動等原因導致的,此時并不應該進行故障轉移。只有多數的哨兵節點都確認主節點下線,才能確保故障轉移的正確性,保證整個集群的穩定性。

哨兵模式使用主觀下線和客觀下線狀態的組合來實現可靠的主節點故障檢測和故障轉移,從而確保Redis集群的高可用性。

投票選舉

在多Sentinel模式下,各節點會相互監控主從節點的健康狀態。當主節點發生故障時,首先由Sentinel節點之間基于Raft算法進行投票選舉,按照誰發現主節點故障誰去處理的原則,選舉出一個領頭Sentinel節點(Leader Sentinel)。這個領頭Sentinel節點負責進行故障轉移操作。

故障轉移過程中,領頭Sentinel節點會根據一定的規則在所有從節點中選擇一個最優的從節點作為新的主節點(Master)。一般會選擇復制偏移量最大且優先級較高的從節點作為新的主節點。然后,領頭Sentinel節點通過發布訂閱功能,通知其他從節點更改配置文件,將它們的連接從原來的主節點轉移到新的主節點上。

對于客戶端來說,連接Redis集群時首先連接到Sentinel節點,通過Sentinel節點查詢主節點的地址。一旦主節點發生故障并進行了故障轉移,Sentinel節點會將最新的主節點地址告知客戶端。這樣,客戶端無需重啟,就可以自動連接到新的主節點,實現高可用性的數據交互。

哨兵模式場景應用

高可用性要求較高的場景:通過自動故障轉移,確保服務的持續可用。
數據備份和容災恢復:在主從復制的基礎上,提供自動故障轉移功能。
總結:哨兵模式在主從復制模式的基礎上實現了自動故障轉移,提高了系統的高可用性。然而,它仍然無法實現數據分片。如果需要實現數據分片和負載均衡,可以考慮使用Cluster模式。

Redis version 6.0.5 集群搭建

下載文件

在這里插入圖片描述

下載 命令 url 可找官網  復制
wget http://download.redis.io/releases/redis-6.0.5.tar.gz

環境安裝

yum install gcc-c++
yum install cpp 
yum install binutils
yum install glibc 
yum install glibc-kernheaders
yum install glibc-common
yum install glibc-devel
yum install gcc
yum install make
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

解壓

創建redis文件夾
cd /home
mkdir redis
cd redis
解壓 
tar -zxvf redis-6.0.5.tar.gz
重命名
mv redis-6.0.5 redis-1
復制 
cp -r redis-1 redis-2
cp -r redis-1 redis-3 

編譯

cd /home/redis/redis-1
每一個redis執行下行命令
scl enable devtoolset-9 bash
如果以以下編譯安裝 的命令失敗 基本上是因為 環境安裝問題 可以直接百度 相關更全面的安裝環境
make MALLOC=lib
make install

配置文件

重要的配置看截圖,ip地址以及格式請注意
master redis.conf 配置
在這里插入圖片描述
在這里插入圖片描述

vim /home/redis/redis-1/redis.conf
bind 0.0.0.0
protected-mode yes
port 16379
supervised no
pidfile "/home/redis/pid/16379.pid"
loglevel notice
logfile "/home/redis/log/16379.log"
databases 16
dir "/home/redis/data"
dbfilename dump16379.rdb
appendonly yes  # 開啟 aof  默認不開啟 
appendfilename "appendonly_16379.aof"
daemonize yes

混合持久化模式的開啟
在這里插入圖片描述

master sentinel.conf 配置

在這里插入圖片描述
在這里插入圖片描述

bind 0.0.0.0
port 26379
pidfile /home/redis/pid/-sentinel-26379.pid
logfile "/home/redis/log/sentinel-26379.log"
下面配置的ip 配置公網ip port 配置  master redis.conf  配置中的port
sentinel monitor mymaster ip 16379 2slave redis.confbind 0.0.0.0
port 16380
daemonize yes
pidfile "/home/redis/pid/16380.pid"
logfile "/home/redis/log/16380.log"
dir "/home/redis/data"
appendonly yes  # 開啟 aof  默認不開啟 
appendfilename "appendonly_16380.aof"
slaveof masterIp masterPortslave sentinel.conf 配置bind 0.0.0.0
port 26380
daemonize yes
pidfile "/home/redis/pid/sentinel-26380.pid"
logfile "/home/redis/log/sentinel-26380.log"
下面配置的ip 配置公網ip port 配置  master redis.conf  配置中的port
sentinel monitor mymaster MasterIP MasterPort 2

啟動

啟動腳本

#!/bin/bash# 啟動 Redis-Server
echo "Star Redis-Server ..."redis-1/src/redis-server redis-1/redis.conf &# sleep 1 睡眠1秒
# sleep 1s 睡眠1秒
# sleep 1m 睡眠1分
# sleep 1h 睡眠1小時
sleep 3redis-2/src/redis-server redis-2/redis.conf &
redis-3/src/redis-server redis-3/redis.conf &# 啟動 Redis-Sentinel
echo "Star Redis-Sentinel ..."redis-1/src/redis-sentinel redis-1/sentinel.conf &
redis-2/src/redis-sentinel redis-2/sentinel.conf &
redis-3/src/redis-sentinel redis-3/sentinel.conf &

關閉

關閉腳本

#!/bin/bash
# 停止 Redis-Server
echo "Shutdown Redis-Sentinel ..."
redis-1/src/redis-cli -h 公網ip -p 16379 shutdown
redis-2/src/redis-cli -h 公網ip -p 16380 shutdown
redis-3/src/redis-cli -h 公網ip -p 16381 shutdown
# 停止 Redis-Server
echo "Shutdown Redis-Server ..."
redis-1/src/redis-cli -h  公網ip -p 26379 -a 123456 shutdown
redis-2/src/redis-cli -h  公網ip -p 26380 -a 123456 shutdown
redis-3/src/redis-cli -h  公網ip -p 26381 -a 123456 shutdown

密碼設置


# 兩臺機器一臺master,一臺slave,兩個sentinel
#master修改
#1. redis.conf
requirepass 123456        #添加密碼
#2. sentinel.conf
sentinel auth-pass mymaster 123456     #連接master密碼
#slave修改
#1. redis.conf
masterauth 123456    #連接master密碼
slaveof 10.100.134.109 6379  #slaveof表示該機器是slave,后邊ip為master地址和端口
#2. sentinel.conf
sentinel auth-pass mymaster 123456     #連接master密碼,這個配置一定要在sentinel monitor 配置之后

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

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

相關文章

2023年四川網信人才技能大賽 實操賽Writeup

文章目錄 Crypto比base64少的baseaffine簡單的RSA Misc不要動我的flagSimpleUSB猜猜我是誰不聰明的AI Pwngetitezbbstack Reverse誰的DNA動了Dont Touch Me Weblittle_gamejustppbezbbssmart 題目附件,文章末尾微信公眾號點點關注親,謝謝親~ 題目附件鏈接…

C++ Qt開發:PushButton按鈕組件

Qt 是一個跨平臺C圖形界面開發庫,利用Qt可以快速開發跨平臺窗體應用程序,在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現圖形化開發極大的方便了開發效率,本章將重點介紹QPushButton按鈕組件的常用方法及靈活運用。 …

電子眼+無人機構建平安城市視頻防控監控方案

電子眼(也稱為監控攝像機)可以通過安裝在城市的不同角落,實時監控城市的各個地方。它們可以用于監測交通違法行為、監控公共場所的安全以及實時監測特定區域的活動情況。通過電子眼的應用,可以幫助警方及時發現并響應各類安全事件…

Ubuntu安裝TensorRT

文章目錄 1. 安裝CUDAa. 下載CUDAb. 安裝CUDAc. 驗證CUDA 2. 安裝CUDNNa. 下載CUDNNb. 安裝CUDNNc. 驗證CUDNN 3. 安裝TensorRTa. 下載TensorRTb. 解壓TensorRTc. 安裝TensorRTd. 安裝uff和graphsurgeone. 驗證是否安裝成功f. 備注 關注公眾號:『AI學習星球』 回復&…

spring boot學習第五篇:spring boot與JPA結合

1、準備表,創建表語句如下 CREATE TABLE girl (id int(11) NOT NULL AUTO_INCREMENT,cup_Size varchar(100) COLLATE utf8mb4_bin DEFAULT NULL,age int(11) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT4 DEFAULT CHARSETutf8mb4 COLLATEutf8mb4…

C語言-鏈表_基礎

鏈表-基礎 1. 數組 1.1 靜態數組 例子:int nums[5] {0};struct person ps[5]; 缺點:1,無法修改地址2,無法動態定義長度3,占用內存過大或過小4,增刪速度慢 優點數組的內存是連續開辟的,所以讀取速度快1.2 動態數組 例子:int *nums (int *) calloc(5,sizeof(int));struct p…

Vmware突然無法獲取IP(二)

一 測試環境 宿主機: window10Vmware 17 proUbuntu 18.04虛擬機中 二 問題 之前虛擬機可以正常使用。過程中,安裝了docker(不確定是否和這個有關系)第二天開啟虛擬機時,發現網口為down的狀態。將網口up后&#xff0…

python第三方庫——openpyxl

Bokeh是一個Python庫,用于對Excel 2010 xlsx/xlsm/xltx/xltm文件進行讀寫操作。 官網對該工具的介紹為: openpyxl is a Python library to read/write Excel 2010 xlsx/xlsm/xltx/xltm files.It was born from lack of existing library to read/write…

使用Java實現漢諾塔問題

文章目錄 漢諾塔問題 今天和大家來看看漢諾塔問題,這也是一個經典的算法 漢諾塔問題 分治算法經典問題:漢諾塔問題 漢諾塔的傳說 漢諾塔:漢諾塔(又稱河內塔)問題是源于印度一個古老傳說的益智玩具。大梵天創造世界的…

Git 克隆子目錄

背景 有時候,一個倉庫太大(包含很多個工程),下載費時,又占電腦的空間。 如何只下載其中一個工程(子目錄)呢? 稀疏檢出(Spare Checkout) git 的 Spare Chec…

Java項目-瑞吉外賣Day5

視線新增套餐功能: 創建SetmealDish,SetmealDto類,與相關的mapper,service,serviceImpl,controller類。 Setmeal表示套餐,SetmealDish表示套餐對應的菜品。 交互過程: 前端請求&a…

TCP 和 UDP 區別? 2、TCP/IP 協議涉及哪幾層架構? 3、描述下 TCP 連接 4 次揮手的過程?為什么要 4 次揮手?

文章目錄 1、TCP 和 UDP 區別?2、TCP/IP 協議涉及哪幾層架構?3、描述下 TCP 連接 4 次揮手的過程?為什么要 4 次揮手?4、計算機插上電源操作系統做了什么?5、Linux 操作系統設備文件有哪些? 1、TCP 和 UDP …

RE2文本匹配調優實戰

引言 在RE2文本匹配實戰的最后,博主說過會結合詞向量以及其他技巧來對效果進行調優,本篇文章對整個過程進行詳細記錄。其他文本匹配系列實戰后續也會進行類似的調優,方法是一樣的,不再贅述。 本文所用到的詞向量可以在Gensim訓練…

2023年度盤點:智能汽車、自動駕駛、車聯網必讀書單

【文末送書】今天推薦幾本自動駕駛領域優質書籍 前言 2023年,智能駕駛和新能源汽車行業仍然有著肉眼可見的新進展。自動駕駛技術繼續嘗試從輔助駕駛向自動駕駛的過渡,更重要的是相關技術成本的下降。根據《全球電動汽車展望2023》等行業報告&#xff0c…

進程、容器與虛擬機的區別

進程、容器與虛擬機 參考:關于進程、容器與虛擬機的區別,你想知道的都在這! 進程、容器與虛擬機的結構圖 進程 介紹 進程是一個正在運行的程序,它是一個個可執行文件的實例。當一個可執行文件從硬盤加載到內存中的時候&#xf…

如何用CHAT寫方案?

問CHAT:幫我寫一份航空無動力樂園的可執行方案 CHAT回復: 方案一:概念及地點篩選 航空無動力樂園是指以航空運動為主題,利用自然地形與風力進行滑翔、跳傘等無動力航空運動的戶外休閑娛樂樂園。鑒于此,首需要確定樂園…

Shiro 框架中如何更新Redis的超時登錄時間?

在Shiro框架中,可以通過實現SessionDAO接口來將會話信息保存到Redis中,并且可以通過實現SessionValidationScheduler接口來定期檢查會話是否過期。因此,要更新Redis中的超時登錄時間,可以按照以下步驟進行操作: 實現Se…

基于SpringBoot+Vue會員制醫療預約服務管理信息系統(Java畢業設計)

點擊咨詢源碼 大家好,我是DeBug,很高興你能來閱讀!作為一名熱愛編程的程序員,我希望通過這些教學筆記與大家分享我的編程經驗和知識。在這里,我將會結合實際項目經驗,分享編程技巧、最佳實踐以及解決問題的…

RT-Thread 工程創建(1)

方式一, 利用已經有的bsp進行創建 距離BearPi IOT Std 板 1. 下載 RT-Thread 官方 Env工具a. 下載 [Env 工具下載](https://www.rt-thread.org/download.html#download-rt-thread-env-tool) , 并解壓縮b. 將env注冊到系統中, 這樣就在右鍵菜單中出現&am…

PHP案例:探究MySQL應用開發喜好的網絡調查

文章目錄 一、知識準備(一)數據庫與表的創建(二)錄入調查選項(三)創建問卷頁面(四)處理投票數據(五)顯示調查結果二、實現步驟(一)創建數據庫與表(二)錄入若干調查選項(三)創建問卷頁面(四)創建調查結果頁面(五)體驗運行結果(六)查看最終生成的HTML代碼很…