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.path=/nfs_share \
    --set storageClass.defaultClass=true \
    --set image.tag=v4.0.2
helm search repo redis-cluster
cd redis-cluster
helm install redis-cluster ./redis-cluster \
    --set cluster.enabled=true \
    --set persistence.size=1Gi \
    --set password=password \
    --set image.tag=7.4.2 \

helm部署redis集群的更多相关文章

  1. window下使用Redis Cluster部署Redis集群

    日常的项目很多时候都需要用到缓存.redis算是一个比较好的选择.一般情况下做一个主从就可以满足一些比较小的项目需要.在一些并发量比较大的项目可能就需要用到集群了,redis在Windows下做集群可 ...

  2. laravel项目利用twemproxy部署redis集群的完整步骤

    Twemproxy是一个代理服务器,可以通过它减少Memcached或Redis服务器所打开的连接数.下面这篇文章主要给大家介绍了关于laravel项目利用twemproxy部署redis集群的相关资 ...

  3. Redis笔记 -- 在 Centos7.4单机中部署Redis集群(二)

    0x00--背景和目的 在单台PC服务器上部署Redis集群,通过不同的TCP端口启动多实例,模拟多台独立PC组成集群. 0x01--环境描述: Centos版本:CentOS Linux relea ...

  4. Centos6.6部署Redis集群

    Centos6.6部署Redis集群 1环境准备 1环境安装redis 1安装ruby 2配置redis主从环境 3部署redis sentinel服务器 5集群使用 13当前集群环境说明 13测试功 ...

  5. Centos7部署Redis集群

    Redis简介 Redis(Remote Dictionary Server)是完全开源的.遵守BSD协议的.高性能的Key-Value数据库. Redis与其他Key-Value缓存产品有一下三个特 ...

  6. 在 Kubernetes 中部署 Redis 集群

    在 Kubernetes 中部署 Redis 集群 在Kubernetes中部署Redis集群面临挑战,因为每个 Redis 实例都依赖于一个配置文件,该文件可以跟踪其他集群实例及其角色.为此,我们需 ...

  7. CentOS下部署Redis集群

    一.部署环境 服务器三台: 10.10.15.41(配置运行两个实例,端口:6379,6380) 10.10.15.42(配置运行两个实例,端口:6381,6382) 10.10.15.43(配置运行 ...

  8. 利用docker部署redis集群

    目录 一.首先配置redis.conf文件,... 1 1.获取配置文件... 1 2.修改各配置文件的参数... 2 二.下载redis镜像.启动容器... 2 1.创建网络... 2 2.拉取镜像 ...

  9. 单个机器部署redis集群模式(一键部署脚本)

    一.检查机器是否安装gcc.unzip.wget 二.部署模式 #模式1: 将所有主从节点以及sentinel节点部署在同一台机器上 #模式2: 将一个数据节点和一个sentinel节点部署在一台机器 ...

  10. 部署redis集群

    1.redis部署 redis单实例部署参考:https://www.cnblogs.com/silgen/p/16537299.html 版本:6.2.7 集群:6个节点(redis集群至少3个节点 ...

随机推荐

  1. 【MySQL】求和查询,目标值int,但空数据时返回null的问题(Java)

    问题分析 int selectDeviceMonthRepairCount(String deviceType, String month); <select id="selectDe ...

  2. H2数据UNIX_TIMESTAMP兼容问题

    开篇  今天某同事在spring结合H2实现mybatis DAO层单测的时候遇到一个问题,本着人道主义临时支持下我司大xx业务,就帮忙一起看了下,回想一下整个过程还是挺有意思的,就顺便写了这篇文章来 ...

  3. 聊一聊 C#线程池 的线程动态注入 (下)

    一:背景 1. 讲故事 前面二篇我们聊到了 Thread.Sleep 和 Task.Result 场景下的线程注入逻辑,在线程饥饿的情况下注入速度都不是很理想,那怎么办呢?有没有更快的注入速度,这篇作 ...

  4. Qt音视频开发43-人脸识别服务端

    一.前言 上一篇文章写道人脸识别客户端程序,当然要对应一个服务端程序,客户端才能正常运行,毕竟客户端程序需要与服务端程序进行交互他才能正常工作.通常人脸识别服务端程序需要和人脸识别的相关处理库在一起, ...

  5. Java网约车项目实战:实现抢单功能详解

    在网约车项目中,抢单功能是非常关键的一部分,它决定了司机能否及时响应乘客的订单,提高整个平台的运营效率.本文将详细介绍如何使用Java来实现网约车项目的抢单功能,并提供一个完整的代码示例,以便读者能够 ...

  6. [转]Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简述及技术选型介绍

    原文链接: Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简述及技术选型介绍

  7. 使用R语言可视化地图数据

    在科研工作中,经常会遇到需要在地图上展示数据的情况,今天分享一下如何使用R语言可视化地图数据 # 先安装和导入R包,这里使用了本地地图数据,所以只导入maps包即可 # install.package ...

  8. Solution Set -「Public NOIP Round #3 (Div. 1)」

    \(\mathscr{A}\sim\) 移除石子   Tags:「A.构造」「C.细节」   "显然" 直接按 \((x,y)\) 二元组排序后两两组成正方形! 喜提 \(90\t ...

  9. G1原理—2.G1是如何提升分配对象效率

    大纲 1.G1的对象分配原理是怎样的 2.深入分析TLAB机制原理 3.借助TLAB分配对象的实现原理是什么 4.什么是快速分配 + 什么是慢速分配 5.大对象分配的过程 + 与TLAB的关系 6.救 ...

  10. Python 潮流周刊#85:让 AI 帮你写出更好的代码(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...