2021-02-19

K8S部署Redis Cluster集群

  • kubernetes部署单节点redis: https://www.cnblogs.com/zisefeizhu/p/14282299.html

Redis 介绍

• Redis代表REmote DIctionary Server是一种开源的内存中数据存储,通常用作数据库,缓存或消息代理。它可以存储和操作高级数据类型,例如列表,地图,集合和排序集合。

• 由于Redis接受多种格式的密钥,因此可以在服务器上执行操作,从而减少了客户端的工作量。

• 它仅将磁盘用于持久性,而将数据完全保存在内存中。

• Redis是一种流行的数据存储解决方案,并被GitHub,Pinterest,Snapchat,Twitter,StackOverflow,Flickr等技术巨头所使用。

为什么要用Redis

• 它的速度非常快。它是用ANSI C编写的,并且可以在POSIX系统上运行,例如Linux,Mac OS X和Solaris。

• Redis通常被排名为最流行的键/值数据库和最流行的与容器一起使用的NoSQL数据库。

• 其缓存解决方案减少了对云数据库后端的调用次数。

• 应用程序可以通过其客户端API库对其进行访问。

• 所有流行的编程语言都支持Redis。

• 它是开源且稳定的。

什么是Redis Cluster集群

• Redis Cluster是一组Redis实例,旨在通过对数据库进行分区来扩展数据库,从而使其更具弹性。

• 群集中的每个成员(无论是主副本还是辅助副本)都管理哈希槽的子集。如果主机无法访问,则其从机将升级为主机。在由三个主节点组成的最小Redis群集中,每个主节点都有一个从节点(以实现最小的故障转移),每个主节点都分配有一个介于0到16,383之间的哈希槽范围。节点A包含从0到5000的哈希槽,节点B从5001到10000,节点C从10001到16383。

• 群集内部的通信是通过内部总线进行的,使用协议传播有关群集的信息或发现新节点。

在Kubernetes中部署Redis Cluster集群过程记录

在Kubernetes中部署Redis集群面临挑战,因为每个Redis实例都依赖于一个配置文件,该文件可以跟踪其他集群实例及其角色。为此,我们需要结合使用StatefulSets控制器和PersistentVolumes持久化存储。

StatefulSet的设计原理模型:

• 拓扑状态:

应用的多个实例之间不是完全对等的关系,这个应用实例的启动必须按照某些顺序启动,比如应用的主节点 A 要先于从节点 B 启动。而如果你把 A 和 B 两个Pod删除掉,他们再次被创建出来是也必须严格按照这个顺序才行,并且,新创建出来的Pod,必须和原来的Pod的网络标识一样,这样原先的访问者才能使用同样的方法,访问到这个新的Pod

• 存储状态:

应用的多个实例分别绑定了不同的存储数据.对于这些应用实例来说,Pod A第一次读取到的数据,和隔了十分钟之后再次读取到的数据,应该是同一份,哪怕在此期间Pod A被重新创建过.一个数据库应用的多个存储实例。

存储卷

了解statefulset状态后,应该知道要为数据准备一个存储卷了,创建方式有静态方式和动态方式,静态方式就是手动创建PV、PVC,然后POD进行进行调用即可。这里使用动态NFS作为挂载卷,需要部署NFS动态StorageClass

1、使用NFS配置StatefulSet的动态持久化存储

1)在NFS服务器端(172.16.60.238)通过nfs创建Redis Cluster集群的共享目录

[root@k8s-harbor01 ~]# mkdir -p /data/storage/k8s/redis

2)创建nfs的rbac

[root@k8s-master01 ~]# mkdir -p /opt/k8s/k8s_project/redis[root@k8s-master01 ~]# cd /opt/k8s/k8s_project/redis[root@k8s-master01 redis]# vim nfs-rbac.yaml---apiVersion: v1kind: ServiceAccountmetadata: name: nfs-provisioner namespace: wiseco---kind: ClusterRoleapiVersion: rbac.authorization.k8s.io/v1metadata: name: nfs-provisioner-runner namespace: wisecorules: - apiGroups: [""]  resources: ["persistentvolumes"]  verbs: ["get", "list", "watch", "create", "delete"] - apiGroups: [""]  resources: ["persistentvolumeclaims"]  verbs: ["get", "list", "watch", "update"] - apiGroups: ["storage.k8s.io"]  resources: ["storageclasses"]  verbs: ["get", "list", "watch"] - apiGroups: [""]  resources: ["events"]  verbs: ["watch", "create", "update", "patch"] - apiGroups: [""]  resources: ["services", "endpoints"]  verbs: ["get","create","list", "watch","update"] - apiGroups: ["extensions"]  resources: ["podsecuritypolicies"]  resourceNames: ["nfs-provisioner"]  verbs: ["use"]---kind: ClusterRoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata: name: run-nfs-provisionersubjects: - kind: ServiceAccount name: nfs-provisioner namespace: wisecoroleRef: kind: ClusterRole name: nfs-provisioner-runner apiGroup: rbac.authorization.k8s.io创建并查看[root@k8s-master01 redis]# kubectl apply -f nfs-rbac.yamlserviceaccount/nfs-provisioner createdclusterrole.rbac.authorization.k8s.io/nfs-provisioner-runner createdclusterrolebinding.rbac.authorization.k8s.io/run-nfs-provisioner created [root@k8s-master01 redis]# kubectl get sa -n wiseco|grep nfsnfs-provisioner    1   24s[root@k8s-master01 redis]# kubectl get clusterrole -n wiseco|grep nfsnfs-provisioner-runner             2021-02-04T02:21:11Z[root@k8s-master01 redis]# kubectl get clusterrolebinding -n wiseco|grep nfsrun-nfs-provisioner         ClusterRole/nfs-provisioner-runner             34s

3)创建redis cluster集群的storageclass

[root@k8s-master01 redis]# lltotal 4-rw-r--r-- 1 root root 1216 Feb 4 10:20 nfs-rbac.yaml [root@k8s-master01 redis]# vim redis-nfs-class.yamlapiVersion: storage.k8s.io/v1beta1kind: StorageClassmetadata: name: redis-nfs-storage namespace: wisecoprovisioner: redis/nfsreclaimPolicy: Retain创建并查看[root@k8s-master01 redis]# kubectl apply -f redis-nfs-class.yamlstorageclass.storage.k8s.io/redis-nfs-storage created [root@k8s-master01 redis]# kubectl get sc -n wisecoNAME    PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGEredis-nfs-storage redis/nfs  Retain   Immediate   false

4)创建redis cluster集群的nfs-client-provisioner

[root@k8s-master01 redis]# lltotal 8-rw-r--r-- 1 root root 1216 Feb 4 10:20 nfs-rbac.yaml-rw-r--r-- 1 root root 155 Feb 4 10:24 redis-nfs-class.yaml [root@k8s-master01 redis]# vim redis-nfs.ymlapiVersion: apps/v1kind: Deploymentmetadata: name: redis-nfs-client-provisioner namespace: wisecospec: replicas: 1 selector: matchLabels:  app: redis-nfs-client-provisioner strategy: type: Recreate template: metadata:  labels:  app: redis-nfs-client-provisioner spec:  serviceAccount: nfs-provisioner  containers:  - name: redis-nfs-client-provisioner   image: registry.cn-hangzhou.aliyuncs.com/open-ali/nfs-client-provisioner   imagePullPolicy: IfNotPresent   volumeMounts:   - name: nfs-client-root    mountPath: /persistentvolumes   env:   - name: PROVISIONER_NAME    value: redis/nfs   - name: NFS_SERVER    value: 172.16.60.238   - name: NFS_PATH    value: /data/storage/k8s/redis  volumes:  - name: nfs-client-root   nfs:   server: 172.16.60.238   path: /data/storage/k8s/redis 创建并查看[root@k8s-master01 redis]# kubectl apply -f redis-nfs.ymldeployment.apps/redis-nfs-client-provisioner created [root@k8s-master01 redis]# kubectl get pods -n wiseco|grep nfsredis-nfs-client-provisioner-58b46549dd-h87gg 1/1  Running 0   40s

2、部署Redis Cluster集群

本案例部署采用的namespace命名空间是wiseco

1)准备image镜像

redis-trib.rb工具可以去redis源码中拷贝一个到当前目录,然后构建镜像。

[root@k8s-master01 redis]# pwd/opt/k8s/k8s_project/redis[root@k8s-master01 redis]# lltotal 12-rw-r--r-- 1 root root 1216 Feb 4 15:31 nfs-rbac.yaml-rw-r--r-- 1 root root 155 Feb 4 15:32 redis-nfs-class.yaml-rw-r--r-- 1 root root 1006 Feb 4 15:32 redis-nfs.yml [root@k8s-master01 redis]# mkdir image[root@k8s-master01 redis]# cd image[root@k8s-master01 image]# lltotal 64-rw-r--r-- 1 root root 191 Feb 4 18:14 Dockerfile-rwxr-xr-x 1 root root 60578 Feb 4 15:49 redis-trib.rb [root@k8s-master01 image]# cat DockerfileFROM redis:4.0.11RUN apt-get update -yRUN apt-get install -y ruby \rubygemsRUN apt-get clean allRUN gem install redisRUN apt-get install dnsutils -yCOPY redis-trib.rb /usr/local/bin/创建镜像并上传到Harbor仓库[root@k8s-master01 image]# docker build -t 172.16.60.238/wiseco/redis:4.0.11 .[root@k8s-master01 image]# docker push 172.16.60.238/wiseco/redis:4.0.11

2)创建configmap

redis配置文件使用configmap方式进行挂载,如果将配置封装到docker image中的话,俺么每次修改配置就需要重新docker build。个人觉得比较麻烦,所以使用configmap方式挂载配置。

[root@k8s-master01 redis]# pwd/opt/k8s/k8s_project/redis[root@k8s-master01 redis]# lltotal 12drwxr-xr-x 2 root root 45 Feb 4 18:14 image-rw-r--r-- 1 root root 1216 Feb 4 15:31 nfs-rbac.yaml-rw-r--r-- 1 root root 155 Feb 4 15:32 redis-nfs-class.yaml-rw-r--r-- 1 root root 1006 Feb 4 15:32 redis-nfs.yml [root@k8s-master01 redis]# mkdir conf[root@k8s-master01 redis]# cd conf/ [root@k8s-master01 conf]# vim redis-configmap.yamlapiVersion: v1kind: ConfigMapmetadata: name: redis-cluster namespace: wisecodata: fix-ip.sh: | #!/bin/sh CLUSTER_CONFIG="/data/nodes.conf" if [ -f ${CLUSTER_CONFIG} ]; then  if [ -z "${POD_IP}" ]; then  echo "Unable to determine Pod IP address!"  exit 1  fi  echo "Updating my IP to ${POD_IP} in ${CLUSTER_CONFIG}"  sed -i.bak -e '/myself/ s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/'${POD_IP}'/' ${CLUSTER_CONFIG} fi exec "$@" redis.conf: | cluster-enabled yes cluster-config-file /data/nodes.conf cluster-node-timeout 10000 protected-mode no daemonize no pidfile /var/run/redis.pid port 6379 tcp-backlog 511 bind 0.0.0.0 timeout 3600 tcp-keepalive 1 loglevel verbose logfile /data/redis.log databases 16 save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir /data #requirepass yl123456 appendonly yes appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb lua-time-limit 20000 slowlog-log-slower-than 10000 slowlog-max-len 128 #rename-command FLUSHALL "" latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-entries 512 list-max-ziplist-value 64 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 aof-rewrite-incremental-fsync yes需要注意:fix-ip.sh 脚本的作用用于当redis集群某pod重建后Pod IP发生变化,在/data/nodes.conf中将新的Pod IP替换原Pod IP。不然集群会出问题。 创建和查看[root@k8s-master01 conf]# kubectl apply -f redis-configmap.yaml [root@k8s-master01 conf]# kubectl get cm -n wiseco|grep redisredis-cluster      2  8m55s

3)准备StatefulSet

volumeClaimTemplates 用于StatefulSet控制器场景:

[root@k8s-master01 redis]# pwd/opt/k8s/k8s_project/redis[root@k8s-master01 redis]# lltotal 12drwxr-xr-x 2 root root 34 Feb 4 18:52 confdrwxr-xr-x 2 root root 45 Feb 4 18:14 image-rw-r--r-- 1 root root 1216 Feb 4 15:31 nfs-rbac.yaml-rw-r--r-- 1 root root 155 Feb 4 15:32 redis-nfs-class.yaml-rw-r--r-- 1 root root 1006 Feb 4 15:32 redis-nfs.yml [root@k8s-master01 redis]# mkdir deploy[root@k8s-master01 redis]# cd deploy/[root@k8s-master01 deploy]# cat redis-cluster.yml---apiVersion: v1kind: Servicemetadata: namespace: wiseco name: redis-clusterspec: clusterIP: None ports: - port: 6379 targetPort: 6379 name: client - port: 16379 targetPort: 16379 name: gossip selector: app: redis-cluster---apiVersion: apps/v1kind: StatefulSetmetadata: namespace: wiseco name: redis-clusterspec: serviceName: redis-cluster podManagementPolicy: OrderedReady replicas: 6 selector: matchLabels:  app: redis-cluster template: metadata:  labels:  app: redis-cluster spec:  containers:  - name: redis  image: 172.16.60.238/wiseco/redis:4.0.11  ports:  - containerPort: 6379   name: client  - containerPort: 16379   name: gossip  command: ["/etc/redis/fix-ip.sh", "redis-server", "/etc/redis/redis.conf"]  env:  - name: POD_IP   valueFrom:   fieldRef:    fieldPath: status.podIP  volumeMounts:  - name: conf   mountPath: /etc/redis/   readOnly: false  - name: data   mountPath: /data   readOnly: false  volumes:  - name: conf  configMap:   name: redis-cluster   defaultMode: 0755 volumeClaimTemplates: - metadata:  name: data  annotations:  volume.beta.kubernetes.io/storage-class: "redis-nfs-storage" spec:  accessModes:  - ReadWriteMany  resources:  requests:   storage: 10Gi创建并查看[root@k8s-master01 deploy]# kubectl apply -f redis-cluster.yml [root@k8s-master01 deploy]# kubectl get pods -n wiseco|grep redis-clusterredis-cluster-0         1/1  Running 0   10mredis-cluster-1         1/1  Running 0   10mredis-cluster-2         1/1  Running 0   10mredis-cluster-3         1/1  Running 0   10mredis-cluster-4         1/1  Running 0   9m35sredis-cluster-5         1/1  Running 0   9m25s [root@k8s-master01 deploy]# kubectl get svc -n wiseco|grep redis-clusterredis-cluster ClusterIP None    <none>  6379/TCP,16379/TCP   10m查看PV、PVC[root@k8s-master01 deploy]# kubectl get pvNAME          CAPACITY ACCESS MODES RECLAIM POLICY STATUS  CLAIM       STORAGECLASS  REASON AGEpvc-20bcb3be-90e1-4354-bd11-4f442a3bd562 10Gi  RWX   Delete   Bound   wiseco/data-redis-cluster-0 redis-nfs-storage   19mpvc-3b53a31b-9a53-4bd4-93ff-2cf9fed551de 10Gi  RWX   Delete   Bound   wiseco/data-redis-cluster-2 redis-nfs-storage   12mpvc-43c0cba2-54a9-4416-afb6-8b7730a199dc 10Gi  RWX   Delete   Bound   wiseco/data-redis-cluster-1 redis-nfs-storage   12mpvc-66daade5-1b97-41ce-a9e0-4cf88d63894d 10Gi  RWX   Delete   Terminating wiseco/data-redis-cluster-5 redis-nfs-storage   11mpvc-dd62a086-1802-446a-9f9d-35620f7f0b4a 10Gi  RWX   Delete   Bound   wiseco/data-redis-cluster-4 redis-nfs-storage   11mpvc-e5aa9802-b983-471c-a7da-32eebc497610 10Gi  RWX   Delete   Bound   wiseco/data-redis-cluster-3 redis-nfs-storage   12m [root@k8s-master01 deploy]# kubectl get pvc -n wisecoNAME     STATUS VOLUME          CAPACITY ACCESS MODES STORAGECLASS  AGEdata-redis-cluster-0 Bound pvc-20bcb3be-90e1-4354-bd11-4f442a3bd562 10Gi  RWX   redis-nfs-storage 19mdata-redis-cluster-1 Bound pvc-43c0cba2-54a9-4416-afb6-8b7730a199dc 10Gi  RWX   redis-nfs-storage 12mdata-redis-cluster-2 Bound pvc-3b53a31b-9a53-4bd4-93ff-2cf9fed551de 10Gi  RWX   redis-nfs-storage 12mdata-redis-cluster-3 Bound pvc-e5aa9802-b983-471c-a7da-32eebc497610 10Gi  RWX   redis-nfs-storage 12mdata-redis-cluster-4 Bound pvc-dd62a086-1802-446a-9f9d-35620f7f0b4a 10Gi  RWX   redis-nfs-storage 11mdata-redis-cluster-5 Bound pvc-66daade5-1b97-41ce-a9e0-4cf88d63894d 10Gi  RWX   redis-nfs-storage 11m

4)查看NFS共享存储

NFS服务器(172.16.60.238),查看共享目录/data/storage/k8s/redis[root@k8s-harbor01 redis]# pwd/data/storage/k8s/redis[root@k8s-harbor01 redis]# lltotal 0drwxrwxrwx 2 root root 63 Feb 4 18:59 wiseco-data-redis-cluster-0-pvc-20bcb3be-90e1-4354-bd11-4f442a3bd562drwxrwxrwx 2 root root 63 Feb 4 18:59 wiseco-data-redis-cluster-1-pvc-43c0cba2-54a9-4416-afb6-8b7730a199dcdrwxrwxrwx 2 root root 63 Feb 4 18:59 wiseco-data-redis-cluster-2-pvc-3b53a31b-9a53-4bd4-93ff-2cf9fed551dedrwxrwxrwx 2 root root 63 Feb 4 19:00 wiseco-data-redis-cluster-3-pvc-e5aa9802-b983-471c-a7da-32eebc497610drwxrwxrwx 2 root root 63 Feb 4 19:00 wiseco-data-redis-cluster-4-pvc-dd62a086-1802-446a-9f9d-35620f7f0b4adrwxrwxrwx 2 root root 63 Feb 4 19:00 wiseco-data-redis-cluster-5-pvc-66daade5-1b97-41ce-a9e0-4cf88d63894d[root@k8s-harbor01 redis]# ls ./*./wiseco-data-redis-cluster-0-pvc-20bcb3be-90e1-4354-bd11-4f442a3bd562:appendonly.aof nodes.conf redis.log ./wiseco-data-redis-cluster-1-pvc-43c0cba2-54a9-4416-afb6-8b7730a199dc:appendonly.aof nodes.conf redis.log ./wiseco-data-redis-cluster-2-pvc-3b53a31b-9a53-4bd4-93ff-2cf9fed551de:appendonly.aof nodes.conf redis.log ./wiseco-data-redis-cluster-3-pvc-e5aa9802-b983-471c-a7da-32eebc497610:appendonly.aof nodes.conf redis.log ./wiseco-data-redis-cluster-4-pvc-dd62a086-1802-446a-9f9d-35620f7f0b4a:appendonly.aof nodes.conf redis.log ./wiseco-data-redis-cluster-5-pvc-66daade5-1b97-41ce-a9e0-4cf88d63894d:appendonly.aof nodes.conf redis.log

3、初始化Redis Cluster集群

接下来是形成Redis Cluster集群,运行以下命令并键入yes以接受配置。

集群形式:前三个节点成为主节点,后三个节点成为从节点。

需要注意:

redis-trib.rb必须使用ip进行初始化redis集群,使用域名会报如下错误:*******/redis/client.rb:126:in `call': ERR Invalid node address specified: redis-cluster-0.redis-headless.sts-app.svc.cluster.local:6379 (Redis::CommandError)

这里进行Redis Cluster集群初始化的命令:

以下命令并键入yes以接受配置。前三个节点成为主节点,后三个节点成为从节点。

kubectl exec -it redis-cluster-0 -n wiseco -- redis-trib.rb create --replicas 1 $(kubectl get pods -l app=redis-cluster -n wiseco -o jsonpath='{range.items[*]}{.status.podIP}:6379 ')先获取Redis Cluster集群的6个节点Pod的ip地址[root@k8s-master01 redis]# kubectl get pods -n wiseco -o wide|grep redis-clusterredis-cluster-0         1/1  Running 0   4h34m 172.30.217.83 k8s-node04 <none>   <none>redis-cluster-1         1/1  Running 0   4h34m 172.30.85.217 k8s-node01 <none>   <none>redis-cluster-2         1/1  Running 0   4h34m 172.30.135.181 k8s-node03 <none>   <none>redis-cluster-3         1/1  Running 0   4h34m 172.30.58.251 k8s-node02 <none>   <none>redis-cluster-4         1/1  Running 0   4h33m 172.30.85.216 k8s-node01 <none>   <none>redis-cluster-5         1/1  Running 0   4h33m 172.30.217.82 k8s-node04 <none>   <none> [root@k8s-master01 redis]# kubectl get pods -l app=redis-cluster -n wiseco -o jsonpath='{range.items[*]}{.status.podIP}:6379 '172.30.217.83:6379 172.30.85.217:6379 172.30.135.181:6379 172.30.58.251:6379 172.30.85.216:6379 172.30.217.82:6379 这里特别注意一下:上面命令最后一个单引号前面一定要有空格!!因为接下来进行Redis Cluster集群初始化的时候,集群节点间的ip+port之间要通过空格隔开。 [root@k8s-master01 redis]# kubectl exec -it redis-cluster-0 -n wiseco -- redis-trib.rb create --replicas 1 $(kubectl get pods -l app=redis-cluster -n wiseco -o jsonpath='{range.items[*]}{.status.podIP}:6379 ')>>> Creating cluster>>> Performing hash slots allocation on 6 nodes...Using 3 masters:172.30.217.83:6379172.30.85.217:6379172.30.135.181:6379Adding replica 172.30.58.251:6379 to 172.30.217.83:6379Adding replica 172.30.85.216:6379 to 172.30.85.217:6379Adding replica 172.30.217.82:6379 to 172.30.135.181:6379M: e5a3154a17131075f35fb32953b8cf8d6cfc7df0 172.30.217.83:6379 slots:0-5460 (5461 slots) masterM: 961398483262f505a115957e7e4eda7ff3e64900 172.30.85.217:6379 slots:5461-10922 (5462 slots) masterM: 2d1440e37ea4f4e9f6d39d240367deaa609d324d 172.30.135.181:6379 slots:10923-16383 (5461 slots) masterS: 0d7bf40bf18d474509116437959b65551cd68b03 172.30.58.251:6379 replicates e5a3154a17131075f35fb32953b8cf8d6cfc7df0S: 8cbf699a850c0dafe51524127a594fdbf0a27784 172.30.85.216:6379 replicates 961398483262f505a115957e7e4eda7ff3e64900S: 2987a33f4ce2e412dcc11c1c1daa2538591cd930 172.30.217.82:6379 replicates 2d1440e37ea4f4e9f6d39d240367deaa609d324dCan I set the above configuration? (type 'yes' to accept): yes>>> Nodes configuration updated>>> Assign a different config epoch to each node>>> Sending CLUSTER MEET messages to join the clusterWaiting for the cluster to join......>>> Performing Cluster Check (using node 172.30.217.83:6379)M: e5a3154a17131075f35fb32953b8cf8d6cfc7df0 172.30.217.83:6379 slots:0-5460 (5461 slots) masterM: 961398483262f505a115957e7e4eda7ff3e64900 172.30.85.217:6379 slots:5461-10922 (5462 slots) masterM: 2d1440e37ea4f4e9f6d39d240367deaa609d324d 172.30.135.181:6379 slots:10923-16383 (5461 slots) masterM: 0d7bf40bf18d474509116437959b65551cd68b03 172.30.58.251:6379 slots: (0 slots) master replicates e5a3154a17131075f35fb32953b8cf8d6cfc7df0M: 8cbf699a850c0dafe51524127a594fdbf0a27784 172.30.85.216:6379 slots: (0 slots) master replicates 961398483262f505a115957e7e4eda7ff3e64900M: 2987a33f4ce2e412dcc11c1c1daa2538591cd930 172.30.217.82:6379 slots: (0 slots) master replicates 2d1440e37ea4f4e9f6d39d240367deaa609d324d[OK] All nodes agree about slots configuration.>>> Check for open slots...>>> Check slots coverage...[OK] All 16384 slots covered. 通过上面初始化信息,可以看出集群关系:redis-cluster-0是master节点,redis-cluster-3是它的从节点。redis-cluster-1是master节点,redis-cluster-4是它的从节点。redis-cluster-2是master节点,redis-cluster-5是它的从节点。

4、验证Redis Cluster集群部署

[root@k8s-master01 redis]# kubectl exec -it redis-cluster-0 -n wiseco -- redis-cli cluster info          cluster_state:okcluster_slots_assigned:16384cluster_slots_ok:16384cluster_slots_pfail:0cluster_slots_fail:0cluster_known_nodes:6cluster_size:3cluster_current_epoch:6cluster_my_epoch:1cluster_stats_messages_ping_sent:130cluster_stats_messages_pong_sent:137cluster_stats_messages_sent:267cluster_stats_messages_ping_received:132cluster_stats_messages_pong_received:130cluster_stats_messages_meet_received:5cluster_stats_messages_received:267 [root@k8s-master01 redis]# for x in $(seq 0 5); do echo "redis-cluster-$x"; kubectl exec redis-cluster-$x -n wiseco -- redis-cli role; echo; doneredis-cluster-0master168172.30.58.2516379168 redis-cluster-1master168172.30.85.2166379168 redis-cluster-2master182172.30.217.826379168 redis-cluster-3slave172.30.217.836379connected182 redis-cluster-4slave172.30.85.2176379connected168 redis-cluster-5slave172.30.135.1816379connected182

注:之前写过一篇 在k8s上部署单节点redis, 今天发现散尽浮华大佬 写了一篇 集群版 的,在其基础上进行再升级。









原文转载:http://www.shaoqun.com/a/568600.html

跨境电商:https://www.ikjzd.com/

picitup:https://www.ikjzd.com/w/446

1淘网:https://www.ikjzd.com/w/1698


kubernetes部署单节点redis:https://www.cnblogs.com/zisefeizhu/p/14282299.htmlRedis介绍•Redis代表REmoteDIctionaryServer是一种开源的内存中数据存储,通常用作数据库,缓存或消息代理。它可以存储和操作高级数据类型,例如列表,地图,集合和排序集合。•由于Redis接受多种格式的密钥,因此可以在服务器上执行操作
深诺互动:https://www.ikjzd.com/w/2746
克雷格:https://www.ikjzd.com/w/194
sgshop:https://www.ikjzd.com/w/1982
中欧班列双向积压,出口货物停装!运费飙升5倍!:https://www.ikjzd.com/home/137716
东南亚社交营销增长策略:吸引与信任是营销的核心:https://www.ikjzd.com/home/132060
Shopee公布2020年春节热搜词,帮助卖家吸引节庆流量:https://www.ikjzd.com/home/114458

No comments:

Post a Comment