Docker 搭建Redis 集群 一键搭建
#/bin/bash
set -e
# 创建 redis 集群
# 一共多少个主节点
master=6
# 密码
pass="123456"
# io线程数量
iothreads=8
# 一共主节点有多少个从节点
slaveconn=1
# TODO: redis tag
# 总共数量
count=$(expr ${master} \* $(expr ${slaveconn} + 1 ))
echo "集群总数 ${count}"
# 生成 Compose File
cat > compose.yaml << EOF
networks:
redis:
name: redis
ipam:
config:
- subnet: 172.18.1.0/24
gateway: 172.18.1.1
services:
EOF
for i in $(seq 1 ${count}); do
cat >> compose.yaml << EOF
node${i}:
image: redis:7.2
networks:
redis:
ipv4_address: 172.18.1.$(expr ${i} + 1)
volumes:
- node${i}:/data
- ./redis.conf:/config/redis.conf
command: redis-server /config/redis.conf
EOF
done
echo volumes: >> compose.yaml
for i in $(seq 1 ${count}); do
cat >> compose.yaml << EOF
node${i}:
EOF
done
# 下载 redis.conf
wget https://raw.githubusercontent.com/redis/redis/7.2/redis.conf -O redis.conf
# 修改配置
sed -i -r -e 's/^bind.*?$/bind * -::*/' \
-e 's/^protected-mode.*?$/protected-mode no/' \
-e 's/^#? ?requirepass.*$/requirepass '"${pass}"'/' \
-e 's/^# io-threads[^(-do)].*?$/io-threads '"${iothreads}"'/' \
-e 's/^# io-threads-do-reads.*?$/io-threads-do-reads yes/' \
-e 's/^# cluster-enabled.*?$/cluster-enabled yes/' \
-e 's/^# cluster-config-file.*?$/cluster-config-file nodes-6379.conf/' \
-e 's/^#? ?masterauth.*?$/masterauth '"${pass}"'/' \
-e 's/^#? ?repl-backlog-size.*?$/repl-backlog-size 512mb/' redis.conf
# -e 's/^repl-diskless-sync.*?$/repl-diskless-sync no/' \
# 启动 docker compose
docker compose up -d
# 等待 redis 启动完成
sleep 5
docker run -it --rm --network redis redis:7.2\
redis-cli -a ${pass} --cluster create --cluster-replicas ${slaveconn} $(for i in $(seq 1 ${count}); do echo node${i}:6379;done)
# 压力测试
# docker run -it --rm --network redis redis:7.2 redis-benchmark --cluster -h node1 -a ${pass} -d 1024 -n 100000000 -r 100000000 -c 50 -P 16 -t ping,set,get