1. 程式人生 > 其它 >Redis的三種叢集方式

Redis的三種叢集方式

Redis的常用的叢集方式主要有以下3種

1:主從複製

2:哨兵(Sentinel)

3:Cluster

一、主從

主從其實就是一般包含一個主,一個或多個從,從節點從主節點複製資料,可以實現讀寫分離,主節點做寫,從節點做讀。在配置上基本沒什麼要改的。這裡用Linux做演示。

//這裡啟動3個docker,就讓5678當主節點吧 
 docker run -d -p 5678:6379 redis
 docker run -d -p 5679:6379 redis
 docker run -d -p 5677:6379 redis

啟動之後分別進入容器裡面

 

 在主節點裡面新增資料。並且能夠查到

 

 然後我們1去隨便一個從節點裡面去查詢,發現並不能查到,這是為什麼呢?因為還沒有做資料的同步

 

 要做資料的同步需要執行這個命令

slaveof host port

 

 ok,這樣就能查到資料了。然後後面無論在主節點新增資料,都能在從節點查詢到。

如果想知道主節點有多少從節點的話可以使用  這個命令

info replication

 

 主從節點的優缺點:

優點:可以實現讀寫分離,主節點的資料會自動複製到從節點,分擔主節點的壓力

缺點:當主節點宕機了,會導致部分資料未同步。也不具備容錯和回覆功能,無論主節點或者從節點宕機都需要等重啟之後才能使用

二、哨兵模式

其實哨兵模式也是一種主從,只不過增加了哨兵的功能,用於監控主節點的狀態嗎,當主節點宕機之後會進行投票重新選出主節點。

哨兵的宕機分為兩種:主觀宕機(我認為你掉線了)和客觀宕機(我們認為你掉線了),當客觀宕機了之後就會再選舉一個從節點作為主節點,而這又可以分為兩步

1:選哨兵領導

a:我發現了master下線,你們(其他哨兵)當哨兵領導吧

b:其他哨兵沒有選過其他人當領導,那我就是領導了

c:超過一般的其他哨兵同意,我就是領導了

d:如果有多個哨兵同時參選,等待任意時間後重新發起投票,直到選出了領頭的

2:由哨兵領導推舉主節點

選主節點要遵循以下原則

a:健康性:從節點響應的時間
b:完整性:根據從節點備份的完整性,根據資料備份偏移量
c:穩定性:啟動時間週期,心跳檢測
d:如果以上三個條件都相等,則根據節點啟動時分配的run id來分配,runid越小越有可能被選擇為主節點

然後開始吧。哨兵需要做一些配置檔案。

 

 配置檔案

主節點:redis-6379.conf:

port 6379
requirepass 123456

從節點如上,埠分別是6380,6381

port 6380
slaveof 127.0.0.1 6379
masterauth 123456
port 6381
slaveof 127.0.0.1 6379
masterauth 123456

然後是哨兵:

# 其他兩個sentinel節點的埠號分別為26380、26381
port 26379
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 3000
# 必須配置,否則啟動後sentinel節點都會是sdown(主觀宕機)狀態或者odown(客觀宕機)狀態
sentinel auth-pass mymaster 123456

然後啟動就行了。可以把哨兵模式做成這個樣子,把配置檔案都放到Sentinel資料夾裡面然後一鍵啟動(哈哈,剛學的)

 

 啟動程式碼:

@echo off
echo Starting Sentinel:
pushd %~dp0\Sentinel
echo   Targets: 7010-7011
@start "Redis (Sentinel-Target): 7010" /min ..\3.0.503\redis-server.exe redis-7010.conf
@start "Redis (Sentinel-Target): 7011" /min ..\3.0.503\redis-server.exe redis-7011.conf
echo   Monitors: 26379-26381
@start "Redis (Sentinel): 26379" /min ..\3.0.503\redis-server.exe sentinel-26379.conf --sentinel
@start "Redis (Sentinel): 26380" /min ..\3.0.503\redis-server.exe sentinel-26380.conf --sentinel
@start "Redis (Sentinel): 26381" /min ..\3.0.503\redis-server.exe sentinel-26381.conf --sentinel
popd

啟動之後可以發現7011是從節點,7010是主節點

 

 然後通過以下命令進入到26379哨兵檢視主從節點狀態

redis-cli -p 26379

 

 然後我們將主節點7010關閉,可以發現,哨兵就重新將7011選為主節點了(當然這裡只啟動了兩個,可以多啟動結構節點,測試效果更佳),而當之前關閉的主節點重啟之後,就會程式設計從節點

 

 這是重啟後的,會連線到現在的主節點7011

 

 哨兵模式的優缺點

優點:哨兵模式可以算主從模式的升級吧,主從的優點都有,而且哨兵還有監控的功能,當主節點宕機之後哨兵會推選一個健康的從節點做主節點,這樣提高了軟體的可用性

缺點:主從模式的缺點都有,而且配置哨兵啥的比較麻煩,而且在重新選舉主節點期間,無法確定主從,無法工作

三、cluster

叢集採用了多主多從,按照一定的規則進行分片,將資料分別儲存,一定程度上解決了哨兵模式下單機儲存有限的問題。

叢集模式一般是3主3從,且需要ruby輔助搭建。

1:複製5個redis出來,作為3主3從,埠可以自定義

 

2:修改配置:cluster-enabled yes

3:安裝 Ruby

4:安裝redis驅動: 地址:https://rubygems.org/gems/redis/versions/3.3.2

將下載的Redis驅動檔案redis-3.3.2.gem複製到Ruby安裝目錄下(即:C:Ruby30-x64),開啟CMD,執行如下命令:

gem install --local C:Ruby30-x64redis-3.3.2.gem

5:下載叢集管理工具,將副檔名為rb的檔案拷貝到6379資料夾中

6:將6個redis啟動,在6379的資料夾下cmd,輸入命令:

//replicas 1 表示為叢集中的每個主節點建立1個從節點
redis-trib.rb create --replicas 1 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