在 KubeSphere 中部署高可用 Redis 集群

这篇具有很好参考价值的文章主要介绍了在 KubeSphere 中部署高可用 Redis 集群。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者:余生大大,大数据开发工程师,云原生爱好者,KubeSphere 社区用户。

前言

Redis 是在开发过程中经常用到的缓存中间件,在生产环境中为了考虑稳定性高可用一般为集群模式的部署。

常规部署在虚拟机上的方式配置繁琐并且需要手动重启节点,而使用 K8s 进行 Redis 集群的部署有以下优点:

  • 安装便捷:使用镜像或者 yaml 配置文件即可一件安装
  • 自动调度:容器挂掉后会自动调度重启和资源分配
  • 缩扩容方便:在 扩容缩容 方面的优点无需多说,一键伸缩
  • 稳定高效K8s 在整个集群上进行调度,只要整个集群不挂掉总会调度到合适节点重启容器服务

安装 Redis 集群

我这里新建了一个 test-project 的项目空间来做 Redis 集群所有安装资源的放置,后续在 DNS 上会用到项目空间名称,会标注这一部分,需要注意用自己的项目空间名。

安装集群大概分为以下几步:

  1. 配置 redis.conf 字典;
  2. 创建 redis 服务;
  3. 容器组配置;
  4. 存储设置;
  5. 高级设置。

现在从第一步开始。

1.1 配置 redis.conf 字典

在项目空间的 配置配置字典创建 进行配置字典的创建。

在 KubeSphere 中部署高可用 Redis 集群

名称就叫 redis-conf 然后下一步 添加键值对数据。

在 KubeSphere 中部署高可用 Redis 集群

key 值的内容为 redis.confvalue 值为:

cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-require-full-coverage no
cluster-migration-barrier 1
appendonly yes

创建 Redis 服务

在项目空间的 应用负载服务创建 进行 Redis 服务的创建。

在 KubeSphere 中部署高可用 Redis 集群

选择有状态服务,需要数据存储的服务基本都是有状态的服务。

在 KubeSphere 中部署高可用 Redis 集群

基本设置里名称就叫 redis-cluster 然后进行重头戏,下一步的容器组配置

容器组配置

这一步的核心就是配置 Redis 的容器,集群数量就选择常规的三主三从,那容器的副本数量就是 6 个。

在 KubeSphere 中部署高可用 Redis 集群

容器组副本数量调到 6 个,点击添加容器。

在 KubeSphere 中部署高可用 Redis 集群

镜像选择 docker hubredis6.2.3 版本,并选择使用默认端口,CPU 和内存可以选择性预留,如果不预留就是调度公共资源。

在 KubeSphere 中部署高可用 Redis 集群

选择使用默认端口的话下面的端口设置就是如上图一样都会使用 6379,还有就是配置启动命令。

如上图配置:

  • 命令:redis-server
  • 参数:/etc/redis/redis.conf

参数指向的就是之前字典配置的内容,但是需要下一步存储设置里进行配置字典才能使用。

在 KubeSphere 中部署高可用 Redis 集群

其他内容没有什么需要配置的,选择对勾完成容器配置。

在 KubeSphere 中部署高可用 Redis 集群 更新策略就是推荐的滚动更新,其他也没什么需要修改的,点击下一步配置存储设置

存储设置

在这一步有两个操作

  • 添加持久卷声明模板
  • 挂载配置字典

在 KubeSphere 中部署高可用 Redis 集群

添加持久卷声明模板

PVC 名称前缀:redis-pvc

容量:10G

挂载路径

  • 权限:读写

  • 地址:/data

    在 KubeSphere 中部署高可用 Redis 集群 主要是挂载路径选好,配置好后点击对勾完成配置

挂载配置字典

这一步是挂载我们之前配置的字典 redis-conf,也是我们 redis 启动命令的参数内容。

在 KubeSphere 中部署高可用 Redis 集群

选择 redis 的配置字典。

在 KubeSphere 中部署高可用 Redis 集群

挂载权限为:只读,地址为:/etc/redis;跟上面的命令参数的配置相对应。

在 KubeSphere 中部署高可用 Redis 集群

特定键选择 redis.conf 后面同名 redis.conf,完成后点击对勾回到存储设置。

在 KubeSphere 中部署高可用 Redis 集群

配置好后就入上图,点击下一步进入最后的高级设置。

在 KubeSphere 中部署高可用 Redis 集群

高级设置里是一些额外配置,可以根据自己场景选择调整配置,调成完成后点击创建 进行 Redis 集群容器的创建

初始化 Redis 集群

创建完 Redis 服务后点击 redis 的服务名称进入 redis 服务详情,详情如下图:

在 KubeSphere 中部署高可用 Redis 集群

6 个 redis 的容器组都启动成功了,接下来就是初始化集群;因为我们配置的 redis 的服务是有状态服务 (Headless) 所以访问模式可以通过内部 DNS,访问格式是:(容器名称).( 容器 DNS).svc.cluster.local

在 KubeSphere 中部署高可用 Redis 集群

按上图示例 比如访问集群 1 节点访问地址就是 redis-cluster-v1-1DNS 地址 redis-cluster.test-projectsvc.cluster.local,完整地址如下:

redis-cluster-v1-1.redis-cluster.test-project.svc.cluster.local

在 redis 集群的非第一节点的其他节点终端内通过这个地址进行访问验证他们是否互通,进入 3 节点的终端,如下图:

在 KubeSphere 中部署高可用 Redis 集群

进入终端,执行命令:

redis-cli -h redis-cluster-v1-1.redis-cluster.test-project.svc.clusterredis.local

如果能如下图一样跳转到 v1-1 的节点上就代表这两个节点互通。

在 KubeSphere 中部署高可用 Redis 集群

执行命令:cluster info 查看节点的集群情况。

在 KubeSphere 中部署高可用 Redis 集群

主要看上图的这两个参数,nodes1 表明当前节点只有 1 个,cluster_size 表明当前没有 master 节点,所以目前还不是集群结构,info 属性的详解在此列出:

  • cluster_state:ok 状态表示集群可以正常接受查询请求。fail 状态表示,至少有一个哈希槽没有被绑定(说明有哈希槽没有被绑定到任意一个节点),或者在错误的状态(节点可以提供服务但是带有 FAIL 标记),或者该节点无法联系到多数 master 节点。
  • cluster_slots_assigned:已分配到集群节点的哈希槽数量(不是没有被绑定的数量)。16384 个哈希槽全部被分配到集群节点是集群正常运行的必要条件。
  • cluster_slots_ok:哈希槽状态不是 FAIL 和 PFAIL 的数量。
  • cluster_slots_pfail:哈希槽状态是 PFAIL 的数量。只要哈希槽状态没有被升级到 FAIL 状态,这些哈希槽仍然可以被正常处理。PFAIL 状态表示我们当前不能和节点进行交互,但这种状态只是临时的错误状态。
  • cluster_slots_fail: 哈希槽状态是 FAIL 的数量。如果值不是 0,那么集群节点将无法提供查询服务,除非 cluster-require-full-coverage 被设置为 no。
  • cluster_known_nodes:集群中节点数量,包括处于握手状态还没有成为集群正式成员的节点。
  • cluster_size:至少包含一个哈希槽且能够提供服务的 master 节点数量。
  • cluster_current_epoch:集群本地 Current Epoch 变量的值。这个值在节点故障转移过程时有用,它总是递增和唯一的。
  • cluster_my_epoch:当前正在使用的节点的 Config Epoch 值。这个是关联在本节点的版本值。
  • cluster_stats_messages_sent:通过 node-to-node 二进制总线发送的消息数量。
  • cluster_stats_messages_received:通过 node-to-node 二进制总线接收的消息数量。

IP 地址初始化集群

先尝试使用 ip + port 的方式初始化集群,但是在 K8s 中启动服务 ip 都会变化,所以最终的结果还是要用 DNS 方式进行集群初始化。

执行本步后再想修改为 DNS 地址初始化需要从来一遍,如果不想麻烦的同学可以直接跳过。

在 KubeSphere 中部署高可用 Redis 集群 记录 redis 集群的所有 ip+port,初始化命令如下:

redis-cli --cluster create 10.233.70.30:6379 10.233.70.32:6379 10.233.90.41:6379 10.233.90.43:6379 10.233.96.47:6379 10.233.96.50:6379 --cluster-replicas 1

进入 redis 集群随意一个节点的终端执行上面的命令。

在 KubeSphere 中部署高可用 Redis 集群在 KubeSphere 中部署高可用 Redis 集群

如上图集群初始化就完成了,再输入命令 redis-cli 进入命令端,再执行 cluster info 查看集群信息。

在 KubeSphere 中部署高可用 Redis 集群

现在我们的集群节点有了 6 个,master 节点也有了三个,集群建立完成,后面的操作选择 master 节点进行操作。

在 KubeSphere 中部署高可用 Redis 集群

在对集群节点进行验证的时候如果遇到上图的错误 (error) MOVED 2589 10.233.70.30:6379 是因为 redis-cli 没有开启集群模式,将命令修改为 redis-cli -c 就切换为集群模式了。

使用内部 DNS 初始化

使用 ip 地址的方式在每次 K8s 调度 redisip 都会发生变化,所以在 K8s 集群中使用 ip 方式初始化集群并不太合适,但是如果使用内部 DNS 直接跟上面一样初始化集群会出现错误,因为 redis 对域名的支持并不太好,所以这时候可以用 Redis-tribe

创建 Redis-tribe 服务

创建自定义服务,选择编辑 YAML

在 KubeSphere 中部署高可用 Redis 集群

参数 namespace 就写项目名称:

在 KubeSphere 中部署高可用 Redis 集群

具体 YAML 内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: test-project
  labels:
    app: redis-cluster-tools
  name: redis-cluster-tools
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis-cluster-tools
  template:
    metadata:
      labels:
        app: redis-cluster-tools
      name: pos-redis
    spec:
     containers:
     - name: pos-redis
       image: sunnywang/redis-tools-ubuntu:v0.5.1
       imagePullPolicy: IfNotPresent
       args:
       - /bin/bash
       - -c
       - sleep 3600

创建好后在容器组内找到 redis-cluster-tools

在 KubeSphere 中部署高可用 Redis 集群

初始化集群

点击容器名称进入容器详情再进入到终端里。

在 KubeSphere 中部署高可用 Redis 集群

先执行以下命令初始化 master 节点,这时候之前的内部 DNS 的域名就有用了。

redis-trib.py create `dig +short redis-cluster-v1-0.redis-cluster.test-project.svc.cluster.local`:6379 `dig +short redis-cluster-v1-1.redis-cluster.test-project.svc.cluster.local`:6379 `dig +short redis-cluster-v1-2.redis-cluster.test-project.svc.cluster.local`:6379

执行结果如下图:

在 KubeSphere 中部署高可用 Redis 集群

接下来给每个 master 节点绑定对应的副本节点,总共三个:

0 节点->3 节点

redis-trib.py replicate --master-addr `dig +short redis-cluster-v1-0.redis-cluster.test-project.svc.cluster.local`:6379 --slave-addr `dig +short redis-cluster-v1-3.redis-cluster.test-project.svc.cluster.local`:6379

1 节点->4 节点

redis-trib.py replicate  --master-addr `dig +short redis-cluster-v1-1.redis-cluster.test-project.svc.cluster.local`:6379 --slave-addr `dig +short redis-cluster-v1-4.redis-cluster.test-project.svc.cluster.local`:6379

2 节点->5 节点

redis-trib.py replicate --master-addr `dig +short redis-cluster-v1-2.redis-cluster.test-project.svc.cluster.local`:6379 --slave-addr `dig +short redis-cluster-v1-5.redis-cluster.test-project.svc.cluster.local`:6379

执行结果如下:

在 KubeSphere 中部署高可用 Redis 集群

验证

随便进入一个集群节点的终端,还是执行 cluster info 命令,查看集群信息。

在 KubeSphere 中部署高可用 Redis 集群

使用基础命令进行验证,验证集群模式的 redis-cli 需要加-c

在 KubeSphere 中部署高可用 Redis 集群

验证集群模式可以正常使用。

本文由博客一文多发平台 OpenWrite 发布!文章来源地址https://www.toymoban.com/news/detail-413635.html

到了这里,关于在 KubeSphere 中部署高可用 Redis 集群的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kubernetes(k8s)部署高可用多主多从的Redis集群

    首先你需要一个Kubernetes集群,如图我已经安装好了一个Kubernetes集群: 如果你还没有Kubernetes集群可参考我写的文章:https://blog.csdn.net/m0_51510236/article/details/130842122 你还需要一个可动态供应的存储类,我之前已经写过一篇关于安装NFS动态供给存储类的文章:https://blog.csdn.net/m

    2024年02月09日
    浏览(51)
  • 使用kubekey部署k8s集群和kubesphere、在已有k8s集群上部署kubesphere

    环境: centos 7.6、k8s 1.22.17、kubesphere v3.3.0 本篇以kubesphere v3.3.0版本讲解。 kubesphere 愿景是打造一个以 kubernetes 为内核的云原生分布式操作系统,它的架构可以非常方便地使第三方应用与云原生生态组件进行即插即用(plug-and-play)的集成,支持云原生应用在多云与多集群的统一

    2024年02月04日
    浏览(71)
  • kubesphere多集群管理,实现kubernetes多集群同时应用部署

    测试kubesphere多集群管理功能,至少需要两套kubesphere集群环境。 1、准备环境 执行以下命令,集群的节点都需要执行。 2、下载kubesphere安装工具KubeKey 这里我先下载好安装工具,在部署操作系统上进行解压,解压出来就具有了 kk 命令。如果没有执行权限,执行如下命令。 3、准

    2024年02月06日
    浏览(45)
  • KubeSphere部署mysql、redis、nacos

    节点必须能够通过 SSH 连接。 节点上可以使用 sudo/curl/openssl/tar 命令。 建议您的操作系统处于干净状态(不安装任何其他软件),否则可能会发生冲突。 如果您无法从 dockerhub.io 下载容器镜像,建议提前准备仓库的镜像地址(即加速器)。 KubeKey 可以将 Kubernetes 和 KubeSphere 一

    2024年02月03日
    浏览(53)
  • 云原生|kubernetes|centos7下的kubeadm部署的集群内在线部署kubesphere(外部etcd)

    本文将主要就在centos7操作系统下已有的一个利用kubeadm部署的集群内在线安装kubesphere做一个介绍,该kubernetes集群是使用的etcd外部集群。 kubernetes集群的搭建本文不做过多介绍,具体的搭建流程见我的博客: 云原生|kubernetes|kubeadm部署高可用集群(一)使用外部etcd集群_kubeadm

    2024年02月11日
    浏览(45)
  • Redis缓存高可用集群

    作者:京东零售 王雷 • 哨兵模式 在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般。 特别是在主从切换的瞬间存在

    2023年04月10日
    浏览(39)
  • Redis高并发高可用(集群)

    Redis Cluster是Redis的分布式解决方案,在3.0版本正式推出,有效地解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构方案达到负载均衡的目的。之前,Redis分布式方案一般有两种: 1、客户端分区方案,优点是分区逻辑可控,缺点是需要自己

    2024年01月24日
    浏览(46)
  • 基于kubesphere的k8s环境部署三节点的rook-ceph集群

    这次实验记录的是使用虚拟机搭建的使用了三个计算存储节点的rook-ceph集群,模拟真实的使用场景。补充之前发的只有单点的部署方式。 Rook is an open source cloud-native storage orchestrator, providing the platform, framework, and support for Ceph storage to natively integrate with cloud-native environments. Ro

    2024年02月11日
    浏览(58)
  • Redis高可用(主从复制,哨兵,集群)

    主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。 默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从

    2024年02月07日
    浏览(35)
  • Redis高可用主从复制、哨兵、集群

    在Redis中,实现高可用的技术主要包括持久化、主从复制、哨兵和集群。 1、主从复制 主从复制时高可用Redis的基础,哨兵和cluster都是在主从复制基础上实现高可用的,主从复制主要实现了数据的多级备份,以及对与读操作的负载均衡和简单的故障恢复。 缺陷:①故障恢复无

    2024年02月12日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包