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.rhkb.cn/news/368053.html

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

相关文章

工业路由器与家用路由器的区别

在现代网络环境中,路由器扮演着至关重要的角色。无论是在家庭网络还是在工业网络,选择合适的路由器都至关重要。本文将从多个角度,对工业路由器与家用路由器进行详细比较,帮助您更好地理解二者的区别。 1、安全性 工业路由器&…

软考《信息系统运行管理员》-2.4信息系统运维管理标准

2.4信息系统运维管理标准 信息系统运维的相关标准 ITIL信息技术基础设施库 基于服务生命周期主要包含五个方面:服务战略(轴心)、服务设计、服务转换、服务运营及服务改进 COBIT信息系统和技术控制目标 考法1:概念 在ITILv3基于…

【python】Data Augmentation

参考学习来自:使用PythonOpenCV进行数据增广方法综述(附代码演练) 文章目录 Random CutCutoutColor JitterAdd Noisy Random Cut 随机裁剪图片中的长款缩放为 scale 倍的区域,resize 到原图大小,bounding box 的坐标也…

8.12 矢量图层面要素单一符号使用十四(标记符号渲染边界)

前言 本章介绍矢量图层线要素单一符号中标记符号渲染边界(Outline: Marker line)的使用说明:文章中的示例代码均来自开源项目qgis_cpp_api_apps 标记符号渲染边界(Outline: Marker line) Outline系列只画边界&#…

嵌入式学习——硬件(UART)——day55

1. UART 1.1 定义 UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是一种用于串行通信的硬件设备或模块。它的主要功能是将数据在串行和并行格式之间进行转换。UART通常用于计算机与外围设备或嵌入式系统之间的数据传输。…

013、MongoDB常用操作命令与高级特性深度解析

目录 MongoDB常用操作命令与高级特性深度解析 1. 数据库操作的深入探讨 1.1 数据库管理 1.1.1 数据库统计信息 1.1.2 数据库修复 1.1.3 数据库用户管理 1.2 数据库事务 2. 集合操作的高级特性 2.1 固定集合(Capped Collections) 2.2 集合验证(Schema Validation) 2.…

防止跨站脚本攻击XSS之Antisamy

目录 一、什么是跨站脚本攻击(XSS) 二、通常有哪些解决方案 三、常见的XSS攻击例子有哪些 3.1 存储型XSS攻击(黑产恶意截流,跳转不法网站) 3.2反射型XSS攻击: 四、什么是跨站请求伪造? 五…

2024年上半年典型网络攻击事件汇总

文章目录 前言一、Ivanti VPN 的0 Day攻击(2024年1月)二、微软公司高管账户泄露攻击(2024年1月)三、Change Healthcare网络攻击(2024年2月)四、ConnectWise ScreenConnect漏洞利用攻击(2024年2月)五、XZ Utils软件供应链攻击(2024年3月)六、AT&T数据泄露攻击(20…

【产品经理】订单处理11-订单修改场景梳理

为了应对订单修改的场景,电商ERP系统应该如何设计相应模块? 电商ERP系统,经常遇到需要修改订单的情况,修改订单主要以下几种场景: 一、修改商品 修改商品,包括对正常商品的换货、以及对赠品的增删改。 1…

docker安装ElasticSearchKibana

本文参考以下两篇文章 ✅ElasticSearch&Kibana 部署 云效 Thoughts 企业级知识库 (aliyun.com) docker安装ElasticSearch&Kibana - 飞书 安装elasticsearch 使用docker下载es: docker pull elasticsearch:8.13.0 挂载配置 创建挂在文件目录 mkdir…

无人机企业需要什么资质?

无人机企业所需的资质主要可以分为几大类,以确保其合法、安全、高效地进行相关业务活动。以下是对这些资质的详细解释和归纳: 1. 基础企业资质: - 工商营业执照:这是企业合法经营的基本证书,所有企业都需要取得。无人…

是霍尼韦尔还是柏曼啊??书客、霍尼、柏曼三款护眼大路灯横向PK!

是霍尼韦尔还是柏曼啊??近年来市面上的劣质护眼大路灯越来越多,很容易使我们选到劣质产品。为了解决这一问题,我自费购买了多个品牌的护眼大路灯进行测评。经过深入研究,我发现市面上确实存在一些光线不稳定、选材做工…

指挥中心操作台的形状及空间布局

在现代化的指挥中心,操作台的形状设计至关重要,它不仅影响着操作人员的工作效率和舒适度,还关系到整个指挥系统的运行效果。常见的指挥中心操作台形状多种多样,以满足不同的功能需求和空间布局。 直线型操作台 直线型操作台是最为…

用python画蜡笔小新

代码地址: https://pan.quark.cn/s/6ae646d2fef3

QT+OpenCV在Android上实现人脸实时检测与目标检测

一、功能介绍 在当今的移动应用领域,随着技术的飞速发展和智能设备的普及,将先进的计算机视觉技术集成到移动平台,特别是Android系统中,已成为提升用户体验、拓展应用功能的关键。其中,目标检测与人脸识别作为计算机视…

Panmnesia发布CXL协议 允许AI GPU以最小的延迟利用各类内存

韩国 科学技术院(KAIST)的一家初创公司Panmnesia推出了一种尖端 IP,可通过 PCIe 上的 CXL 协议为人工智能 GPU 添加外部存储器,从而打破了存储器容量的障碍,提供有效的基础设施来解决 HBM 的局限性。 目前的人工智能加…

超快的 Python 包管理工具「GitHub 热点速览」

天下武功,无坚不破,唯快不破! 要想赢得程序员的欢心,工具的速度至关重要。仅需这一优势,即可使其在众多竞争对手中脱颖而出,迅速赢得开发者的偏爱。以这款号称下一代极速 Python 包管理工具——uv 为例&…

利用DeepFlow解决APISIX故障诊断中的方向偏差问题

概要:随着APISIX作为IT应用系统入口的普及,其故障定位能力的不足导致了在业务故障诊断中,APISIX常常成为首要的“嫌疑对象”。这不仅导致了“兴师动众”式的资源投入,还可能使诊断方向“背道而驰”,从而导致业务故障“…

网站显示不安全怎么解决

网站显示不安全通常表现为浏览器地址栏中出现“不安全”字样或红色感叹号,这意味着用户的个人信息、登录凭证和其他敏感数据可能面临风险。以下是一些步骤和建议: 1、检查URL是否以HTTPS开头: 确保你访问的网址是以https://开头,而…

go-redis源码解析:cluster模式如何选择节点

1. 如何选择节点 1.1. 确定slot 1.1.1. 通过cmdSlot方法确定在哪个槽上, 这一步只是本地计算 首先入口方法_process,先通过cmdSlot方法用key计算此次应该落在哪个槽上 通过crc16sum算法计算key应该属于哪个槽,slotNumber为16384 func Slot(key strin…