找到一个看起来不错的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哨兵模式全都部署一个。
等待片刻,都部署好了。
看看都有啥服务
看到了熟悉的predixy,那就是说。redis集群对外暴露也是用的predixy做代理。
redis-manager是一个web端的控制台。
这个就要给个赞了。我喜欢,可以基于这个进行二次开发,能省不少事。
redis-jerry是redis-cluster
redis-tom是redis单机模式
sentinel-tom是redis-tom的哨兵集群
看看全部的pod
比较多,影响我们测试。
只部署一个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
现在就比较清楚了。
使用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却连不上了
看看predixy出了什么问题
当前信息打印一下
看到,代理转发给service/redis-jerry。也没问题
但是看上面的endpoints是5个ip,正常应该是6个,describe一下看看
NotReady的是100.115.23.179,是新创建的pod的ip,为什么会有问题呢
看predixy的日志
有大量报错日志,还是在用删除前的pod的ip。
所以,要重启predixy
果然就好了
这应该是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
再扩容回来
测试,
不行了,集群无法自动恢复。
可靠性方面还需要加强。