hello云胜

技术与生活

0%

找到一个看起来不错的redis-operator来进行redis的部署,今天来测试一下效果如何。

关于k8s的operator是啥就不细讲了,内容太多。

快速体验

按照readme来快速部署下试试

1
2
3
4
helm repo add td-redis-operator https://tongdun.github.io/td-redis-operator/charts/td-redis-operator
helm repo update
kubectl create ns td-redis
helm install -n td-redis tongdun td-redis-operator/td-redis-operator

这回部署redis-operator,manager控制台,redis集群,redis哨兵模式全都部署一个。

等待片刻,都部署好了。

看看都有啥服务

image-20230625163231237

看到了熟悉的predixy,那就是说。redis集群对外暴露也是用的predixy做代理。

redis-manager是一个web端的控制台。

这个就要给个赞了。我喜欢,可以基于这个进行二次开发,能省不少事。

image-20230625163153839

redis-jerry是redis-cluster

redis-tom是redis单机模式

sentinel-tom是redis-tom的哨兵集群

看看全部的pod

image-20230625165931633

比较多,影响我们测试。

只部署一个redis-cluster

下面我清理掉,重新部署一个干净的redis-cluster模式。开始我们的测试。

1
helm -n td-redis uninstall tongdun

清理完毕之后,

1
helm install -n td-redis tongdun td-redis-operator/td-redis-operator --set type=cluster

只安装redis-cluster

image-20230626110849638

现在就比较清楚了。

使用deploy部署了predixy,所谓redis-cluster的代理。使用sts部署了3主3从的redis集群。

redis的默认密码是88c185e86f684251,可以通过.Values.secret修改

predixy的默认密码是123,目前还不能改,这个要优化

基于的redis版本是redis_version:5.0.8

进到容器里看看

redis的pod里有两个container

1
2
[root@paas-m-k8s-master-1 ~]# kc -n td-redis get pod redis-jerry-0-0 -o jsonpath={.spec.containers[*].name}
redis-jerry-0-prometheus-sidecar redis-jerry-0

进入redis的那个container

1
kc -n td-redis exec -it redis-jerry-0-0 -c redis-jerry-0 -- /bin/sh

redis的配置目录:

1
2
3
sh-4.2# cd /home/admin/redis/
sh-4.2# ls
data nodes.conf output redis.conf script

predixy的配置目录: /etc/predixy/

1
2
3
[root@paas-m-k8s-master-1 ~]# kc -n td-redis exec -it predixy-redis-jerry-8d56fd856-6zhb2 -- /bin/sh
# ls /etc/predixy
auth.conf cluster.conf predixy.conf

测试节点宕机

先随便set一个值

1
2
3
4
5
6
7
8
[root@paas-m-k8s-master-1 ~]# kc -n td-redis exec -it redis-jerry-0-0 -c redis-jerry-0 -- redis-cli -a 88c185e86f684251 -c
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> set a 100
-> Redirected to slot [15495] located at 100.111.149.228:6379
OK
100.111.149.228:6379> get a
"100"
100.111.149.228:6379>

先记录一下当前的cluster nodes

1
2
3
4
5
6
7f747ee38177f5c211bd7505272a1cc75d0a24d0 100.111.149.194:6379@16379 master - 0 1687761037053 1 connected 0-5460
7e3bfda2e4d225004c977c1941f4a5054e3425d4 100.111.149.235:6379@16379 slave fb514a9f534097be588782b2210778cac026bbc8 0 1687761036553 2 connected
454db5bfed5880f430f9a60047e1780f29643d96 100.66.220.219:6379@16379 slave 7f747ee38177f5c211bd7505272a1cc75d0a24d0 0 1687761037354 1 connected
8e780f58621794552f22f4aaeee50d58d6d40658 100.66.54.125:6379@16379 slave f6b07a08be8605041fcec0eb0610783fc13fb8ef 0 1687761037053 3 connected
fb514a9f534097be588782b2210778cac026bbc8 100.66.54.70:6379@16379 master - 0 1687761037000 2 connected 5461-10922
f6b07a08be8605041fcec0eb0610783fc13fb8ef 100.111.149.228:6379@16379 myself,master - 0 1687761036000 3 connected 10923-16383

之前set的值move在100.111.149.228,那就干掉redis-jerry-2-0

1
2
[root@paas-m-k8s-master-1 ~]# kc -n td-redis delete pod redis-jerry-2-0
pod "redis-jerry-2-0" deleted

再看下pod

1
2
3
4
5
6
7
8
9
10
11
[root@paas-m-k8s-master-1 ~]# kc -n td-redis get pod -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
predixy-redis-jerry-8d56fd856-55ds7 1/1 Running 0 3h27m 100.115.23.139 paas-m-k8s-node-5 <none> <none>
predixy-redis-jerry-8d56fd856-njbtp 1/1 Running 0 3h27m 100.105.152.53 paas-m-k8s-node-4 <none> <none>
redis-jerry-0-0 2/2 Running 0 3h28m 100.111.149.194 paas-m-k8s-node-6 <none> <none>
redis-jerry-0-1 2/2 Running 0 3h28m 100.66.220.219 paas-m-k8s-node-1 <none> <none>
redis-jerry-1-0 2/2 Running 0 3h28m 100.66.54.70 paas-m-k8s-node-3 <none> <none>
redis-jerry-1-1 2/2 Running 0 3h28m 100.111.149.235 paas-m-k8s-node-6 <none> <none>
redis-jerry-2-0 2/2 Running 0 19s 100.115.23.179 paas-m-k8s-node-5 <none> <none>
redis-jerry-2-1 2/2 Running 0 3h28m 100.66.54.125 paas-m-k8s-node-3 <none> <none>
td-redis-operator-6fd6959df9-fbwbm 1/1 Running 0 3h28m 100.108.161.170 paas-m-k8s-node-2 <none> <none>

redis-jerry-2-0的ip变为100.115.23.179

看一下redis-cluster的nodes

1
2
3
4
5
6
7
8
9
[root@paas-m-k8s-master-1 ~]# kc -n td-redis exec -it redis-jerry-0-0 -c redis-jerry-0 -- redis-cli -a 88c185e86f684251 -c
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> cluster nodes
454db5bfed5880f430f9a60047e1780f29643d96 100.66.220.219:6379@16379 slave 7f747ee38177f5c211bd7505272a1cc75d0a24d0 0 1687761311000 1 connected
8e780f58621794552f22f4aaeee50d58d6d40658 100.66.54.125:6379@16379 master - 0 1687761311849 4 connected 10923-16383
fb514a9f534097be588782b2210778cac026bbc8 100.66.54.70:6379@16379 master - 0 1687761310848 2 connected 5461-10922
ec0580e826a659f0280f699b82aa1daa79bf4403 100.115.23.179:6379@16379 slave 8e780f58621794552f22f4aaeee50d58d6d40658 0 1687761311047 4 connected
7e3bfda2e4d225004c977c1941f4a5054e3425d4 100.111.149.235:6379@16379 slave fb514a9f534097be588782b2210778cac026bbc8 0 1687761311548 2 connected
7f747ee38177f5c211bd7505272a1cc75d0a24d0 100.111.149.194:6379@16379 myself,master - 0 1687761311000 1 connected 0-5460

看到因为之前的redis-jerry-2-0宕机,现在redis-cluster的master已经变为redis-jerry-2-1。同时redis-jerry-2-0的ip也变为100.115.23.179

看起来没问题。

但是此时却发现一个问题,从我的电脑上predixy却连不上了

image-20230626145223025

image-20230626143932149

看看predixy出了什么问题

image-20230626144111448

当前信息打印一下

image-20230626144604769

看到,代理转发给service/redis-jerry。也没问题

但是看上面的endpoints是5个ip,正常应该是6个,describe一下看看

image-20230626144932987

NotReady的是100.115.23.179,是新创建的pod的ip,为什么会有问题呢

看predixy的日志

image-20230626150138251

有大量报错日志,还是在用删除前的pod的ip。

所以,要重启predixy

果然就好了

image-20230626150457009

这应该是predixy的配置问题。也可以说是operator需要优化,发生pod重启,需要重新部署predixy。

测试全部节点宕机

redis使用statefulset部署的。

1
2
3
4
5
[root@paas-m-k8s-master-1 ~]# kc -n td-redis get sts
NAME READY AGE
redis-jerry-0 2/2 5h2m
redis-jerry-1 2/2 5h2m
redis-jerry-2 2/2 5h2m

全部缩容到0

1
2
3
4
5
6
[root@paas-m-k8s-master-1 ~]# kc -n td-redis scale sts redis-jerry-0 --replicas=0
statefulset.apps/redis-jerry-0 scaled
[root@paas-m-k8s-master-1 ~]# kc -n td-redis scale sts redis-jerry-1 --replicas=0
statefulset.apps/redis-jerry-1 scaled
[root@paas-m-k8s-master-1 ~]# kc -n td-redis scale sts redis-jerry-2 --replicas=0
statefulset.apps/redis-jerry-2 scaled

再扩容回来

测试,

image-20230626161606367

不行了,集群无法自动恢复。

可靠性方面还需要加强。