本文基於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會根據節點數量大致均等的將雜湊槽對映到不同的節點。
這種結構很容易新增或者刪除節點,並且無論是新增刪除或者修改某乙個節點,都不會造成集群不可用的狀態。這16384個槽位必須要分配完,本次我們搭建的是3主3從結構,所以使用16384/3 求出每個節點需要分配的槽位(這裡選8000、8001、8002三個節點作為主節點。)1.當需要增加節點時,只需要把其他節點的某些雜湊槽挪到新節點就可以了;
2.當需要移除節點時,只需要把移除節點上的雜湊槽挪到其他節點就行了;
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...