【k8s安装redis】k8s安装单机版redis实现高性能高可用
文章目录
- 简介
- 一.条件及环境说明:
- 二.需求说明:
- 三.实现原理及说明
- 四.详细步骤
- 4.1.创建configmap 配置文件
- 4.2.创建StatefulSet 配置
- 4.3.创建service headless 配置
- 五.安装说明
简介
本文将根据在k8s环境中搭建【伪】单机模式的redis实例。由于共享存储的io性能比较低,所以将共享存储用于数据备份,而采用hostpath的形式进行redis数据的存储,这样有助于提高redis的io性能,本文将讲解如何在一个pod内用两个container作为redis的主从形式来实现单机版、高可用的redis。
一.条件及环境说明:
k8s版本k8s-1.29.4,环境搭建在电信机房,共计六个节点,每个节点有一块非系统盘的ssd盘挂载到/data/路径。有NAS共享存储,该共享存储是使用的阿里云NAS,走专线使用,专线带宽500Mb。
二.需求说明:
- 搭建redis实例:可单机,可主从。
- 高可用:有一个k8s节点死掉之后也不长时间影响使用。
- 高性能:需要高iO,采用共享存储或者是ceph的分布式存储,读写iO会打很大的折扣。
- 数据安全:在发生切换以后,数据要尽可能的保证完整
- 安装简单、管理维护容易
三.实现原理及说明
1.将redis搭建成主从模式,主redis的数据读写落在本地ssd磁盘,从redis的数据数据落在外挂的共享nas存储。
2.然后创建一个statefulset的配置,放置两个container,一个container 作为主redis,挂载到hostpath,以主机名创建目录,并存储rdb文件。另外一个container 作为从redis,挂载nas路径也以主机名创建目录,并存储rdb文件。
3.调整从redis的数据持久化参数save,将数据落盘时间调整到较小的参数,这样保证更新的数据尽快存储到rdb文件。
4.在pod每次发生调度或者重启时,将nas存储的rdb文件拷贝到hostpath路径再启动redis。
注:这样做是让主redis实现高性能的处理业务数据,从redis就负责数据持久化,可能存在如下的问题:1.当主的读写数据io太高时,从redis由于是挂载nas,数据落盘时间会更长一些。
四.详细步骤
4.1.创建configmap 配置文件
配置包含三个文件主redis的配置文件,从redis的配置文件,以及一个根据执行角色执行不同操作的简单脚本,具体配置如下:
redis-master:conf 主redis配置文件,内存配置成256M,配置端口为6379,配置密码:redis#123,存储路径是/data/redis。
redis.conf:从redis配置文件,内存配置成256M,配置端口为6380,配置密码:redis#123,存储路径是/data/redis-2,并配置从6379的端口同步数据,将存储时间调整成60s以内有10个数据变动就进行存储落盘。
run.sh:主要作用就是判断角色并根据主机名创建目录,然后软连接到存储目录。这一步主要是将各自服务的redis数据存放到自己的目录,当创建新的redis的时候不会导致节点上的目录冲突。
apiVersion: v1
kind: ConfigMap
metadata:name: defaultapp-redis-standalone-confignamespace: defaultlabels:appname: default-appapp: defaultapp-redis-standalone-config
data:redis-master.conf: |port 6379maxmemory 256mbrequirepass redis#123dir /data/redisredis.conf: |port 6380maxmemory 256mbrequirepass redis#123save 3600 1 300 5 60 10dir /data/redis-2replicaof 127.0.0.1 6379masterauth redis#123run.sh: |#!/bin/shrole=$1hname=$(hostname)if [ $role == "master" ];thenecho "run redis master"ls /etc/redis/ -l[ -d /home/redis/$hname ] || mkdir -p /home/redis/$hname[ -d /data ] || mkdir /dataln -s /home/redis/$hname /data/redisif [ -f /home/redis-2/$hname/dump.rdb ];thencp -vf /home/redis-2/$hname/dump.rdb /data/redis/elseecho "[info] no bak dump.rdb"firedis-server /etc/redis/redis-master.confelseecho "run redis slave"ls /etc/redis/ -l[ -d /home/redis-2/$hname ] || mkdir -p /home/redis-2/$hname[ -d /data ] || mkdir /dataln -s /home/redis-2/$hname /data/redis-2redis-server /etc/redis/redis.conffi
4.2.创建StatefulSet 配置
为什么不用deployment是因为存储路径是根据主机名的目录,deployment的主机名每次重启都会变动,所以才采用statefuleset。
apiVersion: apps/v1
kind: StatefulSet
metadata:name: defaultapp-redis-standalonenamespace: defaultlabels:appname: default-appapp: defaultapp-redis-standalone
spec:serviceName: "defaultapp-redis-standalone"replicas: 1selector:matchLabels:app: defaultapp-redis-standalonetemplate:metadata:labels:app: defaultapp-redis-standalonespec:containers:- name: redis-masterimage: xxx-registry-vpc.cn-shenzhen.cr.aliyuncs.com/public/redis:7.2.5-alpine3.20imagePullPolicy: IfNotPresentcommand: ["/bin/sh","/etc/redis/run.sh"]args: ["master"]ports:- containerPort: 6379volumeMounts:- name: redis-config-volumemountPath: /etc/redis/- name: redis-datamountPath: /home/redis- name: redis-backupmountPath: /home/redis-2readOnly: false- name: redis-slaveimage: xxx-registry-vpc.cn-shenzhen.cr.aliyuncs.com/public/redis:7.2.5-alpine3.20imagePullPolicy: IfNotPresentports:- containerPort: 6380command: ["/bin/sh","/etc/redis/run.sh"]args: ["slave"]volumeMounts:- name: redis-config-volumemountPath: /etc/redis/- name: redis-datamountPath: /home/redis- name: redis-backupmountPath: /home/redis-2readOnly: falserestartPolicy: Alwaysvolumes:- name: redis-datahostPath:path: /data/redis_datatype: ""- name: redis-config-volumeconfigMap:name: defaultapp-redis-standalone-config- name: redis-backupnfs:server: xxxx-mxx.cn-shenzhen.nas.aliyuncs.compath: /backup/redis
4.3.创建service headless 配置
创建无头服务,集群内调用可以采用无头服务的名称进行调用。
apiVersion: v1
kind: Service
metadata:name: defaultapp-redis-standalonenamespace: defaultlabels:appname: default-appapp: defaultapp-redis-standalone
spec:ports:- port: 6379clusterIP: Noneselector:app: defaultapp-redis-standalone
如果需要对k8s集群外提供访问可以创建成service服务并配置LoadBalancer或者NodePort的形式。
apiVersion: v1
kind: Service
metadata:name: defaultapp-redis-standalone-externalnamespace: defaultlabels:appname: default-appapp: defaultapp-redis-standalone
spec:ports:- port: 6379type: LoadBalancerselector:app: defaultapp-redis-standalone
五.安装说明
- 需要先在k8s的节点创建/data/redis_data的路径来存放数据。
- 需要挂载一个共享存储,或者有一个公共路径存放备份文件的地方。
- 使用配置前将配置中的defaultapp替换成自己需要的命名。
- 配置中的镜像地址采用了私有的镜像地址,镜像是dockerhub上下载的redis:7.2.5-alpine3.20镜像到私有镜像仓库的,如果能直通外网的k8s可以直接用redis:7.2.5-alpine3.20。否则配置一个可以通的镜像地址。
- redis.conf或redis-master.conf中的密码redis#123替换成自己的密码。
- 复制配置时注意缩进字符,有不明白的配置欢迎私信
相关文章:
【k8s安装redis】k8s安装单机版redis实现高性能高可用
文章目录 简介一.条件及环境说明:二.需求说明:三.实现原理及说明四.详细步骤4.1.创建configmap 配置文件4.2.创建StatefulSet 配置4.3.创建service headless 配置 五.安装说明 简介 本文将根据在k8s环境中搭建【伪】单机模式的redis实例。由于共享存储的…...
Scala 数据类型
Scala 数据类型 Scala 是一种多范式的编程语言,它结合了面向对象和函数式编程的特点。在 Scala 中,数据类型是构建复杂程序的基础。本文将详细介绍 Scala 中的数据类型,包括其分类、特点以及使用方法。 数据类型分类 Scala 中的数据类型可…...
Java Executors类的9种创建线程池的方法及应用场景分析
在Java中,Executors 类提供了多种静态工厂方法来创建不同类型的线程池。在学习线程池的过程中,一定避不开Executors类,掌握这个类的使用、原理、使用场景,对于实际项目开发时,运用自如,以下是一些常用的方法…...
LY/T 3359-2023 耐化学腐蚀高压装饰层积板检测
耐化学腐蚀高压装饰层积板是指用酚醛树脂浸渍的层状植物纤维材料为基材,与涂布以丙烯酸树脂为主体的装饰纸的饰面层,在高温高压下层积压制而成的具有化学腐蚀功能的高压装饰层积板。 LY/T 3359-2023 耐化学腐蚀高压装饰层积板检测项目: 测试…...
【linux/shell】如何创建脚本函数库并在其他脚本中调用
目录 1. 创建脚本库文件 2. 修改脚本库权限,使脚本库可执行 3. 在其他脚本中调用脚本库 4. 使用环境变量或.bashrc 5. 使用Shellcheck 6. 编写注释及说明文档 在Shell中创建和使用脚本库通常涉及以下几个步骤: 1. 创建脚本库文件 脚本库通常是包…...

Instruct-GS2GS:通过用户指令编辑 GS 三维场景
Paper: Instruct-GS2GS: Editing 3D Gaussian Splats with Instructions Introduction: https://instruct-gs2gs.github.io/ Code: https://github.com/cvachha/instruct-gs2gs Instruct-GS2GS 复用了 Instruct-NeRF2NeRF 1 的架构,将基于 NeRF 的三维场景编辑方法迁…...

disql使用
SQL 交互式查询工具 | 达梦技术文档 进入bin目录:cd /opt/dmdbms/bin 启动disql:./disql,然后输入用户名、密码 sh文件直接使用disql: 临时添加路径到PATH环境变量:在当前会话中临时使用disql命令而无需每次都写完整…...
SpringBoot Mybatis-Plus 日志带参数
SpringBoot Mybatis-Plus 日志带参数 1 实现代码2 测试结果 在Spring Boot中,MyBatis插件机制通过拦截器(Interceptor)来实现。拦截器允许开发人员在执行SQL语句的各个阶段(如SQL语句创建、参数处理、结果映射等)插入自…...

【WebGIS平台】传统聚落建筑科普数字化建模平台
基于上述概括出建筑单体的特征部件,本文利用互联网、三维建模和地理信息等技术设计了基于浏览器/服务器(B/S)的传统聚落建筑科普数字化平台。该平台不仅实现了对传统聚落建筑风貌从基础到复杂的数字化再现,允许用户轻松在线构建从…...

Zookeeper分布式锁原理说明【简单易理解】
Zookeeper 非公平锁/公平锁/共享锁 。 1.zookeeper分布式锁加锁原理 如上实现方式在并发问题比较严重的情况下,性能会下降的比较厉害,主要原因是,所有的连接都在对同一个节点进行监听,当服务器检测到删除事件时,要通知…...

去除Win32 Tab Control控件每个选项卡上的深色对话框背景
一般情况下,我们是用不带边框的对话框来充当Tab Control的每个选项卡的内容的。 例如,主对话框IDD_TABBOX上有一个Tab Control,上面有两个选项卡,第一个选项卡用的是IDD_DIALOG1充当内容,第二个用的则是IDD_DIALOG2。I…...

iis部署前后端分离项目(React前端,Node.js后端)
iis虽然已经有点过时,但不少用户还在用,故总结一下。 1. 安装iis 如果电脑没有自带iis管理器,打开控制面板->程序->启用或关闭Windows功能,勾选iis安装即可 2. 部署前端项目 打开iis,添加网站,物理…...

【前端项目笔记】9 数据报表
数据报表 效果展示: 在开发代码之前新建分支 git checkout -b report 新建分支report git branch 查看分支 git push -u origin report 将本地report分支推送到云端origin并命名为report 通过路由的形式将数据报表加载到页面中 渲染数据报表基本布局 面包屑导航…...
等保测评推动哈尔滨数字化转型中的安全保障
在数字经济的浪潮下,哈尔滨作为东北老工业基地的核心城市,正积极推动数字化转型,以创新技术驱动产业升级和经济发展。网络安全等级保护测评(简称“等保测评”)作为国家网络安全战略的重要组成部分,为哈尔滨…...
#pragma 指令
#pragma 指令作用是设定编译器的状态或者是指示编译器完成一些特定的动作 message 参数能够在编译信息输出窗口中输出相应的信息 #pragma message(“消息文本”) code_seg参数能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到它 #pragma…...

【Excel】 批量跳转图片
目录标题 1. CtrlA全选图片 → 右键 → 大小和属性2. 取消 锁定纵横比 → 跳转高度宽度 → 关闭窗口3. 最后一图拉到最后一单元格 → Alt吸附边框4. CtrlA全选图片 → 对齐 → 左对齐 → 纵向分布!…...

网站更新改版了
✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏:Leo杂谈 ✨特色专栏:MySQL学…...

初识大模型
前提:学习一项技术,要从原理、实践、认知三个方面进行攻克。 不懂原理就不会举一反三,走不了太远。 不懂实践就只能纸上谈兵,做事不落地。 认知不高就无法作对决策,天花板太低。 一、知识体系 二、什么是AI 基于机器…...

Open3D SVD算法实现对应点集配准
目录 一、概述 1.1基本思想 1.2实现步骤 二、代码实现 三、实现效果 3.1原始点云 3.2配准后点云 3.3变换矩阵 一、概述 在点云配准中,SVD(Singular Value Decomposition,奇异值分解)方法是一种常用的精确计算旋转和平移变换的算法。其目标是找到一个刚体变…...

bWAPP靶场安装
bWAPP安装 下载 git地址:https://github.com/raesene/bWAPP 百度网盘地址:链接:https://pan.baidu.com/s/1Y-LvHxyW7SozGFtHoc9PKA 提取码:4tt8 –来自百度网盘超级会员V5的分享 phpstudy中打开根目录,并将下载的文…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...

基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...
绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化
iOS 应用的发布流程一直是开发链路中最“苹果味”的环节:强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说,这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发(例如 Flutter、React Na…...
Linux安全加固:从攻防视角构建系统免疫
Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...
前端调试HTTP状态码
1xx(信息类状态码) 这类状态码表示临时响应,需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分,客户端应继续发送剩余部分。 2xx(成功类状态码) 表示请求已成功被服务器接收、理解并处…...