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
謎麟
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!