Redis集群三種方式詳解

一、Redis集群三種方式的優缺點

Redis集群主要有三種方式,分別是:一主一從、一主多從、三主三從。它們各自有優缺點:

一主一從:利用主從複製來實現數據備份,當主節點宕機時,從節點可以頂替主節點成為主節點,實現高可用性。這種方式的優點是部署簡單,不需要考慮負載均衡、數據拆分等問題。缺點則是數據容災能力有限,擴展性不夠。

一主多從:一個主節點可以配多個從節點,實現讀寫分離和負載均衡,即主節點可讀寫,從節點只讀。這種方式的優點是可擴展性較好,可根據需求調整從節點數量以滿足負載需求;能夠有效利用多台機器的計算資源,提高系統整體吞吐量;同時主節點出現故障時,從節點之間可以選舉出一台作為主節點,實現高可用性。缺點是容災能力相對一主一從模式也有限,而且主節點過多時容易導致節點間通信負擔加重。

三主三從:與一主多從類似,三個主節點通過Paxos演算法協商確定,主節點之間進行複製,從節點對主節點進行讀寫分離。三主三從的優點是數據容災能力強,可擴展性較好,同時也能夠容忍多個主節點之間出現故障,具備高可用性。

二、Redis集群三種方式的配置

Redis集群的三種方式都需要在配置文件redis.conf中進行相應的配置。

1、一主一從配置

# Master節點配置
port 6379
daemonize yes
bind 127.0.0.1
pidfile /var/run/redis_6379.pid
loglevel notice
logfile /var/log/redis/redis_6379.log
dir /var/lib/redis/6379
requirepass xyqzyh5678

# Slave節點配置
slaveof 127.0.0.1 6379
port 6380
daemonize yes
bind 127.0.0.1
pidfile /var/run/redis_6380.pid
loglevel notice
logfile /var/log/redis/redis_6380.log
dir /var/lib/redis/6380

2、一主多從配置

# Master節點配置
port 6379
daemonize yes
bind 127.0.0.1
pidfile /var/run/redis_6379.pid
loglevel notice
logfile /var/log/redis/redis_6379.log
dir /var/lib/redis/6379
requirepass xyqzyh5678

# Slave節點配置
slaveof 127.0.0.1 6379
port 6380
daemonize yes
bind 127.0.0.1
pidfile /var/run/redis_6380.pid
loglevel notice
logfile /var/log/redis/redis_6380.log
dir /var/lib/redis/6380

slaveof 127.0.0.1 6379
port 6381
daemonize yes
bind 127.0.0.1
pidfile /var/run/redis_6381.pid
loglevel notice
logfile /var/log/redis/redis_6381.log
dir /var/lib/redis/6381

3、三主三從配置

# 節點1的配置
port 7001
daemonize yes
pidfile /var/run/redis_7001.pid
cluster-enabled yes
cluster-config-file /etc/redis/7001.conf
cluster-node-timeout 15000
appendonly yes

# 節點2的配置
port 7002
daemonize yes
pidfile /var/run/redis_7002.pid
cluster-enabled yes
cluster-config-file /etc/redis/7002.conf
cluster-node-timeout 15000
appendonly yes

# 節點3的配置
port 7003
daemonize yes
pidfile /var/run/redis_7003.pid
cluster-enabled yes
cluster-config-file /etc/redis/7003.conf
cluster-node-timeout 15000
appendonly yes

# 節點4的配置
port 7004
daemonize yes
pidfile /var/run/redis_7004.pid
cluster-enabled yes
cluster-config-file /etc/redis/7004.conf
cluster-node-timeout 15000
appendonly yes

# 節點5的配置
port 7005
daemonize yes
pidfile /var/run/redis_7005.pid
cluster-enabled yes
cluster-config-file /etc/redis/7005.conf
cluster-node-timeout 15000
appendonly yes

# 節點6的配置
port 7006
daemonize yes
pidfile /var/run/redis_7006.pid
cluster-enabled yes
cluster-config-file /etc/redis/7006.conf
cluster-node-timeout 15000
appendonly yes

三、Redis集群三種方式原理

1、一主一從原理:主從複製

主從複製是Redis提供的一種高可用性方案,它的實現原理是主節點將自身的數據以非同步方式複製到從節點中,同時從節點可以在不影響主節點的情況下,對複製過來的數據進行讀取操作。

主從複製的實現利用的是Redis的RDB文件,當主節點執行寫操作時,Redis會將同步方式同時將命令更新到AOF文件和內存資料庫中,隨後向綁定的所有從節點發送同步命令,從節點根據同步命令更新自己的內存資料庫。

2、一主多從原理:主從複製+讀寫分離

一主多從結構與一主一從類似,在此不再詳細闡述。它的讀寫分離實現原理是將寫操作全部交給主節點處理,而讀操作則可以由主節點和從節點共同承擔。當從節點發起讀操作時,Redis會將同步命令發送到主節點,讓主節點將最新的數據同步到從節點中,然後從節點就能夠對數據進行讀操作了。

3、三主三從原理:Paxos演算法實現數據同步

三主三從模式是Redis集群的最佳實踐,它使用Paxos演算法實現數據同步,從而保證在任意節點故障或網路分區的情況下,系統仍然能夠正常運行。

Paxos演算法是由Leslie Lamport於1990年提出的一種基於消息傳遞的一致性演算法。它的實質是通過消息傳遞機制,保證多個進程在數值上的一致性。在Redis中,三個主節點通過Paxos演算法協商確定數據的一致性,從節點對主節點進行讀寫分離,每個主節點都會將數據複製到其他兩個主節點和它們的從節點,從而實現數據的同步和備份。

四、Redis集群節點

在Redis集群中,節點可以分為主節點和從節點兩種類型。主節點負責數據的存儲和管理,從節點則通過主節點進行數據的同步和讀寫分離。

Redis集群中有三種角色,分別是:主節點、從節點和無狀態節點。在三主三從結構中,每個主節點綁定兩個從節點,同時充當無狀態節點以處理請求。

主節點的職責是負責數據的寫入和同步。當它的一個從節點崩潰時,它會自動選出一個從節點充當備份。

從節點則負責數據的讀取,並通過心跳機制與主節點保持同步。當主節點故障時,從節點之間會選舉出一台作為新的主節點,其他從節點則成為新的從節點。

無狀態節點(Non-Data-Sharing Node)既不保存數據,也不影響數據的分割和分發,僅用於處理客戶端發來的請求。每個主節點在接收到請求時,會通過哈希函數將其轉發給對應的無狀態節點,該節點負責將請求的變更同步到主節點和從節點中。

五、Redis集群搭建

1、Redis單節點搭建

首先安裝Redis並執行以下命令啟動服務:

sudo apt install redis-server
sudo systemctl start redis-server

然後在redis.conf配置文件中添加以下內容:

dbfilename dump.rdb
appendonly yes

運行以下命令重啟Redis:

sudo systemctl restart redis-server

至此,Redis單節點搭建完成。

2、Redis三主三從集群搭建

首先下載安裝Redis,並將其安裝在三個不同的伺服器上。安裝完成後在每個節點的redis.conf配置文件中添加以下內容:

port 7000
pidfile /var/run/redis_7000.pid
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
appendonly yes

然後啟動三個節點的Redis,使用以下命令創建集群:

redis-cli --cluster create 192.168.1.2:7000 192.168.1.3:7000 192.168.1.4:7000

在通過正常的Redis客戶端進行連接和操作前,需要先進行節點驗證:

redis-cli --cluster check 192.168.1.2:7000
redis-cli --cluster check 192.168.1.3:7000
redis-cli --cluster check 192.168.1.4:7000

至此,Redis三主三從集群搭建完成。

六、Redis集群原理

Redis集群的工作方式是,將數據按一定規則分散到多個節點上,同時每個節點維護一份部分數據的拷貝,當需要訪問數據時,會先計算出該數據應該在哪個節點上,然後進行訪問。

Redis集群內部採用的哈希槽分配演算法,將哈希值在0~16383之間的整數劃分為16384個桶,每個桶對應一個槽。當執行SET、GET等操作時,根據操作的key計算出哈希值,並根據哈希值計算出對應的槽,然後將數據存儲在該槽對應的節點上。如果對應節點宕機,則由備份節點接管槽的數據。

Redis集群的節點之間使用Gossip通信,用於集群的成員發現和狀態更新。每個節點都會向集群中的一部分節點發送PING消息,在收到PING消息時,節點會回復PONG消息,用於確認集群中的節點是否正常工作。當節點感知到集群中有節點宕機時,會將宕機信息廣播給其他節點。

七、Redis Cluster集群

Redis Cluster是Redis官方提供的集群方案,它基於Redis的多節點模型,以一定規則將數據分散到多個節點上,從而保證數據的高可用性和負載均衡。

Redis Cluster的主要特點是:

  • 分散式:數據在多個節點之間分

    原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/271294.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-16 14:54
下一篇 2024-12-16 14:54

相關推薦

  • Vb運行程序的三種方法

    VB是一種非常實用的編程工具,它可以被用於開發各種不同的應用程序,從簡單的計算器到更複雜的商業軟體。在VB中,有許多不同的方法可以運行程序,包括編譯器、發布程序以及命令行。在本文中…

    編程 2025-04-29
  • Python程序的三種基本控制結構

    控制結構是編程語言中非常重要的一部分,它們指導著程序如何在不同的情況下執行相應的指令。Python作為一種高級編程語言,也擁有三種基本的控制結構:順序結構、選擇結構和循環結構。 一…

    編程 2025-04-29
  • Python緩存圖片的處理方式

    本文將從多個方面詳細闡述Python緩存圖片的處理方式,包括緩存原理、緩存框架、緩存策略、緩存更新和緩存清除等方面。 一、緩存原理 緩存是一種提高應用程序性能的技術,在網路應用中流…

    編程 2025-04-29
  • 使用Go-Redis獲取Redis集群內存使用率

    本文旨在介紹如何使用Go-Redis獲取Redis集群的內存使用率。 一、Go-Redis簡介 Go-Redis是一個用於連接Redis伺服器的Golang客戶端。它支持Redis…

    編程 2025-04-28
  • Python三種基本輸入元素

    本文將從多個方面對於Python三種基本輸入元素進行詳細的闡述並給出代碼示例。 一、Python三種基本輸入元素解答 Python三種基本輸入元素包括命令行參數、標準輸入和文件輸入…

    編程 2025-04-28
  • Python在線編輯器的優勢與實現方式

    Python在線編輯器是Python語言愛好者的重要工具之一,它可以讓用戶方便快捷的在線編碼、調試和分享代碼,無需在本地安裝Python環境。本文將從多個方面對Python在線編輯…

    編程 2025-04-28
  • Java表單提交方式

    Java表單提交有兩種方式,分別是get和post。下面我們將從以下幾個方面詳細闡述這兩種方式。 一、get方式 1、什麼是get方式 在get方式下,表單的數據會以查詢字元串的形…

    編程 2025-04-27
  • 用Pythonic的方式編寫高效代碼

    Pythonic是一種編程哲學,它強調Python編程風格的簡單、清晰、優雅和明確。Python應該描述為一種語言而不是一種編程語言。Pythonic的編程方式不僅可以使我們在編碼…

    編程 2025-04-27
  • Java多版本支持實現方式

    本文將從以下幾個方面闡述如何實現Java多版本支持,並給出可行的代碼示例。 一、多版本Java環境概述 Java是一門跨平台的編程語言,但是在不同的應用場景下,可能需要使用不同版本…

    編程 2025-04-27
  • SpringBoot Get方式請求傳參用法介紹

    本文將從以下多個方面對SpringBoot Get方式請求傳參做詳細的闡述,包括URL傳參、路徑傳參、請求頭傳參、請求體傳參等,幫助讀者更加深入地了解Get請求方式下傳參的相關知識…

    編程 2025-04-27

發表回復

登錄後才能評論