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

 

arrow
arrow
    全站熱搜

    你不懂的宅 發表在 痞客邦 留言(0) 人氣()