文章目录

  • 前言
  • 准备环境
  • 文件&脚本
  • redis节点清单文件
  • shell脚本
  • 操作步骤
  • ${REDIS_BASE_PATH}下生成文件目录结构如下


前言

由于最近服务器外网IP频繁变更,导致redis集群不可用,要重新搭建集群,所以简单写了个集群的一键部署脚本,通过docker来搭建集群。这个自动化脚本主要是对之前的另一篇文章《docker搭建三主三从redis集群,可外网访问》里的关键步骤的整合和集成,建议使用该脚本前先看一下上述文章,了解一下集群搭建的整体流程以及前置环境准备

准备环境

  1. docker环境
  2. redis镜像【镜像版本:5.0.5】
  3. redis-cli客户端
  4. 防火墙端口开通【端口号:6111–6116,16111–16116】

文件&脚本

redis节点清单文件

文件名:nodes-port-list.txt

文件路径:/home/redis-cluster/nodes-port-list.txt

文件用途:用于指定各节点端口

文件内容如下:

6111
6112
6113
6114
6115
6116

shell脚本

文件名:redis-cluster-script.sh

文件路径:/home/redis-cluster/redis-cluster-script.sh

文件用途:集群创建脚本

#/bin/bash
# Created by 31 on 2021-02-01
# 集群目录,可自定义
REDIS_BASE_PATH='/home/redis-cluster'
# 获取服务器公网IP
REDIS_IP=$(host myip.opendns.com resolver1.opendns.com | grep "myip.opendns.com has" | awk '{print $4}')
echo "当前公网IP:"${REDIS_IP}
# 停止和删除docker容器
echo "开始停止和删除docker容器..."
while read line
do
docker stop "redis-"$line
docker rm "redis-"$line
done < ./nodes-port-list.txt
echo“docker容器清理完成,开始创建集群配置文件......”
 
# 写入集群配置文件
cat>${REDIS_BASE_PATH}/redis-cluster.conf<<EOF
port \${PORT}
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip $REDIS_IP
cluster-announce-port \${PORT}
cluster-announce-bus-port 1\${PORT}
appendonly yes
masterauth mypassword
requirepass mypassword
EOF
echo "集群配置文件创建完毕,开始创建节点配置..."
# 创建集群各节点配置文件
while read line
do
  port=$line
  rm -rf ${REDIS_BASE_PATH}/${port}
  mkdir -p ${REDIS_BASE_PATH}/${port}/conf \
  && PORT=${port} envsubst < ${REDIS_BASE_PATH}/redis-cluster.conf > ${REDIS_BASE_PATH}/${port}/conf/redis.conf \
  && mkdir -p ${REDIS_BASE_PATH}/${port}/data; \
done < ./nodes-port-list.txt

echo “节点配置完成,开始创建新docker容器......”
#创建redis docker容器
while read line
do
 port=$line
 docker run -d -it  \
  -v /home/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
  -v /home/redis-cluster/${port}/data:/data \
  --restart always --name redis-${port} --net host \
  redis:latest redis-server /usr/local/etc/redis/redis.conf; \
done < ./nodes-port-list.txt
echo “docker容器创建完成,开始进行集群配置......”
# 拼接集群列表
NODE_LIST=""
while read line
do
NODE=${REDIS_IP}":"${line}
NODE_LIST=${NODE_LIST}" "${NODE}
done < ./nodes-port-list.txt

# 执行命令创建集群
redis-cli --cluster create $NODE_LIST --cluster-replicas 1 -a mypassword

echo "集群创建完成!"
exit 0

操作步骤

执行sh redis-cluster-script.sh命令即可

redis cluster集群启动命令 redis集群启动脚本_docker


在创建过程中会询问是否确认,输入“yes”即可

redis cluster集群启动命令 redis集群启动脚本_docker_02


等待程序执行完成即可

redis cluster集群启动命令 redis集群启动脚本_linux_03

${REDIS_BASE_PATH}下生成文件目录结构如下

create-cluster-script        -- 执行脚本文件夹
├── nodes-port-list.txt      -- 节点配置文件
└── redis-cluster-script.sh  -- 集群创建脚本
6111                         -- 6111节点目录【一下文件均由脚本生成】
├── conf
│   └── redis.conf           -- 6111节点配置文件
└── data                     
    ├── appendonly.aof
    ├── dump.rdb
    └── nodes.conf
6112
├── conf
│   └── redis.conf
└── data
    ├── appendonly.aof
    ├── dump.rdb
    └── nodes.conf
6113
├── conf
│   └── redis.conf
└── data
    ├── appendonly.aof
    ├── dump.rdb
    └── nodes.conf
6114
├── conf
│   └── redis.conf
└── data
    ├── appendonly.aof
    ├── dump.rdb
    └── nodes.conf
6115
├── conf
│   └── redis.conf
└── data
    ├── appendonly.aof
    ├── dump.rdb
    └── nodes.conf
6116
├── conf
│   └── redis.conf
└── data
    ├── appendonly.aof
    ├── dump.rdb
    └── nodes.conf
redis-cluster.conf             -- 集群配置文件【脚本生成】