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.mzph.cn/diannao/40337.shtml

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

相关文章

十款绚丽的前端 CSS 菜单导航动画

CSS汉堡菜单是一种非常流行的PC端和移动端web菜单风格,特别是移动端,这种风格的菜单应用更为广泛。这款菜单便非常适合在手机App上使用,它的特点是当顶部菜单弹出时,页面内容将会配合菜单出现适当的联动,让整个页面变得…

关于linux捕捉鼠标事件的方法

网上找了很多方法,都比较杂乱。这篇文章专注于读取鼠标的动作:左键、右键、中键、滚轮。 linux的设备都以文件形式存放,要读取鼠标,有两种方法,一种是通过/dev/input/mice,一种是通过/dev/input/eventx (x…

探索线程安全:HashMap 的四种使用技巧

这篇文章,我们聊聊线程安全使用 HashMap 的四种技巧。 1 方法内部:每个线程使用单独的 HashMap 如下图,tomcat 接收到到请求后,依次调用控制器 Controller、服务层 Service 、数据库访问层的相关方法。 每次访问服务层方法 serv…

vue H5页面video 视频流自动播放, 解决ios不能自动播放问题

视频组件 <videostyle"width: 100%; height: 100%;object-fit: fill"class"player"refplayer_big_boxcontrolspreloadautoplay //自动播放muted //是否静音playsinline"true"x5-playsinline""webkit-playsinline"tru…

[Linux安全运维] Linux用户以及权限管理

Linux用户以及权限管理 Linux用户和组 用户信息文件pasawd /etc/passwd文件用于存储用户的信息 :用于分割不同的字段信息 字段示例&#xff08;第一行&#xff09;含义说明1root用户名2x密码占位符x代表用户有密码存储在shadow文件中无内容代表用户登录系统不需要密码30UID…

梧桐数据库:存算分离和存算一体架构的分布式数据库技术分析

摘要&#xff1a; 随着数据量的不断增长和对数据处理性能的要求越来越高&#xff0c;分布式数据库技术成为了数据存储和处理的重要解决方案。存算分离和存算一体是两种常见的分布式数据库架构&#xff0c;它们在数据存储和计算方面有着不同的特点和优势。本文将对存算分离和存算…

Spring源码(一) 如何阅读 Spring 源码

学习 Spring 的源码&#xff0c;也可以通过 SpringBoot 搭环境。 不管是什么源码&#xff0c;最好写个 demo&#xff0c;跑起来&#xff0c;然后从常用的类和方法入手&#xff0c;跟踪调试。 配置对象 新建一个 SpringBoot 的项目&#xff0c; 详情见&#xff1a; https://b…

FreeRTOS 中 vListInsertEnd 函数详解

在 FreeRTOS 中&#xff0c;vListInsertEnd 函数用于将新项插入到指定列表的尾部&#xff08;但实际行为是插入到一个特定的索引位置之前&#xff09;。FreeRTOS 使用双向链表&#xff08;doubly linked list&#xff09;来管理任务和其他系统对象&#xff0c;这样可以高效地插…

前端三件套开发模版——产品介绍页面

今天有空&#xff0c;使用前端三件套html、css、js制作了一个非常简单的产品制作页面&#xff0c;与大家分享&#xff0c;希望可以满足大家应急的需求。本页面可以对产品进行“抢购”、对产品进行介绍&#xff0c;同时可以安排一张产品的高清大图&#xff0c;我也加入了页面的背…

JAVA实现二分查找,斐波那契数列,深度优先搜索详情教程【包含代码】

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

react+ts+antd项目搭建

前言&#xff1a; 基于ts语言创建react项目&#xff0c;node版本是v16.14.2 一、 脚手架创建项目 全局安装 npm install -g creacte-react-app创建项目file-management&#xff0c;ts需要添加–template typescript npx create-react-app file-management --template typesc…

Ubuntu查看opencv版本c++

✗命令行中直接输入&#xff1a; pkg-config --modversion opencv✔命令行中直接输入&#xff1a; pkg-config --modversion opencv4注解&#xff1a;附上在markdown中打勾&#xff0c;对号和打叉。使用时将&和#之间的空格去掉&#xff0c;这里只是为了不让CSDN自动转换才…

Ubuntu20.04 c++程序 涉及opencv问题记录

头文件更改 默认的头文件引用是 #include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp>但是在ubuntu20中/usr/include中默认的是opencv4&#xff0c;他文件夹里面才是opencv2&#xff0c;需要…

vue3单个页面进行防抖节流

防抖 <template><button id"submitButton" ref"submitButton">GET</button> </template><script lang"ts" setup> import { ref, onMounted } from vue;// 防抖函数 function debounce(func: () > void, dela…

【mybatis】mybatis-plus中Wrapper(查询条件构造器)简介_常用方法

1、简介 MyBatis-Plus 是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。MyBatis-Plus 提供了强大的条件构造器&#xff08;Wrapper&#xff09;&#xff0c;用于构建复杂的 SQL 查询条件&#xff0c;使得我们…

沟通方法和技巧

0 Preface/Foreword 1 沟通对象 沟通维度&#xff1a; upward&#xff0c;向上沟通&#xff0c;直接上级downward&#xff0c;向下沟通&#xff0c;直接下级horizontal&#xff0c;横向沟通&#xff0c;同部门/跨部门同事 2 沟通方式&#xff08;5W2H&#xff09; 对于开会和…

小白尝试某程机票信息爬取

实训课需要机票数据集&#xff0c;网上没有&#xff0c;所以我选择爬取数据 此过程可谓经历的九九八十一难&#xff0c;也参考了不少大佬的文章&#xff0c;在此特别记录一下 弯路不多说&#xff0c;我直接讲成功的方法 找到请求url 通过控制台&#xff0c;最后确认下面的 …

在WordPress中获取10天之内的文章更新数

要在WordPress中获取10天之内的文章更新数&#xff0c;您可以使用以下代码片段。这段代码将显示在过去10天内更新的文章数量。 <?php // 获取当前时间戳 $now time();// 计算10天前的时间戳 $ten_days_ago $now - (10 * 24 * 60 * 60);// 设置查询参数 $args array(pos…

【Spring Boot AOP中切入表达式格式介绍】

文章目录 一、切入表达式简介二、切入表达式的语法1. 方法匹配符示例&#xff1a; 2. 类型匹配符示例&#xff1a; 一、切入表达式简介 切入表达式&#xff08;Pointcut Expression&#xff09;是AOP中定义切入点&#xff08;Pointcut&#xff09;的一种方式。它定义了在哪些连…

基于Java中的SSM框架实现物流管理系统项目【项目源码+论文说明】

基于Java中的SSM框架实现物流管理系统演示 摘要 企业的发展离不开物流的运输&#xff0c;在一个大型的企业中&#xff0c;商品的生产和建设&#xff0c;推广只是前期的一些工作&#xff0c;在后期的商品销售和物流方面的建立&#xff0c;才能让一个企业得到大力的发展。 企业…