游戏分类网站怎么做,能自己做二次元人物的网站,wordpress发布文章提示失败,怎么做网盘网站文章目录 简介一.条件及环境说明#xff1a;二.需求说明#xff1a;三.实现原理及说明四.详细步骤4.1.创建configmap 配置文件4.2.创建StatefulSet 配置4.3.创建service headless 配置 五.安装说明 简介 本文将根据在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 masterls /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.rdbfiredis-server /etc/redis/redis-master.confelseecho run redis slavels /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.conffi4.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-standalonereplicas: 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/redis4.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替换成自己的密码。复制配置时注意缩进字符有不明白的配置欢迎私信