广告
返回顶部
首页 > 资讯 > 精选 >k8s如何部署redis集群
  • 619
分享到

k8s如何部署redis集群

2023-07-05 05:07:11 619人浏览 八月长安
摘要

这篇文章主要讲解了“k8s如何部署redis集群”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“k8s如何部署Redis集群”吧!redis集群搭建1.1使用redis-cli创建集群#&nb

这篇文章主要讲解了“k8s如何部署redis集群”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“k8s如何部署Redis集群”吧!

redis集群搭建

1.1使用redis-cli创建集群

# 查看redis的pod对应的ipkubectl get pod -n jxbp -o wide>NAME                             READY   STATUS    RESTARTS   AGE    IP               node         NOMINATED NODE   READINESS GATES redis-0                          1/1     Running   0          18h    10.168.235.196   k8s-master   <none>           <none> redis-1                          1/1     Running   0          18h    10.168.235.225   k8s-master   <none>           <none> redis-2                          1/1     Running   0          18h    10.168.235.239   k8s-master   <none>           <none> redis-3                          1/1     Running   0          18h    10.168.235.198   k8s-master   <none>           <none> redis-4                          1/1     Running   0          18h    10.168.235.222   k8s-master   <none>           <none> redis-5                          1/1     Running   0          18h    10.168.235.238   k8s-master   <none>           <none># 进入到redis-0容器kubectl exec -it redis-0 /bin/bash -n jxbp# 创建master节点(redis-0、redis-2、redis-4)redis-cli --cluster create 10.168.235.196:6379 10.168.235.239:6379 10.168.235.222:6379 -a jxbd    > Warning: Using a passWord with '-a' or '-u' option on the command line interface may not be safe.    >>> PerfORMing hash slots allocation on 3 nodes...    Master[0] -> Slots 0 - 5460    Master[1] -> Slots 5461 - 10922    Master[2] -> Slots 10923 - 16383    M: bcae187137a9b30d7dab8fe0d8ed4a46c6e39638 10.168.235.196:6379       slots:[0-5460] (5461 slots) master    M: 4367e4a45e557406a3112e7b79f82a44d4ce485e 10.168.235.239:6379       slots:[5461-10922] (5462 slots) master    M: a2cec159bbe2efa11a8f60287b90927bcb214729 10.168.235.222:6379       slots:[10923-16383] (5461 slots) master    Can 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 cluster    Waiting for the cluster to join    .    >>> Performing Cluster Check (using node 10.168.235.196:6379)    M: bcae187137a9b30d7dab8fe0d8ed4a46c6e39638 10.168.235.196:6379       slots:[0-5460] (5461 slots) master    M: a2cec159bbe2efa11a8f60287b90927bcb214729 10.168.235.222:6379       slots:[10923-16383] (5461 slots) master    M: 4367e4a45e557406a3112e7b79f82a44d4ce485e 10.168.235.239:6379       slots:[5461-10922] (5462 slots) master    [OK] All nodes agree about slots configuration.    >>> Check for open slots...    >>> Check slots coverage...    [OK] All 16384 slots covered.

注意上面的master节点,会生成对应节点id:bcae187137a9b30d7dab8fe0d8ed4a46c6e39638a2cec159bbe2efa11a8f60287b90927bcb2147294367e4a45e557406a3112e7b79f82a44d4ce485e,用于创建slave节点。

# 为每个master节点添加slave节点# 10.168.235.196:6379的位置可以是任意一个master节点,一般我们用第一个master节点即redis-0的ip地址# --cluster-master-id参数指定该salve节点对应的master节点的id# -a参数指定redis的密码# redis-0的master节点,添加redis-1为slave节点redis-cli --cluster add-node 10.168.235.225:6379 10.168.235.196:6379 --cluster-slave --cluster-master-id bcae187137a9b30d7dab8fe0d8ed4a46c6e39638 -a jxbd# redis-2的master节点,添加redis-3为slave节点redis-cli --cluster add-node 10.168.235.198:6379 10.168.235.239:6379 --cluster-slave --cluster-master-id a2cec159bbe2efa11a8f60287b90927bcb214729 -a jxbd# redis-4的master节点,添加redis-5为slave节点redis-cli --cluster add-node 10.168.233.238:6379 10.168.235.222:6379 --cluster-slave --cluster-master-id 4367e4a45e557406a3112e7b79f82a44d4ce485e -a jxbd

显示以下信息,即为添加成功:

[OK] All nodes agree about slots configuration.

[OK] All 16384 slots covered.

[OK] New node added correctly.

坑:

一开始是想用headless的域名创建redis集群的,这样节点重启后就不需要更新ip,但是redis不支持使用域名,所以只能绕了一圈又回到固定ip的方法,和容器环境很不协调。

1.2redis集群状态验证(可选)

  • cluster info

# 进入到redis客户端,集群需要带上-c,有密码需要带上-aredis-cli -c -a jxbd# 查看redis集群信息127.0.0.1:6379> cluster infocluster_state:okcluster_slots_assigned:16384cluster_slots_ok:16384cluster_slots_pfail:0cluster_slots_fail:0cluster_known_nodes:6cluster_size:3cluster_current_epoch:3cluster_my_epoch:1cluster_stats_messages_ping_sent:7996cluster_stats_messages_pong_sent:7713cluster_stats_messages_sent:15709cluster_stats_messages_ping_received:7710cluster_stats_messages_pong_received:7996cluster_stats_messages_meet_received:3cluster_stats_messages_received:15709

注意:

现在进入集群中的任意一个Pod中都可以访问Redis服务,前面我们创建了一个headless类型的Service,kubernetes集群会为该服务分配一个DNS记录,格式为:$(pod.name).$(headless server.name).${namespace}.svc.cluster.local,每次访问该服务名时,将会直接进入到redis的节点上。svc.cluster.local可省略。 例如:

redis-cli -c -a jxbd -h redis-0.redis-hs.jxbp -p 6379

  • cluster nodes

# 查看redis集群状态127.0.0.1:6379> cluster nodes70220b45e978d0cb3Df19b07e55d883b49f4127d 10.168.235.238:6379@16379 slave 4367e4a45e557406a3112e7b79f82a44d4ce485e 0 1670306292673 2 connected122b89a51a9bf005e3d47b6d721c65621d2e9a75 10.168.235.225:6379@16379 slave bcae187137a9b30d7dab8fe0d8ed4a46c6e39638 0 1670306290558 1 connectedc2afcb9e83038a47d04bf328ead8033788548234 10.168.235.198:6379@16379 slave a2cec159bbe2efa11a8f60287b90927bcb214729 0 1670306291162 3 connected4367e4a45e557406a3112e7b79f82a44d4ce485e 10.168.235.239:6379@16379 master - 0 1670306291561 2 connected 5461-10922bcae187137a9b30d7dab8fe0d8ed4a46c6e39638 10.168.235.196:6379@16379 myself,master - 0 1670306291000 1 connected 0-5460a2cec159bbe2efa11a8f60287b90927bcb214729 10.168.235.222:6379@16379 master - 0 1670306292166 3 connected 10923-16383

可以看到3个master,3个slave节点,都是connected状态。

  • get,set验证

# 会找到对应的槽进行set操作,去到10.168.235.222节点set name1 llsydn-> Redirected to slot [12933] located at 10.168.235.222:6379OK# set name1成功10.168.235.222:6379> set name1 llsydnOK# get name1成功10.168.235.222:6379> get name1"llsydn"

master节点进行set操作,slave节点复制。主从复制

1.3重启pod,验证集群(可选)

# redis-1未重启之前10.168.235.239:6379> cluster nodes4367e4a45e557406a3112e7b79f82a44d4ce485e 10.168.235.239:6379@16379 myself,master - 0 1670307319000 2 connected 5461-10922bcae187137a9b30d7dab8fe0d8ed4a46c6e39638 10.168.235.196:6379@16379 master - 0 1670307319575 1 connected 0-546070220b45e978d0cb3df19b07e55d883b49f4127d 10.168.235.238:6379@16379 slave 4367e4a45e557406a3112e7b79f82a44d4ce485e 0 1670307318000 2 connected122b89a51a9bf005e3d47b6d721c65621d2e9a75 10.168.235.225:6379@16379 slave bcae187137a9b30d7dab8fe0d8ed4a46c6e39638 0 1670307319781 1 connectedc2afcb9e83038a47d04bf328ead8033788548234 10.168.235.198:6379@16379 slave a2cec159bbe2efa11a8f60287b90927bcb214729 0 1670307319071 3 connecteda2cec159bbe2efa11a8f60287b90927bcb214729 10.168.235.222:6379@16379 master - 0 1670307318000 3 connected 10923-16383# 重启redis-1kubectl delete pod redis-1 -n jxbppod "redis-1" deleted# redis-1重启之后10.168.235.239:6379> cluster nodes4367e4a45e557406a3112e7b79f82a44d4ce485e 10.168.235.239:6379@16379 myself,master - 0 1670307349000 2 connected 5461-10922bcae187137a9b30d7dab8fe0d8ed4a46c6e39638 10.168.235.196:6379@16379 master - 0 1670307349988 1 connected 0-546070220b45e978d0cb3df19b07e55d883b49f4127d 10.168.235.238:6379@16379 slave 4367e4a45e557406a3112e7b79f82a44d4ce485e 0 1670307349000 2 connected122b89a51a9bf005e3d47b6d721c65621d2e9a75 10.168.235.232:6379@16379 slave bcae187137a9b30d7dab8fe0d8ed4a46c6e39638 0 1670307350089 1 connectedc2afcb9e83038a47d04bf328ead8033788548234 10.168.235.198:6379@16379 slave a2cec159bbe2efa11a8f60287b90927bcb214729 0 1670307350000 3 connecteda2cec159bbe2efa11a8f60287b90927bcb214729 10.168.235.222:6379@16379 master - 0 1670307348000 3 connected 10923-16383

可以看到重启后的,redis-1节点,虽然ip变了,但是redis集群,还是可以识别到新的ip,集群还是正常的。

168.235.225 ---> 10.168.235.232

1.4创建Service服务

前面我们创建了用于实现StatefulSet的Headless Service,但该Service没有Cluster Ip,因此不能用于外界访问。所以,我们还需要创建一个Service,专用于为Redis集群提供访问和负载均衡

这里可以使用ClusterIPNodePort。这里,我使用的是NodePort

vi redis-ss.yaml

---apiVersion: v1kind: Servicemetadata:  labels:    k8s.kuboard.cn/layer: db    k8s.kuboard.cn/name: redis  name: redis-ss  namespace: jxbpspec:  ports:    - name: imdgss      port: 6379      protocol: tcp      targetPort: 6379      nodePort: 6379  selector:    k8s.kuboard.cn/layer: db    k8s.kuboard.cn/name: redis  type: NodePort

创建名称为:redis-ss的服务。

在K8S集群中暴露6379端口,并且会对labels namek8s.kuboard.cn/name: redis的pod进行负载均衡

然后在K8S集群中,就可以通过redis-ss:6379,对redis集群进行访问。

kubectl get service -n jxbp>NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                                                         AGEredis-hs        ClusterIP   None            <none>        6379/TCP                                                        76mredis-ss        NodePort    10.96.54.201    <none>        6379:6379/TCP                                                   2s

1.5 SpringBoot项目配置

spring.redis.cluster.nodes=redis-ss:6379

1.6相关疑问分析

至此,大家可能会疑惑,那为什么没有使用稳定的标志,Redis Pod也能正常进行故障转移呢?这涉及了Redis本身的机制。因为,Redis集群中每个节点都有自己的NodeId(保存在自动生成的nodes.conf中),并且该NodeId不会随着IP的变化和变化,这其实也是一种固定的网络标志。也就是说,就算某个Redis Pod重启了,该Pod依然会加载保存的NodeId来维持自己的身份。我们可以在NFS上查看redis-0的nodes.conf文件:

vi /opt/nfs/pv1/nodes.conf> f6d4993467a4ab1f3fa806f1122edd39f6466394 10.168.235.228:6379@16379 slave ebed24c8fca9ebc16ceaaee0c2bc2e3e09f7b2c0 0 1670316449064 2 connectedebed24c8fca9ebc16ceaaee0c2bc2e3e09f7b2c0 10.168.235.240:6379@16379 myself,master - 0 1670316450000 2 connected 5461-10922955e1236652c2fcb11f47c20a43149dcd1f1f92b 10.168.235.255:6379@16379 master - 0 1670316449565 1 connected 0-5460574c40485bb8f6cfaf8618d482efb06f3e323f88 10.168.235.224:6379@16379 slave 955e1236652c2fcb11f47c20a43149dcd1f1f92b 0 1670316449000 1 connected91bd3dc859ce51f1ed0e7cbd07b13786297bd05b 10.168.235.237:6379@16379 slave fe0b74c5e461aa22d4d782f891b78ddc4306eed4 0 1670316450672 3 connectedfe0b74c5e461aa22d4d782f891b78ddc4306eed4 10.168.235.253:6379@16379 master - 0 1670316450068 3 connected 10923-16383vars currentEpoch 3 lastVoteEpoch 0

如上,第一列为NodeId,稳定不变;第二列为IP和端口信息,可能会改变。

这里,我们介绍NodeId的两种使用场景:

当某个Slave Pod断线重连后IP改变,但是Master发现其NodeId依旧, 就认为该Slave还是之前的Slave。

当某个Master Pod下线后,集群在其Slave中选举重新的Master。待旧Master上线后,集群发现其NodeId依旧,会让旧Master变成新Master的slave。

感谢各位的阅读,以上就是“k8s如何部署redis集群”的内容了,经过本文的学习后,相信大家对k8s如何部署redis集群这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: k8s如何部署redis集群

本文链接: https://www.lsjlt.com/news/349584.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • k8s如何部署redis集群
    这篇文章主要讲解了“k8s如何部署redis集群”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“k8s如何部署redis集群”吧!redis集群搭建1.1使用redis-cli创建集群#&nb...
    99+
    2023-07-05
  • 如何在K8s上部署Redis集群
    这篇文章将为大家详细讲解有关如何在K8s上部署Redis集群,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、前言 架构原理:每个Master都可以拥有多个Slave。当...
    99+
    2022-10-18
  • k8s部署redis cluster集群的实现
    目录Redis 介绍为什么要用Redis什么是Redis Cluster集群k8s以StatefulSet方式部署redis cluster集群:部署nfs创建pv部署redis初始...
    99+
    2022-11-12
  • redis如何部署集群
    这篇文章主要介绍“redis如何部署集群”,在日常操作中,相信很多人在redis如何部署集群问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”redis如何部署集群”的疑惑有所帮...
    99+
    2022-10-19
  • 在K8s上部署Redis集群的方法步骤
    目录一、前言 二、准备操作 三、StatefulSet简介 四、部署过程 1.创建NFS存储 2.创建Configmap 3.创建Headless service 4.创建Redis...
    99+
    2022-11-12
  • k8s集群部署springboot项目
    一、前言 本篇,我们将基于k8s集群,模拟一个比较接近实际业务的使用场景,使用k8s集群部署一个springboot的项目,我们的需求是: 部署SpringBoot项目到阿里云服务器 ; 基于容器打包,推送私有镜像仓库 ; 采用K8S集群...
    99+
    2023-09-06
    k8s集群部署java应用 k8s部署springboot k8s部署java应用 k8s部署微服务项目 k8s部署微服务
  • k8s怎么部署nginx集群
    要部署一个nginx集群,首先需要安装和配置Kubernetes(k8s)环境。以下是部署一个简单nginx集群的步骤:1. 安装和...
    99+
    2023-10-23
    k8s nginx
  • k8s部署redis集群搭建过程示例详解
    目录写在前面一、redis集群搭建1.1使用redis-cli创建集群1.2redis集群状态验证(可选)1.3重启pod,验证集群(可选)1.4创建Service服务1.5 Spr...
    99+
    2023-02-21
    k8s部署搭建redis集群 k8s redis集群搭建
  • k8s部署redis集群实现过程实例详解
    目录写在前面前置准备一、nfs安装二、SC、PV 创建2.1创建SC2.2创建PV三、redis集群搭建3.1创建headless服务3.2创建redis对应pod集群写在前面 一...
    99+
    2023-02-21
    k8s部署redis集群 k8s部署redis
  • k8s部署redis集群实现的方法是什么
    这篇文章主要介绍“k8s部署redis集群实现的方法是什么”,在日常操作中,相信很多人在k8s部署redis集群实现的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”k8s部署redis集群实现的方法...
    99+
    2023-07-05
  • Ansible部署K8s集群的方法
    目录检查网络:k8s-check.yaml检查k8s各主机的网络是否可达;检查k8s各主机操作系统版本是否达到要求;配置k8s集群dns解析: k8s-hosts-cfg.yaml配...
    99+
    2022-11-13
  • k8s集群部署eureka的方法
    这篇文章主要介绍“k8s集群部署eureka的方法”,在日常操作中,相信很多人在k8s集群部署eureka的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”k8s集群部署eureka的方法”的疑惑有所帮助!...
    99+
    2023-06-19
  • Kubernetes中如何使用Rancher部署K8S集群
    本篇文章给大家分享的是有关Kubernetes中如何使用Rancher部署K8S集群,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.安装Rancher这里使用三台机器来搭建K...
    99+
    2023-06-19
  • Redis群集部署详解
    博文大纲:一、Redis群集相关概念二、部署Redis群集 1、部署环境 2、配置Redis实例 3、配置node06主机的多Redis实例 4、主机node01安装配置ruby的运行环境,便于管理Re...
    99+
    2022-10-18
  • Redis集群部署方法
    本篇内容介绍了“Redis集群部署方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-18
  • 怎么部署redis集群
    要部署Redis集群,您可以按以下步骤进行操作:1. 安装Redis:在每个节点上安装Redis服务器。您可以从Redis官方网站上...
    99+
    2023-08-31
    redis
  • 基于k8s如何部署Session模式Flink集群
    这篇文章主要介绍“基于k8s如何部署Session模式Flink集群”,在日常操作中,相信很多人在基于k8s如何部署Session模式Flink集群问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”基于k8s如何...
    99+
    2023-07-05
  • 如何部署redis分布式集群
    Redis集群架构图上图蓝色为redis集群的节点。节点之间通过ping命令来测试连接是否正常,节点之间没有主区分,连接到任何一个节点进行操作时,都可能会转发到其他节点。1、Redis的容错机制节点之间会定...
    99+
    2022-10-18
  • 如何部署Redis 4.0集群环境
    本篇内容主要讲解“如何部署Redis 4.0集群环境”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何部署Redis 4.0集群环境”吧!实验环境: Red...
    99+
    2022-10-19
  • k8s下mysql容器集群怎么部署
    在Kubernetes下部署MySQL容器集群可以使用StatefulSet来管理。下面是一个示例:1. 创建一个MySQL配置文件...
    99+
    2023-09-23
    mysql k8s
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作