基于k8s的tendis/redis自动初始化脚本详解

分析脚本开发逻辑思路

  1. 基于redis的命令行方式加入各个节点到集群
  2. 分3个步骤
    1. 通过cluster meet 识别各个节点
    2. 通过cluster replicate 遍历节点uuid,设置为从节点
    3. 通过cluster addslots 主节点添加slots槽位
  3. 脚本中需用到declare 存入变量到变量,以及ip_var调用变量的变量
  4. 在k8s环境中需通过内部域名解析到各个节点的ip地址去做集群初始化操作
  5. 通过dig +short  ${PODNAME}-$i.${SVCNAME}.${NAMESPACE}.svc.cluster.local 得到节点的ip地址,需要引入k8s的当前环境的变量PODNAME,SVCNAME,NAMESPACE去对内部域名进行拼接

根据手动添加节点的命令,提取关键操作,实现脚本化自动初始化

执行cluster meet 100.96.2.183 51002

cluster meet 100.96.2.184 51002

cluster meet 100.96.2.185 51002

cluster meet 100.96.2.187 51002

cluster meet 100.96.2.188 51002

master 分配 slot

./redis-cli -h 100.96.2.182  -p 51002  cluster addslots {0..5461}

./redis-cli -h 100.96.2.183  -p 51002  cluster addslots {5462..10922}

./redis-cli -h 100.96.2.184  -p 51002  cluster addslots {10923..16383}

配置从节点md5值

登陆到服务器,执行

./redis-cli -h 100.96.2.185 -p 51002 cluster replicate bc27a7068e55370aad426574443353a4dbe61118

./redis-cli -h 100.96.2.187 -p 51002 cluster replicate 20a784320dee978822b13c41d0e6abccbb51407b

./redis-cli -h 100.96.2.188 -p 51002 cluster replicate a977cbba702bebce993ce6c940dae1fabb383a34

最终脚本

#!/bin/bash

set -ue

sleep 10

PORT=51002

#PODNAME=$1

SIZE=3

#PASSWORD=$2

#NAMESPACE=$3

#SVCNAME=$4

slot_num=$((16384 / ${SIZE}))

for (( i = 0; i < 6; i++)); do

    declare "ip$i"=”$(dig +short  ${PODNAME}-$i.${SVCNAME}.${NAMESPACE}.svc.cluster.local)“

done

for (( i = 0; i < 6; i++ )); do

       ip_var="ip$i"

        ./redis-cli -h ${ip0} -p ${PORT} -a ${PASSWORD} cluster meet ${!ip_var} ${PORT}

done

echo "cluster meet done......"

sleep 10

./redis-cli -h ${ip0} -p ${PORT} -a ${PASSWORD}  cluster nodes

for (( i = 0; i < 3; i++ )); do

        uuid[i]=$(./redis-cli -h ${ip0} -p ${PORT} -a ${PASSWORD}  cluster nodes | grep "ip$i" | awk '{print $1}')

done

for (( i = 3; i < 6; i++ )); do

       ./redis-cli -h "ip$i" -p ${PORT}  -a ${PASSWORD} cluster replicate "${uuid[$((i-3))]}"

done

./redis-cli -h ${ip0} -p ${PORT} -a ${PASSWORD} cluster addslots {0..5461}

./redis-cli -h ${ip1} -p ${PORT} -a ${PASSWORD} cluster addslots {5462..10922}

./redis-cli -h ${ip2} -p ${PORT} -a ${PASSWORD} cluster addslots {10923..16383}

echo "cluster build done.."

sleep 5

./redis-cli -h ${IP}.10 -p ${PORT}  -a ${PASSWORD} cluster nodes

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个怀揣梦想的运维

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值