apecloud / kubeblocks-addons

KubeBlocks add-ons.
Apache License 2.0
25 stars 27 forks source link

[BUG] redis cluster supports nodeport issue #447

Open Y-Rookie opened 2 months ago

Y-Rookie commented 2 months ago

复现步骤:

  1. 手动修改下redis-addon,配置文件中不包含任何的cluster-announce-ip、cluster-announce-port、cluster-announce-bus-port。只以cluster mode拉起三组shard分片(每组shard一主一备,共六个节点,并需要开启nodePort)。此时还未构建redis cluster集群(需要注释掉addon中构建redis cluster的代码)。需要按照以下的步骤构建redis cluster并复现。 helm install redisc ./redis-cluster --set mode=cluster --set nodePortEnabled=true --set redisCluster.shardCount=3 image

  2. 以 headless 地址创建只有三个master分片的redis-cluster集群(手动的) redis-cli --cluster create redisc-shard-zsq-0.redisc-shard-zsq-headless:6379 redisc-shard-p54-0.redisc-shard-p54-headless:6379 redisc-shard-n44-0.redisc-shard-n44-headless:6379 -a O3605v7HsS --cluster-yes

  3. 创建好了之后,看到的集群状态为 bff721d250122f966ad9b3f2e55d8eac6f88372a 10.42.0.43:6379@16379 myself,master - 0 0 3 connected 10923-16383 5b630ef6fe67bec7d50920d5bec04824a082e4fd 10.42.0.40:6379@16379 master - 0 1713160188925 2 connected 5461-10922 40c31c9b5bd210650efaf2fca1c9032c2b450758 10.42.0.36:6379@16379 master - 0 1713160188721 1 connected 0-5460

  4. 在每个master节点上手动执行config set命令,设置cluster-announce-ip、cluster-announce-port、cluster-announce-bus-port。其中cluster-announce-ip为host ip,cluster-announce-port 设置成上面对应的nodeport svc中 6379端口 对应的nodeport。cluster-announce-bus-port 设置成上面对应的nodeport svc中 16379端口 对应的nodeport。其中一个节点如下所示: image

  5. 在三个master节点上都进行如上操作后,执行cluster nodes可以看到三个节点状态正常,并且都能以nodeport对完暴露服务 image 读写操作返回的是预期内的nodeport地址: image

  6. 将剩余的三个备节点加到集群中,通过add-node命令加成指定master的slave。注意目标的节点此时只能用nodeport,不能再用headless,用headless的话会加不上,显示一直在waiting redis-cli --cluster add-node redisc-shard-p54-1.redisc-shard-p54-headless:6379 172.18.0.2:32068 --cluster-slave --cluster-master-id 5b630ef6fe67bec7d50920d5bec04824a082e4fd -a O3605v7HsS image

  7. 因为新加的备节点还没有announce对应的ip和port,所以需要将步骤4的config set 操作也在新加的备节点上执行一次

  8. 此时问题出现了,在新加的节点上通过cluster nodes能看到其余master的信息,但是在master上却看不到新加的slave的信息 image

image

Y-Rookie commented 2 months ago

另外一个问题,当使用config set cluster-announce-xxx 更新节点配置时,会发现其他节点的pod ip被统一更新成了的node上cni0网卡的ip:

image

但也不是必现的,只有某些节点上被更新了

img_v3_029v_7c925c06-895f-4969-9fe5-2cf43aa6d4eg

nayutah commented 2 months ago

solution to this issue: https://infracreate.feishu.cn/wiki/HBHNwZNfGiSY98kpBdDcc2hrnhf?from=from_copylink