欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis?部署模式詳解

 更新時間:2025年07月28日 08:55:18   作者:曾左  
Redis 支持多種部署模式,主要包括單機模式(Single)、哨兵模式(Sentinel)、集群模式(Cluster)及增強代理集群,分別適用于不同場景,以下是它們的詳細介紹,感興趣的朋友一起看看吧

Redis 部署模式詳解

Redis 支持多種部署模式,主要包括單機模式(Single)、哨兵模式(Sentinel)、集群模式(Cluster)及增強代理集群,分別適用于不同場景,以下是它們的詳細介紹。以下說明僅適用于 Redis 7.0+。

一、單機模式(Single)

1. 簡介

(1)最簡單的部署方式,僅運行單個 Redis 實例。

(2)無高可用性,如果實例崩潰,服務(wù)不可用。

(3)適用場景:開發(fā)環(huán)境。

2. 配置方法

(1)修改 redis.conf

# 綁定 IP(默認僅本地訪問)
bind 0.0.0.0  # 允許遠程訪問
# 設(shè)置密碼(可選)
requirepass yourpassword
# 持久化配置(默認啟用 RDB)
save 900 1      # 15 分鐘內(nèi)至少 1 次修改則保存
save 300 10     # 5 分鐘內(nèi)至少 10 次修改則保存
save 60 10000   # 1 分鐘內(nèi)至少 10000 次修改則保存
# 啟用 AOF(可選)
appendonly yes
appendfilename "appendonly.aof"

(2)啟動 Redis

redis-server /path/to/redis.conf

(3)客戶端連接

redis-cli -h 127.0.0.1 -p 6379 -a yourpassword

二、哨兵模式(Sentinel)

1. 簡介

(1)整體設(shè)計:主從架構(gòu) + 自動故障轉(zhuǎn)移,提供高可用性(HA)。

(2)部署方式:1 個主節(jié)點(Master) + N 個從節(jié)點(Replica)+ M 個 Sentinel 節(jié)點。

(3)適用場景:需要高可用但不需要數(shù)據(jù)分片(水平擴展)的場景。

2. 整體架構(gòu)

組成部分:

(1)1 個主節(jié)點(Master):負責(zé)寫入和數(shù)據(jù)存儲。

(2)N 個從節(jié)點(Replica):復(fù)制主節(jié)點數(shù)據(jù),提供讀能力。

(3)M 個哨兵節(jié)點(Sentinel):監(jiān)控主從狀態(tài),觸發(fā)故障轉(zhuǎn)移。

執(zhí)行流程:

(1)監(jiān)控(Monitoring)

  • 每個 Sentinel 定期檢查 Master 和 Replica 是否存活(默認每秒 1 次)。
  • 若 Master 未響應(yīng)超過 down-after-milliseconds(如 30 秒),Sentinel 標記其為 主觀下線(SDOWN)。

(2)選舉(Leader Election)

  • 當多數(shù) Sentinel(>= quorum 配置值)確認 Master 下線,標記為 客觀下線(ODOWN)。
  • Sentinel 集群通過 Raft 協(xié)議選舉一個 Leader Sentinel 來執(zhí)行故障轉(zhuǎn)移。

(3)故障轉(zhuǎn)移(Failover)

  • Leader Sentinel 選擇一個最優(yōu)的 Replica 提升為新的 Master。
  • 通知其他 Replica 復(fù)制新 Master。
  • 更新客戶端連接信息(通過 +switch-master 事件通知)。

(4)客戶端重定向

  • 客戶端通過 Sentinel 獲取最新的 Master 地址(如 SENTINEL get-master-addr-by-name mymaster)。

交互流程:

3. 配置方法

(1)主節(jié)點配置(redis-master.conf

bind 0.0.0.0
requirepass yourpassword
masterauth yourpassword  # 從節(jié)點訪問主節(jié)點的密碼

(2)從節(jié)點配置(redis-replica.conf

bind 0.0.0.0
requirepass yourpassword
replicaof 127.0.0.1 6379  # 指向主節(jié)點
masterauth yourpassword   # 主節(jié)點密碼

(3)哨兵配置(sentinel.conf

sentinel monitor mymaster 127.0.0.1 6379 2  # 監(jiān)控主節(jié)點,2 表示至少 2 個 Sentinel 同意才觸發(fā)故障轉(zhuǎn)移
sentinel auth-pass mymaster yourpassword    # 主節(jié)點密碼
sentinel down-after-milliseconds mymaster 5000  # 5 秒無響應(yīng)視為下線
sentinel failover-timeout mymaster 60000   # 故障轉(zhuǎn)移超時時間(60 秒)

(4)啟動服務(wù)

# 啟動主節(jié)點
redis-server redis-master.conf
# 啟動從節(jié)點
redis-server redis-replica.conf
# 啟動 Sentinel
redis-sentinel sentinel.conf

(5)驗證故障轉(zhuǎn)移

# 查看主從信息
redis-cli -p 6379 INFO replication
# 手動關(guān)閉主節(jié)點,觀察 Sentinel 日志
tail -f /var/log/redis/sentinel.log

(6)客戶端配置示例

無需配置全部 Sentinel 地址:客戶端只需連接任意一個正常工作的 Sentinel 即可獲取集群狀態(tài)(Sentinel 之間通過 Gossip 協(xié)議自動同步信息)。

推薦配置多個 Sentinel 地址:僅用于容災(zāi),避免某個 Sentinel 不可用時客戶端無法初始化。

Set<String> sentinels = new HashSet<>();
sentinels.add("sentinel1:26379"); // 只需 1 個 Sentinel 即可工作
sentinels.add("sentinel2:26379"); // 額外添加用于容災(zāi)
sentinels.add("sentinel3:26379"); // 非必須,但建議
JedisSentinelPool pool = new JedisSentinelPool("mymaster", sentinels);

4. 特點

(1)高可用:Sentinel 確保主節(jié)點故障時自動切換。

(2)無分片:僅解決 HA 問題,不擴展寫性能。

(3)最少 3 節(jié)點:建議部署 3 個 Sentinel 以避免腦裂問題。

三、集群模式(Cluster)

1. 簡介

(1)整體設(shè)計:支持主從實現(xiàn)高可用,將數(shù)據(jù)分片到 16384 個槽(Slot),每個節(jié)點負責(zé)部分槽,已實現(xiàn)水平擴展。

(2)適用場景:大數(shù)據(jù)量、高并發(fā)、需要橫向擴展的場景。

2. 整體架構(gòu)

組成部分:

(1)Master 節(jié)點(主節(jié)點)

  • 負責(zé)處理客戶端讀寫請求。
  • 管理分配的哈希槽(Slot)范圍(如 Slots 0-5460)。
  • 通過 Gossip 協(xié)議 與其他節(jié)點交換集群狀態(tài)信息。

(2)Slave 節(jié)點(從節(jié)點)

  • 異步復(fù)制對應(yīng) Master 的數(shù)據(jù)(通過 -->|Replication| 箭頭表示)。
  • 當 Master 故障時,Slave 可自動晉升為新的 Master(故障轉(zhuǎn)移)。
  • 可處理讀請求(需客戶端配置 READONLY)。

(3)通信協(xié)議

  • 節(jié)點間通過 Gossip 協(xié)議(PING/PONG 消息)交換集群拓撲、槽分配、節(jié)點狀態(tài)等信息。

數(shù)據(jù)機制:

(1)哈希槽(Slots)分布

  • Redis Cluster 將所有數(shù)據(jù)劃分為 16384 個槽位,每個 Master 負責(zé)一部分槽范圍(如 0-5460)。
  • 客戶端通過 CRC16(key) mod 16384 計算鍵所屬的槽位。

(2)Move 重定向

  • 若客戶端訪問的鍵不屬于當前連接的節(jié)點,節(jié)點會返回 MOVED 錯誤并指引正確節(jié)點。

3. 配置方法

(1)修改 redis.conf(每個節(jié)點)

bind 0.0.0.0
cluster-enabled yes               # 啟用集群模式
cluster-config-file nodes-6379.conf  # 集群節(jié)點配置文件
cluster-node-timeout 15000        # 節(jié)點超時時間(15 秒)
requirepass yourpassword          # 集群密碼
masterauth yourpassword           # 主節(jié)點間認證密碼

(2)啟動所有節(jié)點

redis-server /path/to/redis-6379.conf
redis-server /path/to/redis-6380.conf

(3)創(chuàng)建集群

# 6 個節(jié)點(3 主 3 從)
redis-cli --cluster create \
  127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 \
  127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 \
  # --cluster-replicas 1 表示每個主節(jié)點有 1 個從節(jié)點
  --cluster-replicas 1 -a yourpassword 

(4)驗證集群狀態(tài)

redis-cli -c -p 6379 -a yourpassword
127.0.0.1:6379> CLUSTER INFO
127.0.0.1:6379> CLUSTER NODES

(5)客戶端配置示例

支持集群協(xié)議:客戶端需實現(xiàn) Redis Cluster 的 MOVED/ASK 重定向邏輯(主流客戶端庫已內(nèi)置支持)。

種子節(jié)點配置:只需配置集群中任意 1-2 個節(jié)點地址(客戶端會自動發(fā)現(xiàn)其他節(jié)點)。

認證信息:若集群啟用密碼,需統(tǒng)一所有節(jié)點的密碼。

public class RedisClusterExample {
    public static void main(String[] args) {
        // 1. 配置至少一個集群節(jié)點地址(多個更容錯)
        Set<HostAndPort> nodes = new HashSet<>();
        nodes.add(new HostAndPort("127.0.0.1", 6379));
        nodes.add(new HostAndPort("127.0.0.1", 6380));
        // 2. 創(chuàng)建集群連接(帶密碼)
        JedisCluster jedisCluster = new JedisCluster(nodes, 2000, 2000, 5, "yourpassword");
        // 3. 執(zhí)行命令(自動處理重定向)
        jedisCluster.set("foo", "bar");
        String value = jedisCluster.get("foo");
        System.out.println(value); // 輸出 "bar"
        // 4. 關(guān)閉連接
        jedisCluster.close();
    }
}

4. 特點

(1)在 Redis Cluster 中,擴充主節(jié)點時,必須重新分配槽(Slots),這是由集群的分布式數(shù)據(jù)分片機制決定的。

(2)節(jié)點故障時,槽是否要重新分配,具體場景如下:

場景槽是否重新分配解決方案
主節(jié)點故障,有從節(jié)點否(從節(jié)點繼承槽)自動故障轉(zhuǎn)移
主節(jié)點及所有從節(jié)點故障是(槽處于 FAIL 狀態(tài))手動恢復(fù)或重新分配槽
網(wǎng)絡(luò)分區(qū)導(dǎo)致腦裂可能部分槽不可用等待恢復(fù)或強制修復(fù)

四、增強代理集群模式

上述三種部署模式特點如下:

模式數(shù)據(jù)分片高可用適用場景
單機??開發(fā)測試、低流量生產(chǎn)
哨兵??高可用但不需分片(橫向擴展)
集群??大數(shù)據(jù)量、高并發(fā)、橫向擴展

在實際生產(chǎn)環(huán)境中,推薦采用 Redis 集群模式(Cluster)部署,以確保集群高可用(主從)與水平擴展(數(shù)據(jù)分片),但該模式存在客戶端配置繁瑣、無法兼容歷史配置等問題,所以官方推出了 Redis Cluster Proxy,旨在簡化客戶端與 Redis Cluster 的交互,它允許客戶端像連接單節(jié)點 Redis 一樣訪問 Redis Cluster,無需處理 MOVED/ASK 重定向和集群拓撲變更。

1. Redis Cluster Proxy 核心功能

(1)透明集群訪問

  • 客戶端無需感知集群拓撲,Proxy 自動處理請求路由和重定向。
  • 兼容標準 Redis 協(xié)議,支持所有單節(jié)點命令(除部分集群管理命令如 CLUSTER)。

(2)連接池管理

  • 復(fù)用后端連接,減少客戶端與多個節(jié)點直接建連的開銷。

(3)協(xié)議兼容性

  • 支持舊版 Redis 客戶端(如僅支持單節(jié)點模式的 SDK)。

(4)性能較好

  • 基于 C 開發(fā),性能損耗低(官方測試延遲增加約 10%)。

2. Redis Cluster Proxy 配置方法

(1) 安裝 Redis Cluster Proxy

# 從官方倉庫編譯安裝
git clone https://github.com/RedisLabs/redis-cluster-proxy.git
cd redis-cluster-proxy
make
./src/redis-cluster-proxy -c proxy.conf

(2) 配置文件 proxy.conf

# 綁定端口
bind 0.0.0.0
port 7777
# 后端 Redis Cluster 節(jié)點
cluster-node-timeout 5000
cluster 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003

(3) 啟動 Proxy

./src/redis-cluster-proxy -c proxy.conf

3. Redis Cluster Proxy 部署增強

實際部署 Proxy 時,為確保整個系統(tǒng)高可用,應(yīng)部署多個 Proxy 實例,通過 HAProxy(或 LVS、Envoy)實現(xiàn) Proxy 的高可用與水平擴展,整體架構(gòu)如下:

負載均衡層:

(1)作用:

  • 將請求分發(fā)到多個 Proxy 實例(輪詢/最小連接數(shù))。
  • 健康檢查自動剔除故障 Proxy。

(2)配置示例(以 HAProxy 為例):

frontend redis-proxy
    bind *:6379
    mode tcp
    default_backend proxy_servers
backend proxy_servers
    mode tcp
    balance roundrobin
    server proxy1 192.168.1.100:7777 check inter 2s
    server proxy2 192.168.1.101:7777 check inter 2s

為保證 HAProxy 的高可用,我們一般會部署兩套 HAProxy,通過 Keepalived 互為主備,即增強代理集群,整體架構(gòu)如下:

該集群具備 Redis Cluster 的高可用與水平擴展能力,以及 Redis Cluster Proxy 的透明訪問特性(兼容歷史配置,簡化客戶端調(diào)用)。此外,借助 Keepalived 和 HAProxy(或 LVS、Envoy),實現(xiàn) Redis Cluster Proxy 節(jié)點及集群的高可用,同時簡化了集群調(diào)用代碼的配置復(fù)雜度。

五、總結(jié)與建議

哨兵模式不支持水平擴展,且與集群模式一樣,存在與客戶端配置代碼強耦合,難以兼容歷史配置,無法實現(xiàn)透明訪問等問題。因此在實際使用中,推薦采用 Keepalived + HAProxy(LVS 或 Envoy) + Redis Cluster Proxy + Redis Cluster 增強代理集群模式部署,以實現(xiàn)集群高可用、水平擴展、透明訪問及兼容歷史配置等必要功能。

到此這篇關(guān)于Redis 部署模式詳解的文章就介紹到這了,更多相關(guān)Redis 部署模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redis實現(xiàn)分布式鎖詳解

    Redis實現(xiàn)分布式鎖詳解

    這篇文章主要介紹了redis如何實現(xiàn)分布式鎖,文章中有詳細的示例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2023-04-04
  • Redis?RESP?協(xié)議實現(xiàn)實例詳解

    Redis?RESP?協(xié)議實現(xiàn)實例詳解

    這篇文章主要為大家介紹了Redis?RESP?協(xié)議實現(xiàn)實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Redis緩存常用4種策略原理詳解

    Redis緩存常用4種策略原理詳解

    這篇文章主要介紹了Redis緩存常用4種策略原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • Redis過期數(shù)據(jù)是否會被立馬刪除

    Redis過期數(shù)據(jù)是否會被立馬刪除

    這篇文章主要為大家介紹了Redis過期數(shù)據(jù)會被立馬刪除么的問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • Redisson之lock()和tryLock()的區(qū)別及說明

    Redisson之lock()和tryLock()的區(qū)別及說明

    這篇文章主要介紹了Redisson之lock()和tryLock()的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • redis中如何做到內(nèi)存優(yōu)化

    redis中如何做到內(nèi)存優(yōu)化

    為了提高數(shù)據(jù)處理效率和降低存儲成本,優(yōu)化數(shù)據(jù)結(jié)構(gòu)和采用高效的存儲策略至關(guān)重要,使用最小存儲形式、整數(shù)編碼、Redis的HyperLogLog等方法可以有效減少內(nèi)存占用,Redis6引入的對象壓縮、設(shè)置合理的過期時間、數(shù)據(jù)分片
    2024-09-09
  • redis分布式鎖實現(xiàn)示例

    redis分布式鎖實現(xiàn)示例

    本文主要介紹了redis分布式鎖實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • redis客戶端連接錯誤 NOAUTH Authentication required

    redis客戶端連接錯誤 NOAUTH Authentication required

    本文主要介紹了redis客戶端連接錯誤 NOAUTH Authentication required,詳細的介紹了解決方法,感興趣的可以了解一下
    2021-07-07
  • 全網(wǎng)最完整的Redis新手入門指導(dǎo)教程

    全網(wǎng)最完整的Redis新手入門指導(dǎo)教程

    這篇文章主要給大家介紹了Redis新手入門的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Redis主從配置和底層實現(xiàn)原理解析(實戰(zhàn)記錄)

    Redis主從配置和底層實現(xiàn)原理解析(實戰(zhàn)記錄)

    今天給大家分享Redis主從配置和底層實現(xiàn)原理解析,本文通過實戰(zhàn)項目給大家源碼解析,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-06-06

最新評論