helm部署redis集群

news/2025/3/5 9:22:18/文章来源:https://www.cnblogs.com/Boy-boy/p/18751969

Redis 集群部署流程

前提:K8s+helm安装完成

1. 安装 NFS 服务器

1.1 安装 NFS 工具包

在 NFS 服务器上安装 nfs-utils 包:

sudo yum install -y nfs-utils

1.2 创建共享目录

创建一个目录作为 NFS 共享目录,并设置权限:

sudo mkdir /nfs_share
sudo chmod 777 /nfs_share  # 允许所有用户访问

1.3 配置 NFS 导出

编辑 /etc/exports 文件,定义共享目录和访问权限:

sudo vi /etc/exports

添加以下内容:

/nfs_share *(rw,sync,no_root_squash,no_all_squash)
  • /nfs_share:共享目录。

  • *:允许所有客户端访问。可以替换为特定 IP 或网段(如 192.168.1.0/24)。

  • rw:允许读写。

  • sync:同步写入,确保数据一致性。

  • no_root_squash:允许客户端 root 用户拥有服务器 root 权限。

  • no_all_squash:不压缩所有用户的权限。

保存并退出后,启动 NFS 服务:

sudo systemctl enable nfs --now

2. 部署 NFS Provisioner

NFS Provisioner 是一个动态存储提供程序,可以为 Kubernetes 集群提供 NFS 存储。

2.1 添加 Helm 仓库

添加 NFS Provisioner 的 Helm 仓库:

helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner
helm repo update

2.2 安装 NFS Provisioner

使用 Helm 安装 NFS Provisioner。假设 NFS 服务器地址是 192.168.1.100,共享目录是 /nfs_share

helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \  
--set nfs.server=192.168.1.100 \  # 替换为 NFS 服务器地址  
--set nfs.path=/nfs_share \
--set storageClass.name=nfs-client \  
--set storageClass.defaultClass=true \  
--set image.repository=swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/sig-storage/nfs-subdir-external-provisioner \  
--set image.tag=v4.0.2

参数说明

  • nfs.server:NFS 服务器的 IP 地址。

  • nfs.path:NFS 共享目录。

  • storageClass.name:创建的 StorageClass 名称(nfs-client)。

  • storageClass.defaultClass:设置为默认的 StorageClass。

  • image.repository 和 image.tag:指定 NFS Provisioner 镜像(国内镜像地址)。


3. 部署 Redis 集群

使用 Helm 部署 Redis 集群,并将其存储配置为使用 NFS Provisioner。

3.1 添加 Helm 仓库

添加 Bitnami 的 Helm 仓库:

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

3.2 安装 Redis 集群

使用 Helm 安装 Redis 集群,并配置使用 NFS Provisioner 提供的存储:

helm install redis-cluster bitnami/redis-cluster \
 --set cluster.enabled=true \  
--set persistence.storageClass=nfs-client \  
--set persistence.size=1Gi \  
--set password=password \  # 设置 Redis 密码  
--set image.repository=bitnami/redis-cluster \  
--set image.tag=7.4.2 \
 --set image.pullPolicy=IfNotPresent 

参数说明

  • cluster.enabled=true:启用 Redis 集群模式。

  • persistence.storageClass=nfs-client:使用 NFS Provisioner 提供的 StorageClass。

  • persistence.size=1Gi:每个 Redis 节点的存储大小。

  • password=password:设置 Redis 密码。

  • image.repository 和 image.tag:指定 Redis 镜像。


4. 部署 Redis-cluster-proxy

Redis-cluster-proxy 用于解决 Redis 集群的 MOVED 和 ASK 问题,并提供统一的访问入口。

4.1 下载源码

克隆 Redis-cluster-proxy 源码:

git clone https://github.com/RedisLabs/redis-cluster-proxy.git
cd redis-cluster-proxy

4.2 创建 Dockerfile

创建 Dockerfile,内容如下:

# 使用官方的 Ubuntu 作为基础镜像
FROM ubuntu:22.04

# 安装编译依赖
RUN apt-get update && apt-get install -y \
build-essential \
gcc-11 \
g++-11 \
libssl-dev \
libhiredis-dev \
git \
&& rm -rf /var/lib/apt/lists/*

# 设置 GCC 11 为默认编译器
RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100 \
&& update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 100

# 复制本地 redis-cluster-proxy 源码到镜像中
COPY . /redis-cluster-proxy

# 设置工作目录
WORKDIR /redis-cluster-proxy

# 构建 redis-cluster-proxy
RUN make CFLAGS="-fPIC -std=c11"

# 将可执行文件复制到 /usr/local/bin
RUN cp ./src/redis-cluster-proxy /usr/local/bin/

# 设置环境变量默认值
ENV PROXY_PORT="7777" \
PROXY_BIND="0.0.0.0" \
CLUSTER_NODES="redis-cluster.default.svc.cluster.local:6379" \ # Redis 集群地址
CLUSTER_PASSWORD="zsfund" \ # Redis 集群密码
THREADS="8" \
MAX_CLIENTS="10000"

# 暴露代理端口
EXPOSE 7777

# 设置默认启动命令
CMD exec redis-cluster-proxy \
--port ${PROXY_PORT} \
--bind ${PROXY_BIND} \
--threads ${THREADS} \
--maxclients ${MAX_CLIENTS} \
--auth ${CLUSTER_PASSWORD} \
${CLUSTER_NODES} \
"$@"

4.3 生成镜像

构建 Docker 镜像:

docker build -t redis-cluster-proxy:latest .

4.4 修改源码

根据需求修改源码(如支持认证等),参考:PR #98。

4.5 创建 YAML 文件

创建 redis-cluster-proxy.yaml,内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-cluster-proxy
spec:
replicas: 1
selector:
matchLabels:
app: redis-cluster-proxy
template:
metadata:
labels:
app: redis-cluster-proxy
spec:
containers:
- name: redis-cluster-proxy
image: redis-cluster-proxy:latest
imagePullPolicy: IfNotPresent
env:
- name: CLUSTER_NODES
value: "redis-cluster.default.svc.cluster.local:6379" # Redis 集群地址
- name: CLUSTER_PASSWORD
value: "zsfund" # Redis 集群密码
ports:
- containerPort: 7777

---
apiVersion: v1
kind: Service
metadata:
name: redis-cluster-proxy
spec:
type: NodePort
selector:
app: redis-cluster-proxy
ports:
- protocol: TCP
port: 7777
targetPort: 7777
nodePort: 31777 # 外部访问端口

 

4.6 部署 Redis-cluster-proxy

运行 YAML 文件:

kubectl apply -f redis-cluster-proxy.yaml

5. 验证部署

5.1 检查服务状态

确保所有服务正常运行:

kubectl get pods,svc

5.2 外部访问

通过 NodePort 访问 Redis-cluster-proxy:

telnet <Node-IP> 31777

5.3 使用客户端工具

使用 Redis 客户端工具(如 redis-cli)连接 Redis-cluster-proxy:

redis-cli -h <Node-IP> -p 31777
 
注意:上述命令内部依赖的镜像包是从dockerhub上拉取,因国内无法访问,可替换成下面命令也可进行
helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
    --set nfs.server=192.168.1.100 \
    --set nfs.path=/nfs_share \
    --set storageClass.name=nfs-client \
    --set storageClass.defaultClass=true \
    --set image.repository=swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/sig-storage/nfs-subdir-external-provisioner \
    --set image.tag=v4.0.2
helm search repo redis-cluster
wget https://charts.bitnami.com/bitnami/redis-cluster-11.4.3.tgz
tar -zxvf redis-cluster-11.4.3.tgz
cd redis-cluster
helm install redis-cluster ./redis-cluster \
    --set cluster.enabled=true \
    --set persistence.storageClass=nfs-client \
    --set persistence.size=1Gi \
    --set password=password \
    --set image.repository=bitnami/redis-cluster \
    --set image.tag=7.4.2 \
    --set image.pullPolicy=IfNotPresent

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/893877.html

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

相关文章

西门子 smart 700 人机界面 HMI erwa.cn二娃备忘

情况是这样,触摸屏型号为smart 700IE,以前的程序已经确定丢失了,已经是两年前其他人搞的程序了。目前想要将此smart 700IE触摸屏程序得出来,该怎么实现,请详细告知,非常感谢 最佳答案 Smart Panels 均不支持“回传”功能,只支持“备份”“恢复”功能。 那“回传”与“…

文件同步备份软件,让文件同步更安全更稳定!

在数字化时代,数据已然成为企业的核心资产,而确保服务器之间文件的高效同步,是保障数据一致性、维持业务连续性的关键所在。无论是大型企业构建多数据中心的复杂架构,还是分布式系统力求各节点数据的统一,文件同步备份软件都发挥着无可替代的作用。它就像是企业数据流转的…

无法加载kingdee k3 cloud erp V7.2的许可文件,许可文件可能被篡改,请联系管理员

原因:如下图,正式补丁在安装时出现了异常导致。 解决:重新安装正式补丁以及临时补丁。

2025年最火爆的5款跨网文件安全交换系统优缺点对比

跨网文件安全交换系统主要用于在不同网络环境间安全传输文件,确保数据的机密性、完整性和可用性。 能解决跨网文件传输的方式有很多,比如FTP/FTPS、SFTP、云存储服务、P2P文件共享以及Ftrans Ferry跨网文件安全交换系统各有优缺点。以下是它们的详细对比: 一、FTP/FTPS优点:…

计算两个经纬点的距离

php cookbook有一个计算两个经纬点的例子,代码就照着抄了一遍,多次检查,多次运行的结果都是略小于预期值的一半,楞是费了一番,才发现是经纬度参数的顺序反了,在英文里,是纬度在前,经度在后,不似耳熟的东经多少多少,北纬多少多少。既然到了这了,也学着梳理一下计算经…

如何破局大文件远程跨国传输难题,实现业务高增长?

在全球化浪潮中,跨国合作已成为众多行业的常态。无论是医疗影像、基建数据、影视制作,还是跨国企业的日常运营,大文件远程跨国传输的需求日益增长。然而,网络延迟、带宽限制、数据安全等问题,常常让这一过程变得低效且充满风险。如何实现高效、安全、稳定的大文件远程跨国…

2023陇剑杯

数据分析-SS 1.黑客是使用什么漏洞来拿下root权限的 分析使用系统命令id之前的流量包,发现奇怪的传输上网搜索发现是CVE-2022-22965 2.黑客反弹shell的ip和端口是什么 分析后面的流量包,查看返回包明文192.168.43.128:2333 3.黑客的病毒名称是什么? 解压文件系统按照创建时间…

VMware Workstation 17.6.3 Pro macOS Unlocker OEM BIOS 2.7 for Linux - 在 Linux 上运行 macOS Sequoia

VMware Workstation 17.6.3 Pro macOS Unlocker & OEM BIOS 2.7 for Linux - 在 Linux 上运行 macOS SequoiaVMware Workstation 17.6.3 Pro macOS Unlocker & OEM BIOS 2.7 for Linux 在 Linux 上运行 macOS Sequoia 请访问原文链接:https://sysin.org/blog/vmware-w…

Zabbix 7.0 LTS OVF (build with LNMP based on Rocky 8.10) - VMware 虚拟机模板

Zabbix 7.0 LTS OVF (build with LNMP based on Rocky 8.10) - VMware 虚拟机模板Zabbix 7.0 LTS OVF (build with LNMP based on Rocky 8.10) - VMware 虚拟机模板 Zabbix 7.0 LTS | 企业级开源监控解决方案 请访问原文链接:https://sysin.org/blog/zabbix-7-ovf/ 查看最新版…

上班族的DeepSeek指南,厦门大学DeepSeek手册Ⅲ《DeepSeek企业应用实践》

上班族的DeepSeek指南,厦门大学DeepSeek手册Ⅲ《DeepSeek企业应用实践》随着DeepSeek的普及,无论是高校师生、上班族的小伙伴、政府工作人员还是面向社会大众人群,都能在各大高校的一系列手册中找到自己想要学习、了解的内容,这些手册面向大众群体深入浅出地讲解大模型概念…

买了CRM却不会用?5步教你从入门到精通

先问个问题:你的客户资料是不是还散落在Excel表里? 是不是每次找个客户信息都要翻半天? 销售跟进靠聊天记录,客户流失了都不知道咋回事?如果你有这些痛点,那么你可以试一试CRM系统了! CRM(客户关系管理系统)不是花里胡哨的工具,而是帮你提升业绩、减少客户流失、提高…

读DAMA数据管理知识体系指南10数据建模(中)

读DAMA数据管理知识体系指南10数据建模(中)1. 域 1.1. 在数据建模中,域(Domain)代表某一属性可被赋予的全部可能取值 1.2. 域可以用不同的方式来表达 1.3. 域提供了一种将属性特征标准化的方法 1.4. 域中所有的值都为有效的值1.4.1. 不在域中的值被称为无效的值1.4.2. 属性中…