一个基于 Docker 快速构建 redis 集群的小工具

一个基于 Docker 快速构建 redis 集群的小工具

薛定谔的汪 Lv5

前言

我在学习或者测试时,可能会用到 redis-cluster 环境,但当时手头没有的话得现搭,过程比较麻烦,所以搞了个 基于 Docker 快速构建 redis 集群的小工具。

集群原理就不赘述了,直接开始。

环境信息

CentOS 8

Docker 19.03.13

步骤

在 ~/ 下创建 redis-cluster 目录

cd ~/redis-cluster

1. 安装 docker 略

关闭防火墙再启动 docker

2 下载 redis 镜像

1
docker pull redis

3 docker 创建虚拟网卡

1
docker network create redis-net

因为redis 各容器节点要互相通信,且要与外界通信,所以选择 docker 的桥接模式,docker 虚拟网卡默认的就是桥接模式

1
docker network ls

image-20201025123854561

4 创建 redis 集群通用配置模板

vim redis-cluster-tmp.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#端口 
port ${PORT}

#非保护模式
protected-mode no

#启用集群模式
cluster-enabled yes
cluster-config-file nodes.conf

#超时时间
cluster-node-timeout 5000

#集群各节点IP地址 宿主机 IP
cluster-announce-ip 192.168.1.10

#集群节点映射端口
cluster-announce-port ${PORT}

#集群总线端口
cluster-announce-bus-port 1${PORT}

#开启aof持久化策略
appendonly yes

#后台运行 docker 使用配置文件启动,这里一定要为 no, 或者注释掉,不能为 yes
daemonize no

#进程号存储
pidfile /var/run/redis_${PORT}.pid

#集群加密
masterauth zhengyk
requirepass zhengyk

4.创建 用 docker 构建 redis 的脚本: start-redis-cluster.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash 
#在~/redis-cluster下生成conf和data目标,并生成配置信息

for port in `seq 7002 7007`;
do
mkdir -p ./${port}/conf && PORT=${port} envsubst < ./redis-cluster-tmp.conf > ./${port}/conf/redis.conf && mkdir -p ./${port}/data;
done


#创建6个redis容器
for port in `seq 7002 7007`;
do
docker run -d -it -p ${port}:${port} -p 1${port}:1${port} -v ~/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf -v ~/redis-cluster/${port}/data:/data --privileged=true --restart always --name redis-${port} --net redis-net --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf;
done

#打印出 docker 各个 redis ip
for port in `seq 7002 7007`;
do
echo -n "$(docker inspect --format '{{ (index .NetworkSettings.Networks "redis-net").IPAddress }}' "redis-${port}")":${port}" ";
done

5 授予 start-redis-cluster.sh 可执行权限并执行该脚本

1
2
chmod 777 start-redis-cluster.sh
./start-redis-cluster.sh

控制台打印:

image-20201025124949005

红框内的地址就是 我们创建的 6 台 redis 节点, 查看容器运行信息

1
docker ps

image-20201025130945551

6 将 6个redis 节点加入到集群中

进入到任意一个安装好的redis节点的bin目录,里面有个脚本对象 redis-cli ,然后执行集群创建

1
docker exec -it redis-7002 /bin/bash
1
2
3
#在容器内部 
#-a zhengyk 是前面配置文件里的集群认证密码, -cluster-replicas 1 表示每个主节点有 1 个从节点
./usr/local/bin/redis-cli --cluster create 172.18.0.2:7002 172.18.0.3:7003 172.18.0.4:7004 172.18.0.5:7005 172.18.0.6:7006 172.18.0.7:7007 --cluster-replicas 1 -a zhengyk

输入 yes ,redis 集群会自动分配 slot, 控制台打印

image-20201025130220120

这样我们就基于 docker 快速创建了 一个 3 主 3 从的 redis 集群。

7 停止集群的脚本 stop-redis-cluster.sh

1
2
3
4
#!/bin/bash 
docker stop redis-7002 redis-7003 redis-7004 redis-7005 redis-7006 redis-7007
docker rm redis-7002 redis-7003 redis-7004 redis-7005 redis-7006 redis-7007
rm -rf 7002 7003 7004 7005 7006 7007

最后附上所需的 配置文件和 启动、停止集群的脚本

redis-cluster-tmp.conf

start-redis-cluster.sh

stop-redis-cluster.sh

  • Title: 一个基于 Docker 快速构建 redis 集群的小工具
  • Author: 薛定谔的汪
  • Created at : 2019-10-10 16:39:03
  • Updated at : 2023-11-17 19:37:37
  • Link: https://www.zhengyk.cn/2019/10/10/redis/simple-build-redis-cluster-tool/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments