搭建 redis-cluster 集群

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集群命令简单使用

猜你喜欢

转载自blog.csdn.net/henulmh/article/details/129714422