0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

K8S学习教程(二):在 PetaExpress KubeSphere容器平台部署高可用 Redis 集群

jf_57681485 来源:jf_57681485 作者:jf_57681485 2024-07-03 15:30 次阅读

前言

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

在制定Redis集群的部署策略时,常规部署在虚拟机上的方式配置繁琐并且需要手动重启节点,相较之下,使用 PetaExpress 提供的

Kubernetes(k8s) 服务 进行 Redis 集群的部署,则展现出了显著的优势:

1、安装便捷:使用镜像或者 yaml 配置文件即可一件安装,极大地简化了安装流程

2、缩扩容方便:在 扩容 、 缩容 方面的优点一键伸缩,无需复杂的配置和繁琐的步骤

3、智能自动调度:容器意外挂掉后能够迅速进行自动调度重启和资源分配

4、高效且稳定: Kubernetes 在整个集群上进行调度,只要整个集群不挂掉总会调度到合适节点重启容器服务

阅读全文,后面告诉你怎么免费白拿红包

在 PetaExpress KubeSphere容器平台部署 Kubernetes集群

在 Peta Express 中部署 Kubernetes 非常简单,直接使用 Peta Express 中内置的 QKE 即可,登录到 Peta Express 控制台,在产品与服务中找到 AppCenter 控制台 → 应用中心

wKgZomaE_LWAIzZtAACo5pTAtaY093.png

wKgaomaE_e6ANtisAADZ95q5nU0866.jpg

找到 QKE 立即部署即可。

wKgaomaE_LyAEfSSAAJiyIgwpvs755.png

wKgZomaE_fCAZBiLAAI8Li06Z9g040.jpg

按照提示输入名称,选择集群规模等信息,直接提交就行了。但需要注意集群的配置,如果是开发测试可以选择 “基础型开发环境” 或 “企业型测试环境”,如果是生产的话则可以选择 “基础型生产环境” 或 “企业型生产环境”,也可以自定义集群规模和HA。

wKgZomaE_MOAKqGfAAEvz12OjTg619.png

wKgaomaE_fGAKhD_AAG4R7Gx8os964.jpg

根据集群的规模,部署时间大致2分钟到10分钟不等,还是非常快的。部署完 Kubernetes, 接下来我们就可以开始进入正题 安装 Redis 了。

安装 Redis 集群

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

Redis 集群的安装流程大致分为以下几个关键步骤:

①配置 redis.conf 字典;

②创建 redis 服务;

③容器组配置;

④存储设置;

⑤高级设置。

接下来,我们将从第一步开始,逐步完成 Redis 集群的安装和配置过程。

配置 redis.conf 字典

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

wKgaomaE_N6AWY1yAAHI5pADe1g312.png

wKgZomaE_fGAT4znAAEDkgT9fTs119.jpg

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

wKgaomaE_OSATmH3AAGwcqRIQvM766.png

wKgaomaE_fKATkiRAADtMtJBaCM602.jpg

key 值的内容为 redis.conf , value 值为:

创建 Redis 服务

在项目空间的 应用负载 → 工作负载 → 有状态副本集 → 创建 进行 Redis 服务的创建。

wKgZomaE_OuAfMkPAAPtd8yXZR8981.png

wKgZomaE_fOAHvRfAAFrOmGJ6UE400.jpg

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

容器组配置

这一步的核心就是配置 Redis 的容器,集群数量我们通常采用三主三从的集群配置,那容器的副本数量就是 6 个,这样的配置不仅保证了系统的稳定性,也提升了数据的安全性。

wKgaomaE_PCAUSPuAAJGJM4LrfE062.png

wKgaomaE_fSAHw6fAAFTW9P_VVQ727.jpg

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

wKgZomaE_fWAOPOGAAHzm7Vao8g233.jpg

wKgaomaE_PaAKWmcAAVHyD9WPN4837.png


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

wKgZomaE_PuACVQnAAJ7EJ58Yus680.png

wKgZomaE_faAYq62AAF9sprVauE373.jpg

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

如上图配置:

命令: redis-server

参数: /etc/redis/redis.conf

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

wKgZomaE_QGAWOtSAAJTRT6SGCQ399.png

wKgaomaE_feACsLAAAFe8b2U0tc726.jpg

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

wKgaomaE_QaAbhYGAAKGqQblRlY358.png

wKgZomaE_feAPvDyAAGVXjsfLeg875.jpg

更新策略就是推荐的 滚动更新 ,其他也没什么需要修改的,点击下一步配置存储设置 。
存储设置

在这一步有两个操作

添加存储卷模板

挂载配置字典或保密字典

wKgaomaE_QyAHyE8AAQ-cVB1wiA498.png

wKgaomaE_fiAb3GuAAGQB0ZUoXA131.jpg

**添加存储卷模板**

PVC 名称前缀:redis-pvc

容量:10G

挂载路径:

权限:读写

地址:/data

主要是挂载路径选好,配置好后点击对勾完成配置

wKgaomaE_QyAHyE8AAQ-cVB1wiA498.png

wKgZomaE_fmALPIgAAGpx6R3nRo427.jpg

挂载配置字典或保密字典

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

wKgaomaE_RqAVLwWAASPxyGBU3E214.png

wKgaomaE_fqAGrgCAAEz4SZrWsM758.jpg

选择 redis 的配置字典。

wKgaomaE_R-AbPXYAAIUExAUKCI450.png

wKgZomaE_fuAMeEuAAE5v0HRkkU712.jpg

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

wKgaomaE_SSAIMh6AAIcSqwiN4M591.png

wKgaomaE_f2AaSlBAAE9wIV74Uc848.jpg

特定键选择 redis.conf 后面同名 redis.conf ,完成后点击对勾回到存储设置。配置好后就入上图,点击下一步进入最后的高级设置。

wKgZomaE_SqAaKM3AAIpJbnyNZo819.png

wKgZomaE_f-ARO6wAAHWqOkwQB8105.jpg

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

初始化 Redis 集群

创建完 Redis 服务后 在项目空间的 应用负载 → 服务 → 指定redis服务 进入 redis 服务详情,详情如下图:

wKgaomaE_TGAArnFAATvZjug_e4721.png

wKgaomaE_gCAQQvXAAFCsE4lgY0745.jpg

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

wKgaomaE_TiAZXTaAAIo0vqakhY255.png

wKgZomaE_gGAUsNyAAJUKrrulbA180.jpg

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

1

redis-cluster-v1-

1

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

2

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

wKgZomaE_USAfLThAAXfCTuP2-c964.png

wKgaomaE_gGAWK5jAAGuW-oXgwI086.jpg

进入终端,执行命令:

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

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

2

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

wKgZomaE_UuAIi5rAANVsLBvp3s411.png

wKgZomaE_gKAX45DAADUwzdgls0535.jpg

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

wKgaomaE_VCAVd4xAAMt6dCfa2c682.png

wKgaomaE_gOAGgK1AAGwokRh4HU238.jpg

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

cluster_state :ok 状态表示集群可以正常接受查询请求。fail 状态表示,至少有一个哈希槽没有被绑定(说明有哈希槽没有被绑定到

任意一个节点),或者在错误的状态(节点可以提供服务但是带有 FAIL 标记),或者该节点无法联系到多数 master 节点。

cluster_slots_assigned :已分配到集群节点的哈希槽数量(不是没有被绑定的数量)。16384 个哈希槽全部被分配到集群节点是集群

正常运行的必要条件。

cluster_slots_ok :哈希槽状态不是 FAIL 和 PFAIL 的数量。

cluster_known_nodes :集群中节点数量,包括处于握手状态还没有成为集群正式成员的节点。

cluster_slots_pfail :哈希槽状态是 PFAIL 的数量。只要哈希槽状态没有被升级到 FAIL 状态,这些哈希槽仍然可以被正常处理。

PFAIL 状态表示我们当前不能和节点进行交互,但这种状态只是临时的错误状态。

cluster_slots_fail : 哈希槽状态是 FAIL 的数量。如果值不是 0,那么集群节点将无法提供查询服务,除非 cluster-require-full

coverage 被设置为 no。

cluster_current_epoch :集群本地 Current Epoch 变量的值。这个值在节点故障转移过程时有用,它总是递增和唯一的。

cluster_my_epoch :当前正在使用的节点的 Config Epoch 值。这个是关联在本节点的版本值。

cluster_size :至少包含一个哈希槽且能够提供服务的 master 节点数量。

cluster_stats_messages_sent :通过 node-to-node 二进制总线发送的消息数量。

cluster_stats_messages_received :通过 node-to-node 二进制总线接收的消息数量。

IP 地址初始化集群(初始化方案一)

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

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

记录 redis 集群的所有 ip+port,初始化命令如下:

wKgaomaE_VmAEQvCAACjEjFm29A263.png

wKgZomaE_gWAOrBuAAGYFoYs_Ac298.jpg

1redis-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:6

2

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

wKgaomaE_gaAO_teAATXs8lfmDE575.jpg

wKgZomaE_V6ABqb1AAEWF9T6QPc208.png


wKgZomaE_geAbbK8AARZGoImq1I356.jpg

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

wKgZomaE_WSATSdtAAI9Z7pbz0Q982.png

wKgaomaE_giAYi2YAANyvdSRfPY443.jpg


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

wKgaomaE_WqAQKGuAAJ_Ix2W9mg510.png

wKgaomaE_gqAcZtVAAMB4qcxMvI027.jpg

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

使用内部 DNS 初始化(初始化方案二)

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

创建 Redis-tribe 服务

在项目空间的 应用负载 → 工作负载 → 创建 → 编辑 YAML 进行Redis-tribe服务的创建。

wKgZomaE_XOAOyvvAAJVgWylp5g674.png

wKgZomaE_g6AN7o4AAIrcN-XP2Y583.jpg

参数

namespace

就写项目名称:

wKgaomaE_XyAcgcaAAIN3_dJpDQ348.png

wKgaomaE_g-ATGsfAAF0e4oV6vw461.jpg

具体 YAML 内容如下:

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

初始化集群

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

1apiVersion: apps/v1

2kind: Deployment

3metadata:

4namespace: test-project

5labels:

6app: redis-cluster-tools

7name: redis-cluster-tools

8spec:

9replicas: 1

10selector:

11matchLabels:

12app: redis-cluster-tools

13template:

14metadata:

15labels:

16app: redis-cluster-tools

17name: pos-redis

18spec:

19containers:

20- name: pos-redis

21image: sunnywang/redis-tools-ubuntu:v0.5.1

22imagePullPolicy: IfNotPresent

23args:

24- /bin/bash

25- -c

26- sleep 3600

27

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

wKgaomaE_YeAfvR0AAIRj-7Nk3c182.png

wKgaomaE_hCAeww5AAFaCUpIPvk111.jpg

初始化集群

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

wKgaomaE_Y2AXSodAAWp8HeHqJU996.png

wKgaomaE_hKAC1XhAADzzvIA2dg710.jpg

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

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

2

执行结果如下图:

wKgaomaE_aOAbxgkAAJS63dvxw8204.png

wKgZomaE_hOAVMkCAAHwc5Kdlkk098.jpg

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

0 节点->3 节点

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

2

1 节点->4 节点

1redis-trib.py replicate --master-addr `dig +short redis-cluster-v1-0.redis-cluster.test-project.svc.cluster.local

2

2 节点->5 节点

1redis-trib.py replicate --master-addr `dig +short redis-cluster-v1-1.redis-cluster.test-project.svc.cluster.loca

2

执行结果如下:

wKgZomaE_WSATSdtAAI9Z7pbz0Q982.png

wKgZomaE_hWAfSrBAAT7qNSJcNI855.jpg

验证

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

wKgZomaE_bGAZyomAAHgWppHsSY325.png

wKgZomaE_haAYzkwAAG4XXQ4rPw413.jpg

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

wKgZomaE_biAHNabAAEnSisrqiM315.png

wKgaomaE_heAIG4cAALB-gJQqYA531.jpg

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

凭此文章可以去petaexpress官网发工单免费白拿10美元红包,数量有限先到先得。申领步骤:注册→登录→发工单回复“文章网址+文章标题+申请奖励”

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Redis
    +关注

    关注

    0

    文章

    368

    浏览量

    10776
  • kubesphere
    +关注

    关注

    0

    文章

    3

    浏览量

    184
收藏 人收藏

    评论

    相关推荐

    K8S集群中使用JDOS KMS服务对敏感数据安全加密

    基本概念 KMS,Key Management Service,即密钥管理服务,K8S集群中,以驱动和插件的形式启用对Secret,Configmap进行加密。以保护敏感数据, 驱动和插件需要
    的头像 发表于 08-09 16:00 93次阅读
    <b class='flag-5'>K8S</b><b class='flag-5'>集群</b>中使用JDOS KMS服务对敏感数据安全加密

    如何使用Kubeadm命令PetaExpress Ubuntu系统上安装Kubernetes集群

    Kubernetes,通常缩写为K8s,是一个开源的容器编排平台,旨在自动化容器化应用的部署、扩展和管理。有了Kubernetes,您可以轻
    的头像 发表于 07-15 13:31 675次阅读
    如何使用Kubeadm命令<b class='flag-5'>在</b><b class='flag-5'>PetaExpress</b> Ubuntu系统上安装Kubernetes<b class='flag-5'>集群</b>

    K8S学习教程三:PetaExpress KubeSphere 容器部署 Wiki 系统 wiki.js 并启用中文全文检索

    K8S学习教程(三):PetaExpress KubeSphere 容器
    的头像 发表于 07-08 17:03 428次阅读
    <b class='flag-5'>K8S</b><b class='flag-5'>学习</b>教程三:<b class='flag-5'>在</b><b class='flag-5'>PetaExpress</b> <b class='flag-5'>KubeSphere</b> <b class='flag-5'>容器</b><b class='flag-5'>部署</b> Wiki 系统 wiki.js 并启用中文全文检索

     K8S学习教程一:使用PetaExpress云服务器安装Minikube 集群

      什么是Minikube Minikube是一款工具,主要用于本地运行 Kubernetes 集群。Kubernetes 开源的平台,用于自动化容器化应用的
    的头像 发表于 07-01 15:41 207次阅读
     <b class='flag-5'>K8S</b><b class='flag-5'>学习</b>教程一:使用<b class='flag-5'>PetaExpress</b>云服务器安装Minikube <b class='flag-5'>集群</b>

    K8S落地实践经验分享

    k8s 即 Kubernetes,是一个开源的容器编排引擎,用来对容器化应用进行自动化部署、 扩缩和管理。
    的头像 发表于 01-02 11:45 873次阅读
    <b class='flag-5'>K8S</b>落地实践经验分享

    redis容器内怎么查看redis日志

    redis是一款流行的开源内存数据库,常用于缓存、消息队列、任务管理等场景。使用redis时,了解如何查看redis日志对于排查问题、监控性能和分析应用程序行为非常重要。
    的头像 发表于 12-05 10:10 2873次阅读

    redis容器部署并用编程演示sb整合

    Redis 是一个开源的高性能的内存数据库,常用于缓存、会话管理和消息队列的存储。容器化的架构中,使用容器部署
    的头像 发表于 12-05 10:08 319次阅读

    redis查看集群状态命令

    Redis 是一个开源的、内存中的数据结构存储系统,提供了一系列命令来管理和操作数据。 Redis 中,集群是一个由多个 Redis 实例
    的头像 发表于 12-04 11:39 826次阅读

    redis集群中的hash一致性算法的理解

    Redis集群是一种为了增强Redis的可扩展性和可用性而设计的集群方案。
    的头像 发表于 12-04 10:45 612次阅读

    redis集群状态查看命令

    Redis集群是一种可用性的分布式架构,可以通过多个节点实现数据的复制和负载均衡。为了维护集群的稳定性和可靠性,管理员需要监控和查看
    的头像 发表于 12-04 10:44 986次阅读

    Windows Docker部署Redis的流程

    由于 Docker 部署 Redis 后,Redis 容器中默认是没有 redis.conf 配置文件的,需要自己手动挂在进去。
    的头像 发表于 11-27 10:02 710次阅读
    Windows Docker<b class='flag-5'>部署</b><b class='flag-5'>Redis</b>的流程

    multus cni是什么?k8s多网卡方案之multus用法介绍

    k8s的环境中启动一个容器,默认情况下只存在两个虚拟网络接口(loopback 和 eth0), loopback 的流量始终都会在本容器内或本机循环,对业务起到支撑作用的是 eth
    的头像 发表于 11-06 09:35 1608次阅读
    multus cni是什么?<b class='flag-5'>k8s</b>多网卡方案之multus用法介绍

    K8s常见的10个问题排查

    K8S集群状态是排查故障的关键起点。使用kubectl get nodes命令来检查节点状态。如果有节点未能就绪或出现异常状态,可能会对应用程序造成故障。确保基本组件,如etcd、kubelet和kube-proxy等,正常运行。
    发表于 11-01 12:26 1169次阅读
    <b class='flag-5'>K8s</b>常见的10个问题排查

    k8s架构篇:服务部署模式是如何变迁的

    kubernetes,简称 K8s,是用 8 代替中间 8 个字符 “ubernete” 而成的缩写,是一个开源的,用于管理云平台中多个主机上的容器
    的头像 发表于 10-15 15:39 548次阅读
    <b class='flag-5'>k8s</b>架构篇:服务<b class='flag-5'>部署</b>模式是如何变迁的

    K8s集群管理:为什么需要多集群、多集群的优势是什么

    随着K8s和云原生技术的快速发展,以及各大厂商自己的数据中心使用K8s的API进行容器化应用编排和管理,让应用交付本身变得越来越标准化和统一化,并且实现了与底层基础设施的完全解耦,为
    发表于 09-14 10:48 990次阅读
    <b class='flag-5'>K8s</b>多<b class='flag-5'>集群</b>管理:为什么需要多<b class='flag-5'>集群</b>、多<b class='flag-5'>集群</b>的优势是什么