cluster的機制
1.16384 hash slot如有三個master會分配為,hash slot可自行分配調整
- Node A contains hash slots from 0 to 5500.
- Node B contains hash slots from 5501 to 11000.
- Node C contains hash slots from 11001 to 16383
建立六個檔案並複製六個設定檔
cd redis.4.X/
mkdir cluster-test
mkdir cluster-test/7000~7005
cp redis.conf cluster-test/7000~7005
cp src/redis-server cluster-test
各自設定檔設定
vim cluster-test/7000~7005 redis.conf
port 7000~7005
daemonize yes
pidfile /var/run/redis_7000~7005.pid
logfile /var/log/redis_7000~7005.log
儲存資料到disk 60s內有1000keys更動的話(kill會存,kil -9不會存,save ""不會存)
save 60 1000
儲存在disk的檔案
dbfilename dump.rdb
dir /var/lib/redis/7000~7005
資料更動時也會寫一份在 append的檔案
appendonly yes
appendfilename "appendonly.aof"
啟動cluster
cluster-enabled yes
紀錄cluster node資訊的檔案
cluster-config-file nodes-7000~7005.conf
超過此時間則判定pfail node
cluster-node-timeout 15000
多久沒跟master溝通則不會failover成master(ping or command)
cluster-slave-validity-factor 10
如果該機器是master至少會有一個slave,只有一台時不進行migrate
cluster-migration-barrier 1
yes則需所有hash slots都要分配ㄅ0-16383
cluster-require-full-coverage yes
啟動
cluster-test/redis-server cluster-test/7000~7005/redis.conf
先安裝gem然後
gem install redis
建立cluster
src/redis-trib.rb create --replicas 1 192.168.1.202:7000 192.168.1.202:7001 \
> 192.168.1.202:7002 192.168.1.202:7003 192.168.1.202:7004 192.168.1.202:7005
搬移shard
./redis-trib.rb reshard 192.168.1.202:7000
How many slots do you want to move (from 1 to 16384)?
1000
一個指令完成shard搬移
src/redis-trib.rb reshard --from <node-id> --to <node-id> --slots <number of slots> --yes <host>:<port>
failover test
redis-cli -p 7000 debug segfault
查看cluster status
redis-cli -p 7001 cluster nodes
手動切換
強制切不管master是否活著,向其他masters獲取configuration epoch
redis-cli -p 7001(slave) cluster failover force
如force一樣但是以自己目前的configure epoch自己產生新的configuration epoch可能會衝突到其他nodes
redis-cli -p 7001(slave) cluster failover takeover
增加新node
master
src/redis-trib.rb add-node 192.168.1.202:7006 192.168.1.202:7000
slave
src/redis-trib.rb add-node --slave 192.168.1.202:7006 192.168.1.202:7000
指定master
src/redis-trib.rb add-node --slave --master-id 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 127.0.0.1:7006 127.0.0.1:7000
server(slave)內指定master
redis 127.0.0.1:7006> cluster replicate 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e
刪除節點
src/redis-trib del-node 192.168.1.202:7000 `<node-id>`
從cluster table 移除,每個節點都要下這個指令,下完第一台後有一分鐘的時間去每個節點下這指令,ban-list持續一分鐘而已,超過會重新rediscover “cluster foget node-id”這節點
redis-cli -p 7000 cluster forget node-id
留言列表