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

Redis主從+哨兵集群部署詳解

 更新時間:2025年10月09日 16:41:55   作者:ikun·  
本文介紹Redis哨兵模式,實現(xiàn)主從節(jié)點自動監(jiān)控與故障轉(zhuǎn)移,確保高可用,詳解部署主從及哨兵集群的配置與驗證流程,注意事項包括主機名、IP映射和腳本區(qū)分

一、 哨兵模式介紹

在一主多從的 Redis 架構(gòu)中,從節(jié)點可以起到數(shù)據(jù)冗余備份和讀寫分離的作用。

如果主節(jié)點遇到故障導致無法提供服務(wù)時,可以采用手動方式將其一個從節(jié)點提升為主節(jié)點,保證 Redis 主從能夠正常工作。

主從切換通過手動完成比較耗時、費力,并且影響 Redis 正常服務(wù)。為此,Reids 提供了哨兵功能,實現(xiàn)了自動化的系統(tǒng)監(jiān)控和故障恢復(fù)功能。

1. 概述

哨兵(Sentine1),主要負責監(jiān)控主從節(jié)點運行是否正常,以及當主節(jié)點出現(xiàn)故障時自動將一個從節(jié)點轉(zhuǎn)換為新的主節(jié)點。

哨兵是一個獨立的進程。,最基礎(chǔ)的通用哨兵架構(gòu)如下所示:

哨兵最基礎(chǔ)架構(gòu)由兩部分組成,包括哨兵節(jié)點和數(shù)據(jù)節(jié)點。

其中,哨兵節(jié)點是特殊的 Redis 節(jié)點,并不存儲數(shù)據(jù),出于高可用方面考慮,哨兵架構(gòu)中通常都是多個哨兵節(jié)點共同提供服務(wù)。

數(shù)據(jù)節(jié)點用于存儲 Redis 數(shù)據(jù)。包括主節(jié)點和從節(jié)點。

2. 實現(xiàn)原理

哨兵節(jié)點的配置文件中需要添加如下配置:

sentinel monitor master-name ip port quorum

其中,sentinel monitor 是配置哨兵的命令,接著是主節(jié)點的名稱、IP 地址和端口號,最后的 quorum 用來表示執(zhí)行故障恢復(fù)操作之前至少需要幾個哨兵節(jié)點同意。一個哨兵節(jié)點可以同時監(jiān)控多個 Reids 主從系統(tǒng),多個哨兵節(jié)點也可以同時監(jiān)控同一個 Redis 主從系統(tǒng)。

配置修改好之后,就可以啟動哨兵節(jié)點了。當哨兵節(jié)點啟動時,會與要監(jiān)控的主數(shù)據(jù)庫(master)建立連接,連接建立之后,哨兵會定時地執(zhí)行以下3個任務(wù):

  • 每 10 秒哨兵會向主節(jié)點和從節(jié)點發(fā)送 info 命令。
  • 每2秒哨兵會向主節(jié)點和從節(jié)點發(fā)送自己的信息。
  • 每1秒哨兵會向主節(jié)點、從節(jié)點和其他哨兵發(fā)送 ping 命令。

這3個定時任務(wù)貫穿哨兵進程的整個生命周期,非常重要。

當哨兵節(jié)點啟動后,會向主節(jié)點發(fā)送 info 命令,通過解析返回的結(jié)果可以獲得從節(jié)點的列表,然后與每個從節(jié)點建立連接。

之后,哨兵會每隔 10 秒定時向所有已知主從節(jié)點發(fā)送 info 命令來獲取西悉尼更新并進行相應(yīng)的操作。

接下來哨兵會向主從節(jié)點發(fā)送信息與同樣監(jiān)控主從節(jié)點的哨兵分享自己的信息。當其他哨兵節(jié)點收到信息后,會判斷發(fā)送信息的哨兵是不是新發(fā)現(xiàn)的哨兵,如果是則將其加入已發(fā)現(xiàn)的哨兵列表中并創(chuàng)建到該節(jié)點的連接,這樣就實現(xiàn)了自動發(fā)現(xiàn)從節(jié)點和其他哨兵節(jié)點。

之后哨兵要做的就是監(jiān)控主從節(jié)點是否停止服務(wù),通過發(fā)送ping 命令來實現(xiàn)的。

ping 命令是每隔1秒發(fā)送一次,如果被 ping 的節(jié)點超時一定的時間沒有回復(fù),哨兵就會認為其主觀下線,是哨兵節(jié)點“主觀地” 判斷下線。

如果該節(jié)點是主節(jié)點,則哨兵會進一步判斷是否需要對其進行故障恢復(fù),具體過程如下:該哨兵節(jié)點會詢問其他哨兵節(jié)點來了解它們是否也認為該主節(jié)點已經(jīng)主觀下線,如果達到指定數(shù)量,則哨兵會認為其客觀下線,此時各哨兵節(jié)點會進行協(xié)商,選舉出一個領(lǐng)導者哨兵節(jié)點,并由該領(lǐng)導者哨兵節(jié)點對其進行故障轉(zhuǎn)移操作。

領(lǐng)導者哨兵節(jié)點執(zhí)行故障恢復(fù)可以保證同一時間內(nèi)只有一個哨兵節(jié)點在執(zhí)行故障恢復(fù),避免多個節(jié)點同時操作。選舉領(lǐng)導者哨兵的過程適用了 Raft 算法,具體的過程如下:

  • 發(fā)現(xiàn)主節(jié)點客觀下線的哨兵節(jié)點(簡稱為A)向每個哨兵節(jié)點發(fā)送命令要求對方選自己成為領(lǐng)導者哨兵。
  • 如果目標哨兵節(jié)點沒有選過其他哨兵,則會同意將A設(shè)置為領(lǐng)導者哨兵。
  • 如果A發(fā)現(xiàn)有超過一半并且超過 quorum 參數(shù)值的哨兵節(jié)點同意選自己成為領(lǐng)導者哨兵,那么A將成為領(lǐng)導者哨兵。
  • 當有多個哨兵同時參選時,有可能會出現(xiàn)沒有任何節(jié)點當選的可能。如果出現(xiàn)此種情況,那么會等待一個隨機時間重新開始下一輪參選,直到選出領(lǐng)導者哨兵為止。

選出領(lǐng)導者哨兵后,領(lǐng)導者哨兵會對主節(jié)點進行故障轉(zhuǎn)移恢復(fù)?;謴?fù)過程可以分為以下3個步驟:

  • 在所有從節(jié)點中挑選一個節(jié)點作為新的主節(jié)點。挑選的基準是,首先過濾掉不健康的從節(jié)點;然后選擇優(yōu)先級最高的從節(jié)點;如果優(yōu)先級無法區(qū)分,則選擇賦值偏移量最大的從節(jié)點,如果仍無法區(qū)分,則選擇runid 最小的從節(jié)點。
  • 更新主從狀態(tài)。通過 slaveof no one 命令,讓選出來的從節(jié)點成為主節(jié)點,通過 slaveof 命令讓其他節(jié)點成為其從節(jié)點。
  • 將已經(jīng)停止服務(wù)的舊的主節(jié)點更新為新的主節(jié)點的從節(jié)點,當此節(jié)點恢復(fù)后,能夠自動以從節(jié)點的身份繼續(xù)服務(wù)。

二、 實驗步驟

實驗需要環(huán)境

操作系統(tǒng)配置IP主機名角色
0penEuler242C4G192.168.10.104sentine101哨兵節(jié)點
0penEuler242C4G192.168.10.105sentine102哨兵節(jié)點
0penEuler242C4G192.168.10.106sentine103哨兵節(jié)點
0penEuler242C4G192.168.10.101master主節(jié)點
0penEuler242C4G192.168.10.102slave0l從節(jié)點
0penEuler242C4G192.168.10.103slave02從節(jié)點

1. 基礎(chǔ)環(huán)境配置(所有節(jié)點)

(1) 關(guān)閉防火墻、SELinux。

systemctl stop firewalld  
systemctl disable firewalld  

(2) 設(shè)置主機名

  • 主節(jié)點
hostnamectl set-hostname master  
  • 從節(jié)點 1
hostnamectl set-hostname slave01  
  • 從節(jié)點 2
hostnamectl set-hostname slave02  
  • 哨兵節(jié)點 1
hostnamectl set-hostname sentine101  
  • 哨兵節(jié)點 2
hostnamectl set-hostname sentine102  
  • 哨兵節(jié)點 3
hostnamectl set-hostname sentine103  

2. 部署 Redis 主從集群

操作節(jié)點:master、slave01、slave02

2.1 Redis 服務(wù)安裝(通用步驟,三節(jié)點均執(zhí)行)

# 安裝編譯依賴  
yum -y install gcc zlib-devel

# 解壓&編譯安裝  
tar -zxvf redis-6.2.4.tar.gz -C /usr/src/  
cd /usr/src/redis-6.2.4/  
make && make PREFIX=/usr/local/redis install  

# 配置軟鏈接  
ln -s /usr/local/redis/bin/* /usr/local/bin/  

# 準備配置文件目錄  
mkdir /etc/redis  
cp /usr/src/redis-6.2.4/redis.conf /etc/redis/6379.conf  

2.2 編寫 Systemd 服務(wù)腳本(通用步驟,三節(jié)點均執(zhí)行)

cat > /etc/systemd/system/redis.service << EOF  
[Unit]  
Description=Redis  
After=network.target  

[Service]  
Type=forking  
ExecStart=/usr/local/redis/bin/redis-server /etc/redis/6379.conf  

[Install]  
WantedBy=multi-user.target  
EOF  

2.3 修改 Redis 配置文件(分節(jié)點)

(1)主節(jié)點

vim /etc/redis/6379.conf  
# 修改內(nèi)容:  
bind 127.0.0.1 192.168.10.101  
port 6379  
daemonize yes  
pidfile /var/run/redis_6379.pid  
loglevel notice  
logfile "/var/log/redis_6379.log"  

# 啟動服務(wù)  
systemctl daemon-reload  
systemctl start redis  
systemctl enable redis  

# 驗證端口  
netstat -anpt | grep 6379  

(2)從節(jié)點 1

vim /etc/redis/6379.conf  
# 修改內(nèi)容:  
bind 127.0.0.1 192.168.10.102  
port 6379  
daemonize yes  
pidfile /var/run/redis_6379.pid  
loglevel notice  
logfile "/var/log/redis_6379.log"  

# 啟動服務(wù)  
systemctl daemon-reload  
systemctl start redis  
systemctl enable redis  

# 驗證端口  
netstat -anpt | grep 6379  

(3)從節(jié)點 2

vim /etc/redis/6379.conf  
# 修改內(nèi)容:  
bind 127.0.0.1 192.168.10.103  
port 6379  
daemonize yes  
pidfile /var/run/redis_6379.pid  
loglevel notice  
logfile "/var/log/redis_6379.log"  

# 啟動服務(wù)  
systemctl daemon-reload  
systemctl start redis  
systemctl enable redis  

# 驗證端口  
netstat -anpt | grep 6379  

2.4 配置主從關(guān)系(從節(jié)點:slave01、slave02)

vim /etc/redis/6379.conf  
# 添加:  
replicaof 192.168.10.101 6379  

# 重啟生效  
systemctl restart redis  

2.5 驗證主從狀態(tài)

(1) 主節(jié)點驗證

redis-cli  
127.0.0.1:6379> info replication  
# 預(yù)期:role=master,connected_slaves=2(slave01、slave02)  

(2) 從節(jié)點驗證

redis-cli  
127.0.0.1:6379> info replication  
# 預(yù)期:role=slave,master_host=192.168.10.101,master_link_status=up  

3. 部署 Redis 哨兵集群

操作節(jié)點:sentine101、sentine102、sentine103(步驟相同,以sentine101為例)

3.1 哨兵服務(wù)安裝(通用步驟,三節(jié)點均執(zhí)行)

# 安裝依賴(若未裝)  
yum -y install gcc gcc-c++ make  

# 解壓&編譯(同主從)  
tar -zxvf redis-6.2.4.tar.gz -C /usr/src/  
cd /usr/src/redis-6.2.4/  
make && make install  

# 準備配置文件  
mkdir /etc/redis  
cp /usr/src/redis-6.2.4/redis.conf /etc/redis/6379.conf  

3.2 修改哨兵配置文件(分節(jié)點,三節(jié)點均執(zhí)行)

vim /etc/redis/6379.conf  
# 添加:  
sentinel monitor master 192.168.10.101 6379 2  # 監(jiān)控主節(jié)點,quorum=2  
bind 0.0.0.0  # 允許所有IP通信  
daemonize yes  # 后臺運行  

3.3 編寫哨兵 Sytemd 服務(wù)腳本(通用步驟,三節(jié)點均執(zhí)行)

cat > /etc/systemd/system/redis.service << EOF  
[Unit]  
Description=Redis  
After=network.target  

[Service]  
Type=forking  
ExecStart=/usr/local/bin/redis-sentinel /etc/redis/6379.conf  # 啟動哨兵  

[Install]  
WantedBy=multi-user.target  
EOF  

3.4 啟動哨兵服務(wù)(三節(jié)點均執(zhí)行)

systemctl daemon-reload  
systemctl start redis  
systemctl enable redis  

# 驗證進程(查看redis-sentinel)  
ps aux | grep redis  
# 預(yù)期:/usr/local/bin/redis-sentinel 0.0.0.0:6379 [sentinel]  

3.5 查看哨兵狀態(tài)(任意哨兵節(jié)點執(zhí)行)

redis-cli  
127.0.0.1:6379> info sentinel  
# 預(yù)期:sentinel_masters=1,master0=192.168.10.101:6379,slaves=2,sentinels=3  

3.6 故障轉(zhuǎn)移測試 (模擬主節(jié)點故障)

(1) 停止主節(jié)點服務(wù)

systemctl stop redis  

(2) 觀察哨兵自動切換

redis-cli  
127.0.0.1:6379> info sentinel  
# 預(yù)期:原主節(jié)點降級為從,某從節(jié)點(slave01/slave02)升級為主  

關(guān)鍵注意事項:

  • 主機名一致性:確保所有哨兵節(jié)點的主機名嚴格為 sentine101、sentine102、sentine103,避免拼寫錯誤。
  • IP 映射:所有配置中涉及主節(jié)點 IP 的地方(如 replicaof、sentinel monitor),必須替換為 192.168.10.101。
  • 服務(wù)腳本區(qū)分:Redis 主從和哨兵的 Systemd 腳本名稱均為 redis.service,但啟動命令不同(主從用 redis-server,哨兵用 redis-sentinel),需注意區(qū)分。

按此步驟執(zhí)行,即可完成 主機名修正后 的 Redis 主從 + 哨兵集群部署。

總結(jié)

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

相關(guān)文章

  • redis 主從備份及其主備切換的操作

    redis 主從備份及其主備切換的操作

    這篇文章主要介紹了redis 主從備份及其主備切換的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • redis list類型命令的實現(xiàn)

    redis list類型命令的實現(xiàn)

    本文主要介紹了redis list類型命令的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • Redis實現(xiàn)分布式鎖全過程

    Redis實現(xiàn)分布式鎖全過程

    文章介紹Redis實現(xiàn)分布式鎖的方法,包括使用SETNX和EXPIRE命令確?;コ庑耘c防死鎖,Redisson客戶端提供的便捷接口,以及Redlock算法通過多節(jié)點共識提高容錯性,同時強調(diào)需合理設(shè)置鎖過期時間、唯一標識,并注意網(wǎng)絡(luò)分區(qū)問題
    2025-08-08
  • Redis sort 排序命令詳解

    Redis sort 排序命令詳解

    這篇文章主要介紹了Redis sort 排序命令詳解,本文講解了默認排序命令、排序方式命令、BY語法、GET用法示例等內(nèi)容,需要的朋友可以參考下
    2015-07-07
  • redis加鎖的幾種方式匯總

    redis加鎖的幾種方式匯總

    這篇文章主要介紹了redis加鎖的幾種方式匯總,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Redis中漸進式命令scan詳解與使用

    Redis中漸進式命令scan詳解與使用

    在Redis日常開發(fā)中,我們經(jīng)常需要遍歷數(shù)據(jù)庫中的鍵或集合中的元素,scan命令是Redis 2.8版本引入的漸進式遍歷方案,解決了keys命令在大數(shù)據(jù)量下阻塞Redis服務(wù)的問題,下面就來介紹一下該命令的使用,感興趣的可以了解一下
    2025-11-11
  • Redis使用ZSET實現(xiàn)消息隊列使用小結(jié)

    Redis使用ZSET實現(xiàn)消息隊列使用小結(jié)

    這篇文章主要介紹了Redis使用ZSET實現(xiàn)消息隊列使用總結(jié),本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-03-03
  • 如何使用gradle將java項目推送至maven中央倉庫

    如何使用gradle將java項目推送至maven中央倉庫

    本文主要介紹了使用gradle將java項目推送至maven中央倉庫,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • redis的scan使用方法及在spring框架使用詳解

    redis的scan使用方法及在spring框架使用詳解

    Redis的SCAN命令是一種非阻塞的迭代器,用于逐步遍歷數(shù)據(jù)庫中的鍵,特別適合處理大數(shù)據(jù)庫,下面詳細介紹其使用方法及在Spring框架中的集成方式,感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • Redis動態(tài)字符串SDS的實現(xiàn)

    Redis動態(tài)字符串SDS的實現(xiàn)

    SDS在Redis中是實現(xiàn)字符串對象的工具,本文主要介紹了Redis動態(tài)字符串SDS的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-11-11

最新評論

康平县| 克拉玛依市| 哈尔滨市| 炎陵县| 高台县| 梁河县| 浦城县| 成武县| 都昌县| 大港区| 固原市| 岳阳县| 新巴尔虎右旗| 仪陇县| 滨海县| 嘉义县| 自治县| 启东市| 广水市| 股票| 韶关市| 太康县| 龙里县| 东港市| 盱眙县| 咸宁市| 滕州市| 普宁市| 云阳县| 南华县| 修水县| 宁陕县| 岗巴县| 察隅县| 利津县| 望都县| 喀喇沁旗| 河津市| 正宁县| 广东省| 新泰市|