自动化一些功能,基本上是将一个新的节点添加到redis集群中。
目前,有一个固定的需求,即一个集群中有3个节点(比如a、b、c)。我已经确定了3种情况
所有三个节点都有0个插槽,我运行一个命令为3个节点创建集群,效果很好
任何一个节点关闭,当它再次打开时,它标识集群中有2个节点,它用一个简单的if else语句验证占用的插槽,并为自己分配可用的插槽
任何两个节点都会下降,当其中一个节点上升时,它可以正确地识别一个集群中有一个节点及其占用的插槽。
我今天面临的问题是第三个场景,其中,我想将任何一个可用的slot变量分配给redis cli的addslot命令。
例如:如果节点c占用了slot3,那么assign假设节点a即将出现,那么就分配slot1或slot2。
在不增加代码复杂性的情况下,选择可用插槽的最有效方法是什么?
slot1=`echo {0..5460}`
slot2=`echo {5461..10922}`
slot3=`echo {10923..16383}`
slots_assigned_to_${node[1]}=`redis-cli -h ${node[1]} -p ${REDIS_PORT} cluster nodes | grep myself | rev | awk -F'-' '{print$1}' | rev`
# slots_assigned_to_172.16.15.1=`src/redis-cli -h 172.16.15.1 -p 6379 cluster nodes | grep myself | rev | awk -F'-' '{print$1}' | rev`
# above command will give me output say 5460 / 10922 / 16383
if [[ $(slots_assigned_to_${node[1]}) -eq 5460 ]]; then
redis-cli -h ${currentHostIP} -p ${REDIS_PORT} cluster addslots $slot2 / $slot3
# assign either slotRange2 / slotRange3 to the upcoming node
elif [[ $(slots_assigned_to_${node[1]}) -eq 10922 ]]; then
redis-cli -h ${currentHostIP} -p ${REDIS_PORT} cluster addslots $slot1 / $slot3
elif [[ $(slots_assigned_to_${node[1]}) -eq 16383 ]]; then
redis-cli -h ${currentHostIP} -p ${REDIS_PORT} cluster addslots $slot1 / $slot2
fi
暂无答案!
目前还没有任何答案,快来回答吧!