搭建 redis-cluster 集群

该文章详细介绍了如何在三台CentOS虚拟机上利用Docker和Docker-compose搭建RedisCluster。首先创建配置文件redis-cluster.tmpl,然后在每台主机上根据模板生成redis.conf。接着编写docker-compose.yml文件并启动服务容器。最后通过redis-cli创建RedisCluster,并展示如何在SpringBoot应用中连接该集群。
摘要由CSDN通过智能技术生成

1、搭建环境

三台虚拟机 CentOS Linux release 7.9.2009 (Core)
Docker version 23.0.1
Docker-compose version 1.25.0-rc4

主机IP:
192.168.182.137
192.168.182.135
192.168.182.136

2、搭建步骤

2.1 创建目录及配置文件 redis-cluster.tmpl 并编写

mkdir -p /usr/local/docker-redis/redis-cluster
在此目录下创建 redis-cluster.tmpl 文件并编写如下内容:
(这个文件主要是当作一个创建redis.conf的模板!当一个机器要创建多个redis节点,基于一个模板进行创建是很方便的)

port ${PORT} # 节点端口;
requirepass 123456 # 添加访问认证;
masterauth 123456 # 如果主节点开启了访问认证,从节点访问主节点需要认证;
protected-mode no # 保护模式
daemonize no # 是否以守护线程的方式启动(后台启动),默认 no;
appendonly yes # 是否开启 AOF 持久化模式,默认 no;
cluster-enabled yes # 是否开启集群模式,默认 no;
cluster-config-file nodes.conf # 集群节点信息文件;
cluster-node-timeout 15000 # 集群节点连接超时时间;
cluster-announce-ip 192.168.182.137 # 集群节点 IP,填写宿主机的 IP;
cluster-announce-port ${PORT} # 集群节点映射端口;
cluster-announce-bus-port 1${PORT} # 集群节点总线端口。

每个 Redis 集群节点都需要打开两个 TCP 连接。一个用于为客户端提供服务的正常 Redis TCP 端口,例如 6379。还有一个基于 6379 端口加 10000 的端口,比如 16379。

三台主机都需要做上述配置。创建相同的目录,编辑 redis-cluster.tmpl 文件。
唯一不同的地方是 cluster-announce-ip 替换为每个主机的ip

2.2 根据 redis-cluster.tmpl 执行指令

在 192.168.182.137 主机执行如下命令:(基于上述 redis-cluster.tmpl 模板,填充PORT 创建 redis.conf )

mkdir -p 6377/conf && PORT=6377 envsubst < redis-cluster.tmpl > 6377/conf/redis.conf && mkdir -p 6377/data;

在 192.168.182.135 主机执行:

mkdir -p 6378/conf && PORT=6378 envsubst < redis-cluster.tmpl > 6378/conf/redis.conf && mkdir -p 6378/data;

在 192.168.182.136 主机执行:

mkdir -p 6379/conf && PORT=6379 envsubst < redis-cluster.tmpl > 6379/conf/redis.conf && mkdir -p 6379/data;

这里是一个主机只有一个redis节点,如果要有多个,比如三个的话。则使用shell for 语句来创建文件目录。如下是一个主机3个redis节点(6371~6373)时的创建:

for port in `seq 6371 6373`; do \
  mkdir -p ${port}/conf \
  && PORT=${port} envsubst < redis-cluster.tmpl > ${port}/conf/redis.conf \
  && mkdir -p ${port}/data;\
done

2.3 编写 docker-compose.yml 文件

在 192.168.182.137 主机 /usr/local/docker-redis 目录下创建docker-compose.yml 文件并编辑。

# 描述 Compose 文件的版本信息
version: "3.3"

# 定义服务,可以多个
services:
  redis-6377: # 服务名称
    image: redis # 创建容器时所需的镜像
    container_name: redis-6377 # 容器名称
    restart: always # 容器总是重新启动
    network_mode: "host" # host 网络模式
    volumes: # 数据卷,宿主机目录挂载
      - /usr/local/docker-redis/redis-cluster/6377/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - /usr/local/docker-redis/redis-cluster/6377/data:/data
    command: redis-server /usr/local/etc/redis/redis.conf # 覆盖容器启动后默认执行的命令,直接开启redis

同理,分别在另外两台主机同样目录位置创建 docker-compose.yml 文件并编辑。
在 192.168.182.135 主机:

version: "3.3"

services:
  redis-6378: 
    image: redis 
    container_name: redis-6378 
    restart: always 
    network_mode: "host" 
    volumes: 
      - /usr/local/docker-redis/redis-cluster/6378/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - /usr/local/docker-redis/redis-cluster/6378/data:/data
    command: redis-server /usr/local/etc/redis/redis.conf 

在 192.168.182.136 主机:

version: "3.3"

services:
  redis-6379: 
    image: redis
    container_name: redis-6379 
    restart: always 
    network_mode: "host" 
    volumes: 
      - /usr/local/docker-redis/redis-cluster/6379/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - /usr/local/docker-redis/redis-cluster/6379/data:/data
    command: redis-server /usr/local/etc/redis/redis.conf 

2.4 创建并启动所有服务容器

分别在三台主机的 /usr/local/docker-redis 目录下执行:

docker-compose up -d

2.5 创建 Redis Cluster集群

随便进入一个容器,并切到 /usr/local/bin 目录

docker exec -it redis-6377 bash
cd /usr/local/bin

通过如下指令实现 Redis Cluster 集群的搭建

redis-cli -a 123456 --cluster create 192.168.137:6377 192.168.135:6378 192.168.136:6379 --cluster-replicas 2

–cluster-replicas 2 表示 一主二从

执行指令后出现提示信息,输入yes。
未出现任何错误情况下,至此搭建完成

搭建过之后可以在任一容器中访问到存储在其他节点的数据
如:在 6377 容器中进入 6377 端口号 redis 的控制台

docker exec -it redis-6377 /usr/local/bin/redis-cli -c -a 123456 -h 192.168.182.137 -p 6377

在 6377 容器中直接进入 6379 端口号 redis 的控制台

docker exec -it redis-6377 /usr/local/bin/redis-cli -c -a 123456 -h 192.168.182.136 -p 6379

2.6 springboot 连接 redis-cluster 集群

spring:
   redis:
    cluster:
       nodes: 192.168.182.137:6377,192.168.182.135:6378,192.168.182.136:6379
    password: 123456
    database: 0
    connect-timeout: 10000
    lettuce:
       pool:
         min-idle: 0
         max-idle: 8
         max-active: 8
         max-wait: -1ms

参考文章:
redis-cluster集群搭建
redis集群命令简单使用

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

henulmh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值