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

前言

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 控制台 → 应用中心。

找到 QKE 立即部署即可。

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

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

安装 Redis 集群

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

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

①配置 redis.conf 字典;

②创建 redis 服务;

③容器组配置;

④存储设置;

⑤高级设置。

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

配置 redis.conf 字典

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

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

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

创建 Redis 服务

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

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

容器组配置

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

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

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

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

如上图配置:

命令: redis-server

参数: /etc/redis/redis.conf

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

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

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

在这一步有两个操作

添加存储卷模板

挂载配置字典或保密字典

添加存储卷模板

PVC 名称前缀:redis-pvc

容量:10G

挂载路径:

权限:读写

地址:/data

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

挂载配置字典或保密字典

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

选择 redis 的配置字典。

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

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

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

初始化 Redis 集群

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

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

按上图示例 比如访问集群 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 节点的终端,如下图:

进入终端,执行命令:

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

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

2

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

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

主要看上图的这两个参数, 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,初始化命令如下:

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 集群随意一个节点的 终端 执行上面的命令。

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

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

在对集群节点进行验证的时候如果遇到上图的错误 (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服务的创建。

参数

namespace

就写项目名称:

具体 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 。

初始化集群

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

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

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

2

执行结果如下图:

接下来给每个 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

执行结果如下:

验证

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/738079.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

火山引擎数据飞轮实践:在电商场景中,如何建设全链路数据血缘?

数据作为新型生产要素,正支撑企业的数智化转型。但企业数字化建设也存在管理成本高、数据产品使用门槛高、数据资产价值不够的问题,其原因在于业务和数据之间没有形成双向良性驱动。DataLeap可以帮助企业实现数据驱动,通过具体业务中的数据消费数据,实现决策科学、行动敏捷…

IIS发布modules错误和403.14

1、解决IIS启动后报<modules>错误的方案C:\windows\system32\inetsrv\appcmd unlock config -section:system.webServer/modules参考:https://blog.csdn.net/sinat_39826352/article/details/784434322、IIS部署问题之403.14 这是因为一般情况下,IIS接受到请求后,如果…

教你5分钟完成OnlyFans注册,轻松绑卡完成订阅

OnlyFans是一个内容服务平台,内容创作者可以通过这个平台发布视频、照片、甚至直播,并设定付费墙,粉丝需支付一定费用才能解锁内容。BinGoCard可以完美解决包括OnlyFans在内的海外平台订阅问题。什么是OnlyFans? OnlyFans是一个内容服务平台,内容创作者可以通过这个平台发…

669分,武汉市第四十九中传来喜讯,璞公英「教师增值评价系统」助力学业提升!

星光熠熠,梦想启航 武汉第四十九中学传来喜讯! 高三(5)班物理类考生潘俊安同学 以总分669分的优异成绩脱颖而出! 潘俊安同学不仅实现了自我超越, 更为学校的高考历史增添了浓墨重彩的一笔。 三年磨一剑,今朝试锋芒 学霸秘诀就是它! 学霸风采:潘俊安 潘俊安:高考总分6…

(面向土木工程研究生)abaqus结构分析(免费)视频教学

土木工程专业的研究生,很多都需要做数值分析,而数值分析的平台很多人都是选择abaqus。然而,很多研究生却是从未使用过abaqus的,即,对于abaqus,他们是真正的新手,常常会“不知从何下手”!就我所知,他们可能还会遇到的另外一个困难就是“他们的导师可能完全不懂数值分析…

CentOS7修复OpenSSH漏洞升级到OpenSSH 9.8 RPM一键更新包

OpenSSH是SSH(Secure Shell)协议的开源实现,它支持在两个主机之间提供安全的加密通信,广泛用于Linux等系统,通常用于安全远程登录、远程文件传输和其它网络服务。 2024年7月1日,OpenSSH Server中存在的一个远程代码执行漏洞(CVE-2024-6387,又被称为regreSSHion)细节被…

stoi字符串转十进制数越界问题

原因 在项目开发过程中需要将字符串转化成十进制数,起初没有问题。但是在之后的开发过程中程序在运行时突然发生崩溃,由于没有做异常处理,报错信息也不明显。最后发现是因为某个字符串转化的字符串转化的十进制数超过了int的范围。 c++中各数据类型取值范围解决方法 改用sto…

C#-听说有人不推荐使用Linq!?

先说结论 linq和直接遍历的性能差异点主要还是迭代方式,数组和字符串这类的foreach都是专门有优化的,而linq都是通用的泛型调用迭代器,如果刚好遇到这类数据又需要高性能就尽量不用linq,其他类型或性能要求不高的还是linq香。(ps:linq写的不好不能怪linq) 背景 起初是看到有…

曙光服务器系统蓝屏数据恢复

一、蓝屏原因分析 首先,需要分析导致曙光服务器系统蓝屏的具体原因。蓝屏通常是由于操作系统或硬件设备驱动程序遇到致命错误所致。可能的原因包括软件冲突、硬件故障(如内存条问题、硬盘故障)、驱动程序过时或不兼容等。 二、安全措施 在进行数据恢复之前,务必确保服务器的…

服务器存储金蝶数据库丢失恢复

一、检查备份情况 确认备份存在: 首先,需要确认是否有金蝶数据库的备份存在。备份是数据恢复的基础,没有备份的情况下恢复数据将非常困难。 检查备份的完整性和时效性: 验证备份文件的完整性和时效性,确保备份文件没有损坏且包含丢失数据之前的数据库状态。二、使用备份恢…

威联通NAS维修

涉及多个方面,包括硬件故障维修、数据恢复等。 一、维修内容 硬件故障维修: 针对威联通NAS出现的各种硬件故障,如电源故障、主板故障、硬盘故障等,提供检测和维修。 在维修过程中,会仔细检查每个部件,确保找到故障根源并进行修复。 数据恢复: 当威联通NAS中的数据因硬盘…

Fastapi 脚本接口规范优化

Fastapi 脚本接口规范优化 在编写Fastapi脚本提供自动化接口操作时,我们不仅要实现接口功能实用性,也要考虑接口的规范管理,这边以Fastapi官方文档作为一个切入点。 官方接口文档 默认官方接口文档如下图所示,宛如大杂烩一样 /doc接口文档 /redoc接口文档 优化方案 1、根据…

面试官:Java类是如何被加载到内存中的?

类的生命周期都有哪些阶段?类加载的过程是怎样的?面试连环callJava类是如何被加载到内存中的? Java类的生命周期都有哪些阶段? JVM加载的class文件都有哪些来源? JVM在加载class文件时,何时判断class文件的格式是否符合要求?类生命周期 一个类从被加载到虚拟机内存开始,…

招募贴 | 第四期自动驾驶OS开发初阶营报名开启

招募贴 | 第四期自动驾驶OS开发初阶营报名开启 第四期国家智能网联汽车创新中心自动驾驶OS开发初阶训练营将于2024年7月22日开营,现已开启报名,诚邀对自动驾驶底层软件开发感兴趣的学员加入,一起驶入自动驾驶的快车道,共同探索未来的无限可能。从训练营能学到什么? 训练营…

STM32L073RZT 调试SPI问题

现象描述: spi通信一次后,第二次通信spi的SR寄存器异常0xFF31(MODF, CRCERR, RXNE),通信失败。 以下为调用流程及相关代码:NFC_ID(); NFC_REG_B_TEST();//SPI 读 void SPI_Read_Data(uint8_t* w_data, uint32_t w_size, uint8_t* r_data, uint32_t r_size) {SET_SPI_CSS(G…

Spark大数据处理:技术、应用与性能优化(全)PDF书籍推荐分享

本书从一个系统化的视角,秉承大道至简的主导思想,介绍Spark中最值得关注的内 容,讲解Spark部署、开发实战,并结合Spark的运行机制及拓展,帮读者开启Spark技术之旅。 Spark大数据处理:技术、应用与性能优化(全)PDF下载 Spark已经在全球范围内广泛使用,无论是Intel、Yahoo…

LaTeX 编辑协作平台 Overleaf 安装和使用教程

在学术界和科技行业,LaTeX 已成为撰写高质量文档的标准工具。然而,传统的 LaTeX 使用体验常常伴随着以下挑战:学习曲线陡峭 环境配置复杂 多人协作困难 实时预览不便当然,市面上不乏很多在线 LaTeX 编辑平台,但它们大多是封闭的商业服务,无法完全满足用户对数据隐私和自主…

半个月6次面试,终于进百度HR面了

和大家分享一下来自粉丝的面经投稿,他在最近半个月内疯狂的面试,光百度就约面了两个岗位,一共进行了6场面试,并且其中一个进到了 HR 面。今天和大家分享一下来自粉丝的面经投稿,他在最近半个月内疯狂的面试,光百度就约面了两个岗位,一共进行了6场面试,并且其中一个进到…

使用钉钉Oauth2授权登录Odoo配置

准备工作 需要用到的模块: Odoo/auth_oauth OCA/server-auth/auth_oidc 因为钉钉的Oauth授权流程比较特殊,需要继承改造res.users上的几个方法 models\res_users.pyclass ResUsers(models.Model):_inherit = "res.users"dingtalk_userid = fields.Char(Dingtalk Us…

推荐一款Win11主题WPF UI框架

最近在微软商店,官方上架了新款Win11风格的WPF版UI框架【WPF Gallery Preview 1.0.0.0】,这款应用引入了前沿的Fluent Design UI设计,为用户带来全新的视觉体验。最近在微软商店,官方上架了新款Win11风格的WPF版UI框架【WPF Gallery Preview 1.0.0.0】,这款应用引入了前沿的…