当前位置: 首页 > news >正文

使用 Kubernetes 部署 Redis 主从及 Sentinel 高可用架构(未做共享存储版)

文章目录

  • 使用 Kubernetes 部署 Redis 主从及 Sentinel 高可用架构
  • Redis 主从架构部署 (`1.yaml`)
  • Redis Sentinel 部署 (`2.yaml`)
  • Sentinel 服务暴露 (`3.yaml`)
  • 部署步骤
  • 总结


使用 Kubernetes 部署 Redis 主从及 Sentinel 高可用架构

本文将详细介绍如何在 Kubernetes 中部署 Redis 主从及 Sentinel 高可用架构,提供完整的 YAML 配置文件,并逐步解析其关键配置。命名空间已调整为 test

我这是单点,未做共享存储版


Redis 主从架构部署 (1.yaml)

首先,使用 StatefulSet 部署 Redis 主从结构,每个实例通过主机名确定角色:

apiVersion: apps/v1
kind: StatefulSet
metadata:name: redisnamespace: test
spec:serviceName: redisreplicas: 3selector:matchLabels:app: redistemplate:metadata:labels:app: redisspec:initContainers:- name: init-redisimage: docker.wctmd.us.kg/busybox:latestcommand: ["/bin/sh", "-c"]args: ["mkdir -p /data/redis/$(hostname)"]volumeMounts:- name: redis-datamountPath: /datacontainers:- name: redisimage: docker.wctmd.us.kg/redis:5.0.14ports:- containerPort: 6379command: ["/bin/sh"]args: - "-c"- |if [ $(hostname) = "redis-0" ]; thenredis-server --port 6379 --protected-mode no --replica-announce-ip $(hostname).rediselseredis-server --port 6379 --protected-mode no --replicaof redis-0.redis 6379 --replica-announce-ip $(hostname).redisfivolumeMounts:- name: redis-datamountPath: /datavolumes:- name: redis-datahostPath:path: /data/redistype: DirectoryOrCreate

关键点解析

  • 主从自动识别redis-0 为主节点,其它 Pod 配置为从节点并通过 --replicaof 指定主节点。
  • 数据持久化:使用 hostPath 存储 Redis 数据,映射到宿主机的 /data/redis
  • 独立目录管理:通过 initContainer 动态创建 /data/redis/$(hostname),避免目录冲突。

Redis Sentinel 部署 (2.yaml)

接下来,部署 Sentinel 来监控 Redis 主从并实现自动故障转移:

apiVersion: apps/v1
kind: Deployment
metadata:name: redis-sentinelnamespace: test
spec:replicas: 3selector:matchLabels:app: redis-sentineltemplate:metadata:labels:app: redis-sentinelspec:containers:- name: redis-sentinelimage: docker.wctmd.us.kg/redis:5.0.14ports:- containerPort: 26379command: [ "redis-sentinel" ]args: ["/data/sentinel.conf"]volumeMounts:- name: sentinel-confmountPath: /datainitContainers:- name: init-sentinelimage: docker.wctmd.us.kg/busybox:latestcommand: ["/bin/sh", "-c"]args:- cp /etc/redis/sentinel.conf /data/sentinel.conf && chmod 600 /data/sentinel.confvolumeMounts:- name: sentinel-confmountPath: /data- name: config-volumemountPath: /etc/redisvolumes:- name: sentinel-confemptyDir: {}- name: config-volumeconfigMap:name: sentinel-config
---
apiVersion: v1
kind: ConfigMap
metadata:name: sentinel-confignamespace: test
data:sentinel.conf: |sentinel monitor mymaster redis-0.redis 6379 2sentinel down-after-milliseconds mymaster 5000sentinel failover-timeout mymaster 60000sentinel parallel-syncs mymaster 1

关键点解析

  • 动态配置文件管理:通过 initContainer 将只读的 ConfigMap 文件复制到可写路径,并调整权限。
  • 多实例部署:使用 Deployment 创建 3 个 Sentinel 实例以实现高可用。
  • 监控配置ConfigMap 定义了 Sentinel 的监控规则,包括主节点、超时、同步参数等。

Sentinel 服务暴露 (3.yaml)

最后,通过 Service 将 Sentinel 对外暴露,便于外部访问:

apiVersion: v1
kind: Service
metadata:name: redis-sentinelnamespace: test
spec:type: NodePortports:- nodePort: 30154port: 26379targetPort: 26379protocol: TCPselector:app: redis-sentinel

关键点解析

  • 外部访问支持:使用 NodePort 暴露 Sentinel 服务,监听宿主机的 30154 端口。
  • 服务选择器:通过标签 app: redis-sentinel 将流量路由到 Sentinel Pod。

部署步骤

  1. 创建命名空间 test
    kubectl create namespace test
    
  2. 应用 1.yaml 部署 Redis:
    kubectl apply -f 1.yaml
    
  3. 应用 2.yaml 部署 Sentinel:
    kubectl apply -f 2.yaml
    
  4. 应用 3.yaml 创建服务:
    kubectl apply -f 3.yaml
    
  5. 验证部署状态:
    kubectl -n test get pods
    kubectl -n test get svc
    

总结

本文展示了如何使用 Kubernetes 部署 Redis 主从架构和 Sentinel 高可用集群。通过灵活的 StatefulSetDeployment 配置,我们实现了高可靠性和动态配置管理,同时确保数据持久化和集群安全性。

建议:在生产环境中,可以进一步优化存储方案(如使用 PersistentVolume)并增强安全配置(如启用 Redis/Sentinel 认证)。

http://www.lryc.cn/news/504340.html

相关文章:

  • AI开发 - 用GPT写一个GPT应用的真实案例
  • C#—索引器
  • 杨振宁大学物理视频中黄色的字去掉(稳定简洁版本,四)
  • 排序算法(5):归并排序
  • Gate学习(7)引入体素源
  • 2024.12.14 TCP/IP 网络模型有哪几层?
  • item2 for macos
  • 二维三维空间上两点之间的距离
  • 相机测距原理
  • Debezium SchemaNameAdjuster 分析
  • Stable Diffusion绘画 | SDXL模型使用注意事项
  • (五)机器学习 - 数据分布
  • Flink State面试题和参考答案-(上)
  • 利用开源Stable Diffusion模型实现图像压缩比竞争方法用更低的比特率生成更逼真的图像
  • QT信号与槽机制详解
  • openGauss开源数据库实战二十二
  • BurpSuite解决暴力破解时需要验证码问题
  • WPF Combox使用 Text无法选择正确获取CHange后的Text
  • 【速览】设计模式(更新中)
  • 【stable diffusion部署】Stable Diffusion开源本地化的文生图图生图AI
  • 县城楼市踩踏式降价,或现2字头,率先回归月薪一平方的合理价格
  • 计算机组成原理(七):二进制编码
  • 【GitHub分享】you-get项目
  • 论文概览 |《Sustainable Cities and Society》2024.12 Vol.116
  • 解决node.js的req.body为空的问题
  • Mysql学习笔记之安装
  • 将PDF流使用 canvas 绘制然后转为图片展示在页面上(二)
  • 【深度学习】 零基础介绍卷积神经网络(CNN)
  • Coze概述
  • 康佳Android面试题及参考答案(多张原理图)