Redis高可用集群之rediscluster

2021-09-23 05:49:57 字數 3874 閱讀 6003

本文基於redis-5.0.3版本,環境為mac os,單機器上部署。

redis cluster集群是乙個由多個主從節點集群組成的分布式服務集群,它具有複製、高可用和分片特性。redis cluster集群需要將每個節點設定成集群模式,這種集群模式沒有中心節點,可水平擴充套件,據官方文件可以線性擴充套件到1000節點。redis cluster集群的效能和高可用性均優於之前版本的哨兵模式,且集群配置非常簡單。

集群的最少節點數是3主3從,新建六個資料夾redis8000 redis8001 redis8002 redis8003 redis8004 redis8005,並將redis.conf檔案複製到每個資料夾下,目錄結構如下(redis-cluster是我自己建的集群根目錄)。

我們先來看下原生命令搭建方式,然後再看下使用redis提供的--cluster create命令如何搭建。

1、配置開啟cluster節點

這裡以配置8000埠的例項為例說明,其它例項將檔案中的8000替換為對應埠號即可。

bind 10.40.222.186

port 8000

daemonize yes

pidfile /var/run/redis_8000.pid

logfile "redis8000.log"

dbfilename dump8000.rdb

dir /redis-cluster/redis8000

masterauth 123456

requirepass 123456

#集群模式配置

cluster-enabled yes # 啟動集群模式

cluster-config-file nodes-8000.conf # 集群配置檔案,自動生成 後期勿動

cluster-node-timeout 15000

cluster-replica-validity-factor 10

cluster-require-full-coverage no #部分節點下線的情況下也可以對外提供服務

2、meet依次啟動6個節點,執行cluster nodes命令,此時會發現每個節點都是孤立的。

使用客戶端進入8000節點,執行如下命令,讓各節點相互連通:

cluster meet 10.40.222.186 8001

cluster meet 10.40.222.186 8002

cluster meet 10.40.222.186 8003

cluster meet 10.40.222.186 8004

cluster meet 10.40.222.186 8005

再次執行cluster nodes命令,會發現這些節點聯絡在了一起。

3、指派槽

redis 集群中內建了16384個雜湊槽,當需要在redis 集群中放置乙個key-value時,redis 會先對key使用crc16演算法算出乙個結果,然後把結果對16384求餘數,這樣每個key都會對應乙個編號在0-16383之間的雜湊槽,redis會根據節點數量大致均等的將雜湊槽對映到不同的節點。

這種結構很容易新增或者刪除節點,並且無論是新增刪除或者修改某乙個節點,都不會造成集群不可用的狀態。

1.當需要增加節點時,只需要把其他節點的某些雜湊槽挪到新節點就可以了;

2.當需要移除節點時,只需要把移除節點上的雜湊槽挪到其他節點就行了;

這16384個槽位必須要分配完,本次我們搭建的是3主3從結構,所以使用16384/3 求出每個節點需要分配的槽位(這裡選8000、8001、8002三個節點作為主節點。)

8000: 0-5461 8001:5462-10922 8002:10923-16383

新增槽位命令cluster addslots solt,因為命令一次只能新增乙個槽位,這裡需要借助乙個指令碼命令來幫助我們分配槽位。

addsolt.sh

start=$1

end=$2

port=$3

for slot in `seq $ $`

do echo "slot:$"

/redis-5.0.3/src/redis-cli -h 10.40.222.186 -p $ -a 123456 cluster addslots $

done

將該檔案放在redis-cluster目錄下,依次執行命令

sh addslots.sh 0 5461 8000

sh addslots.sh 5462 10922 8001

sh addslots.sh 10923 16383 8002

執行cluster nodes命令會發現槽位已分配完畢。

4、分配主從

槽位分配完畢後,我們需要把主從關係給建立起來。命令為cluster replicate node-id,其中node-id代表redis例項的run_id。

至此,redis cluster集群搭建完畢。

1、配置開啟cluster節點

初始化資料夾以及配置redis.conf同原生搭建,請參考上文。

2、使用redis-trib.rb命令建立整個redis集群

依次啟動6個節點,確認啟動成功後,執行如下命令:

執行cluster nodes命令,檢視集群節點情況,會發現上面一條命令涵蓋了原生搭建方式的2、3、4步驟。

至此,redis cluster集群搭建完畢。

使用集群模式連線到任意redis例項,然後執行設值命令。通過測試結果可以發現如果設定的key通過crc16演算法不在當前redis例項的槽位範圍,集群會自動重定向,如下圖所示:

redis cluster集群伸縮

Redis 高可用高併發集群配置

高可用 24小時對外提供服務 高併發 同一時間段能處理的請求數 意思是所有的節點都要有乙個主節點 缺點 中心掛了,服務就掛了 中心處理資料的能力有限,不能把節點效能發揮到最大 特點 就是乙個路由作用 特點 去掉路由,我自己來路由 以上通俗的就是 中心化 幾個經過認證的嘉賓在 講話 所有其他人在聽。去...

redis高可用模式到集群

正常redis是單機的,這樣的話會有乙個問題,如果機器出現問題,不能工作了,那麼redis就停止提供服務了,這對也業務來說是不可接受的,redis可提供的解決方案有哨兵 sentinel codis,cluster集群模型。目前主從同步有兩種模式,增量同步和快照同步 增量同步 1.redis講會影響...

高可用集群

高可用集群主要實現自動偵測 auto detect 故障 自動切換 故障轉移 failover 和自動恢復 failback 簡單來說就是,用高可用集群軟體實現故障檢查和故障轉移 故障 備份主機切換 的自動化,當然像負載均衡 dns分發也可提供高可性。active passive 主備模型 acti...