前言

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

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

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

1. 安装Redis集群

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

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

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

现在从第一步开始。

1.1 配置redis.conf字典

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

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

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

1.2 创建Redis服务

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

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

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

1.3 容器组配置

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

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

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


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

如上图配置:

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

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

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


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

1.4 存储设置

在这一步有两个操作

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

1.4.1 添加持久卷声明模板

PVC名称前缀:redis-pvc

容量:10G

挂载路径

  • 权限:读写
  • 地址:/data

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

1.4.2 挂载配置字典

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

选择redis的配置字典

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

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

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

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

2. 初始化Redis集群

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

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

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

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

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

进入终端,执行命令:

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

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

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

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

  • cluster_stateok状态表示集群可以正常接受查询请求。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二进制总线接收的消息数量

2.1 IP地址初始化集群

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

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


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


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


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

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

2.2 使用内部DNS初始化

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

2.2.1 创建Redis-tribe服务

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

参数namespace就写项目名称:


具体YAML内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:namespace: test-projectlabels:app: redis-cluster-toolsname: redis-cluster-tools
spec:replicas: 1selector:matchLabels:app: redis-cluster-toolstemplate:metadata:labels:app: redis-cluster-toolsname: pos-redisspec:containers:- name: pos-redisimage: sunnywang/redis-tools-ubuntu:v0.5.1imagePullPolicy: IfNotPresentargs:- /bin/bash- -c- sleep 3600

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

2.2.2 初始化集群

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

先执行以下命令初始化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

执行结果如下图:

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

执行结果如下:

2.2.3 验证

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

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

验证集群模式可以正常使用的,然后就该自由发挥咯

如果觉得可以的话各位看官举起你那发财的小手给点个赞,未来的运气能爆棚哦。

KubeSphere安装redis集群,全程超带劲相关推荐

  1. docker安装redis集群+设置密码

    docker安装redis集群+设置密码 采用文章 https://blog.csdn.net/BThinker/article/details/123374236 1.获取Redis镜像 shell ...

  2. LINUX安装REDIS集群

    linux安装单机版redis已经在另一篇文章说过了,下边来搞集群,环境是新浪云服务器: redis3.0以后开始支持集群. 前言:redis用什么做集群? 用一个叫redis-trib.rb的rub ...

  3. 在虚拟机上安装redis集群,redis使用版本为4.0.5,本机通过命令客户端可以连接访问,外部主机一直访问不了...

    在虚拟机上安装了redis 4 ,启动后本机客户端可以连接访问,但是外部主机一直访问不了,在使用java代码连接redis集群时报:no reachable node in cluster,原因:在r ...

  4. redis安装redis集群

    NoSql数据库之Redis 1.什么是nosql,nosql的应用场景 2.Nonsql数据库的类型 a) Key-value b) 文档型(类似于json) c) 列式存储 d) 图式 3.red ...

  5. Deepin+Docker+Redis5.0 安装 Redis集群

    一.开发环境 Deepin15.11 桌面版 Linux操作系统 我的Windows10 VMware15.5.1中 已经安装了Deepin15.11 VitualBox 用来运行Docker容器的虚 ...

  6. Windows下Redis集群搭建(超详细教程)

    文章目录 一.Redis单机版安装 二.Redis集群的安装 1.构建集群节点目录 2.下载Ruby并安装 3.构建集群脚本redis-trib.rb 4.构建集群 三.将Redis注册生window ...

  7. linux安装redisDocker安装redis集群

    安装redis Installation From source code Download, extract and compile Redis with: $ wget https://downl ...

  8. docker compose安装redis集群、集群扩容、集群收缩

    目录 一.redis 配置信息模板 二.编写批量生成配置文件脚本 三.批量生成配置文件 四.编写 docker-compose 文件 五.做集群.分配插槽 六.测试: 七.手动扩容 八.添加主从节点 ...

  9. docker 安装redis集群配置3主3从,实现hash槽分配存储数据

    目录 一.docker集群安装 1.分别在宿主机的/docker/redis下创建每个节点数据同步的目录 2.执行容器启动命令 3.执行命令参数解释: 4.集群节点不够提示:提示需要至少3个maste ...

最新文章

  1. Azure Blob实战之——从客户端到FTP
  2. 从websphere6.1迁移到weblogic10.3的问题总结--转
  3. java 菜单快捷键_Java 菜单快捷键
  4. Winform控件WebBrowser与JS脚本交互
  5. PS 菜单栏显示与隐藏 - 快捷键
  6. 我是如何在都柏林的一次中转中无意中写了维基百科页面的
  7. POJ 3259 Wormholes(bellman_ford,判断有没有负环回路)
  8. A Comprehensive Introduction to Torchtext
  9. Atitit 技术管理项目管理的职责列表attilax总结 v2 r74 brch4com.docx
  10. vue中index.html文件为什么可以使用模板语法
  11. 2011年11月-2012年10月份 历时一年的 博客回顾
  12. 依概率收敛与按分布收敛
  13. js获取浏览器高度和宽度值(多浏览器)
  14. 小米9 淘宝 618列车加油 脚本 Android10 MIUI11
  15. skywalking服务端_skywalking-01-搭建skywalking服务端
  16. 在天翼云服务器部署程序不能被外网访问的问题
  17. 百度SEO HTML5蓝色个人主页博客整站模板
  18. 程序猿共勉:小富即安真要不得
  19. 南大计算机跨专业考研,GitHub - weizhang27/NJU-CS-Kaoyan: 南京大学计算机考研相关问题...
  20. 基于LAMP环境发布一个Discuz论坛网站

热门文章

  1. HHDESK便捷功能介绍二
  2. QT 屏幕旋转的两种方式
  3. 微信小程序,图片双指放大缩小
  4. R语言 -- car::scatterplotmatrix散点图矩阵 参数详解
  5. SpringBoot 自动配置初探
  6. Ubuntu18.04安装realsense d435i SDK和ROS Wrapper以及相机标定全过程
  7. 情感充沛,去体悟生活
  8. 我的2017,五味杂陈
  9. FairGuard游戏Lua加密方案解析
  10. 真实案例:网站遭遇DOS攻击