啟動(dòng)6臺(tái)redis容器實(shí)例
docker run -d --name redis-node-1 --net host --privileged -v /usr/local/zl/tools/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381
docker run -d --name redis-node-2 --net host --privileged -v /usr/local/zl/tools/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382
docker run -d --name redis-node-3 --net host --privileged -v /usr/local/zl/tools/share/redis-node-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383
docker run -d --name redis-node-4 --net host --privileged -v /usr/local/zl/tools/share/redis-node-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384
docker run -d --name redis-node-5 --net host --privileged -v /usr/local/zl/tools/share/redis-node-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385
docker run -d --name redis-node-6 --net host --privileged -v /usr/local/zl/tools/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386
執(zhí)行docker ps查看啟動(dòng)的容器實(shí)例
配置
進(jìn)入一臺(tái)reids容器屠凶,執(zhí)行命令:docker exec -it redis-node-1 /bin/bash,然后執(zhí)行創(chuàng)建redis集群的命令
測(cè)試
登錄redis-node-1,執(zhí)行docker exec -it redis-node-1 /bin/bash進(jìn)入容器肆资,執(zhí)行登錄命令redis-cli -p 6381 -c 記得加上-c矗愧,以集群方式連接,不加-c表示以單機(jī)形式連接郑原,有時(shí)設(shè)置key會(huì)報(bào)錯(cuò)
擴(kuò)容
啟動(dòng)兩臺(tái)redis容器作為擴(kuò)容的一主一從
docker run -d --name redis-node-7 --net host --privileged -v /usr/local/zl/tools/share/redis-node-7:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387
docker run -d --name redis-node-8 --net host --privileged -v /usr/local/zl/tools/share/redis-node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388
添加節(jié)點(diǎn)進(jìn)去集群
登錄redis-node-1容器唉韭,執(zhí)行命令redis-cli --cluster check 127.0.0.1:6381查看集群slot的分布情況,3主3從
執(zhí)行命令docker exec -it redis-node-7 /bin/bash , 進(jìn)入redis-node-7犯犁,執(zhí)行命令redis-cli --cluster add-node 127.0.0.1:6387 127.0.0.1:6381
執(zhí)行執(zhí)行redis-cli --cluster check 127.0.0.1:6381查看集群的狀態(tài)属愤,發(fā)現(xiàn)master數(shù)量變?yōu)?,但是6387暫時(shí)還沒(méi)有分配槽位
重新分配槽位
執(zhí)行命令redis-cli --cluster reshard 127.0.01:6381酸役,執(zhí)行后住诸,會(huì)提示需要移動(dòng)slot的個(gè)數(shù),16384/4=4096簇捍,平均分的話一個(gè)節(jié)點(diǎn)4096個(gè)槽位只壳,然后在輸入移動(dòng)到的節(jié)點(diǎn)的ID也就是node-7的節(jié)點(diǎn)ID:e72e099426014951e94dff62aa680f6a51ab6a31,來(lái)源節(jié)點(diǎn)輸入:all
再次執(zhí)行命令:redis-cli --cluster check 127.0.0.1:6381檢查集群slots的分配情況
給6387添加從節(jié)點(diǎn)
執(zhí)行命令redis-cli --cluster add-node 127.0.01:6388 127.0.0.1:6387 --cluster-slave --cluster-master-id e72e099426014951e94dff62aa680f6a51ab6a31
e72e099426014951e94dff62aa680f6a51ab6a31為6387主節(jié)點(diǎn)的ID
再次檢查集群狀態(tài)
執(zhí)行命令redis-cli --cluster check 127.0.0.1:6381暑塑,發(fā)現(xiàn)變成了4主4從
縮容
方案:先刪除6388吼句,分配6387上的slot到其他節(jié)點(diǎn),刪除6387節(jié)點(diǎn)
查看6387以及6388節(jié)點(diǎn)
執(zhí)行命令redis-cli --cluster check 127.0.0.1:6381事格,6387節(jié)點(diǎn)ID:e72e099426014951e94dff62aa680f6a51ab6a31 6388節(jié)點(diǎn)ID: 19bc4cf11ce605c747dff70b83ee4c2547a838df
刪除6388
redis-cli --cluster del-node 127.0.0.1:6388 19bc4cf11ce605c747dff70b83ee4c2547a838df
查看集群還剩下4主3從
重新分配槽號(hào)
redis-cli --cluster reshard 127.0.0.1:6381
需要分配4096個(gè)槽位惕艳,這里使用6381這個(gè)節(jié)點(diǎn)來(lái)接收所有的槽位搞隐,節(jié)點(diǎn)ID為e9ade431c79ef38649c160f8f3ee301c4c7e5883
source node:來(lái)源表示6387節(jié)點(diǎn)ID的槽點(diǎn),e72e099426014951e94dff62aa680f6a51ab6a31
重新檢查集群
reids-cli --cluster check 127.0.01:6381
發(fā)現(xiàn)4個(gè)M 3個(gè)S远搪,但是發(fā)現(xiàn)6387上的slot變?yōu)榱?
刪除6387節(jié)點(diǎn)
redis-cli --cluster del-node 127.0.0.1:6381 e72e099426014951e94dff62aa680f6a51ab6a31
刪除后變?yōu)榱?主3從