docker-compose redis集群搭建

本文详细介绍了使用docker-compose搭建redis集群的方法。首先需准备好docker和docker-compose环境,创建并配置install.sh文件,赋予其执行权限后运行。还说明了文件内容的注意事项,如替换IP、放开端口等。此外,给出了停止、删除集群及查看集群情况的脚本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 docker-compose redis集群搭建
  1、准备好docker、docker-compose环境
  2、找一个自己喜欢的目录,通过 vi install.sh 创建sh文件
  3、给install.sh文件放入以下内容,:wq保存退出
  4、.sh文件就是文本文件,如果要执行,需要使用chmod a+x install.sh来给可执行权限
  执行
  方法一 本身目录下运行
  进入 cd /目录/目录文件下
  执行 ./install.sh
  命令会在当前目录下创建一个“test”目录。
  方法二 绝对路劲运行
  执行 /home/work/test.sh 
  方法三 本身目录下运行
  sh test.sh


  以下文件内容注意点:
  1、替换ip,成你自己机器的ip
  2、放开用到的所有端口,防火墙问题
  3、有需要的可以修改/data/redis/redis-cluster路径位置
  4、有需要请修改自己的redis密码
  5、有需要执行redis版本可以在image: redis:latest位置修改

  ##############################以下是install.sh的内容 start###################################
  #!/bin/bash

  # 创建redis挂载目录
  echo "step 1 -> 创建redis安装位置------"
  mkdir -p /data/redis/redis-cluster
  cd /data/redis/redis-cluster

  echo "step 2 -> 创建redis-cluster.tmpl模板------"
  cat <<'EOF'> redis-cluster.tmpl
  port ${PORT}
  protected-mode no
  cluster-enabled yes
  cluster-config-file nodes.conf
  cluster-node-timeout 5000
  cluster-announce-ip 192.168.103.131
  cluster-announce-port ${PORT}
  cluster-announce-bus-port 1${PORT}
  requirepass 123456
  EOF
  #123456密码由自己修改
  #for port in `seq 6391 6396`; do \
  #firewall-cmd --zone=public --add-port=${port}/tcp --permanent
  #done

  echo "step 3 -> 创建redis数据配置挂载目录------"

  CLUSTER_ANNOUNCE_IP=192.168.103.131
  echo ${CLUSTER_ANNOUNCE_IP}

  for port in `seq 6391 6396`; do \
  mkdir -p ./${port}/conf \
  && PORT=${port} CLUSTER_ANNOUNCE_IP=${CLUSTER_ANNOUNCE_IP}  envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \
  && mkdir -p ./${port}/data; \
  done

  echo "step 4 -> 创建redis docker-compose.yaml 模板------"
  cat <<EOF > docker-compose.yaml
  version: '3'
  services:
    redis-6391:
      image: redis:latest
      container_name: redis-6391
      command: redis-server /usr/local/etc/redis/redis.conf --appendonly yes
      privileged: true
      restart: always
      volumes:
        - /data/redis/redis-cluster/6391/data:/data
        - /data/redis/redis-cluster/6391/conf/redis.conf:/usr/local/etc/redis/redis.conf
      ports:
        - 6391:6391
        - 16391:16391
    redis-6392:
      image: redis:latest
      container_name: redis-6392
      command: redis-server /usr/local/etc/redis/redis.conf --appendonly yes
      privileged: true
      restart: always
      volumes:
        - /data/redis/redis-cluster/6392/data:/data
        - /data/redis/redis-cluster/6392/conf/redis.conf:/usr/local/etc/redis/redis.conf
      ports:
        - 6392:6392
        - 16392:16392
    redis-6393:
      image: redis:latest
      container_name: redis-6393
      command: redis-server /usr/local/etc/redis/redis.conf --appendonly yes
      privileged: true
      restart: always
      volumes:
        - /data/redis/redis-cluster/6393/data:/data
        - /data/redis/redis-cluster/6393/conf/redis.conf:/usr/local/etc/redis/redis.conf
      ports:
        - 6393:6393
        - 16393:16393
    redis-6394:
      image: redis:latest
      container_name: redis-6394
      command: redis-server /usr/local/etc/redis/redis.conf --appendonly yes
      privileged: true
      restart: always
      volumes:
        - /data/redis/redis-cluster/6394/data:/data
        - /data/redis/redis-cluster/6394/conf/redis.conf:/usr/local/etc/redis/redis.conf
      ports:
        - 6394:6394
        - 16394:16394
    redis-6395:
      image: redis:latest
      container_name: redis-6395
      command: redis-server /usr/local/etc/redis/redis.conf --appendonly yes
      privileged: true
      restart: always
      volumes:
        - /data/redis/redis-cluster/6395/data:/data
        - /data/redis/redis-cluster/6395/conf/redis.conf:/usr/local/etc/redis/redis.conf
      ports:
        - 6395:6395
        - 16395:16395
    redis-6396:
      image: redis:latest
      container_name: redis-6396
      command: redis-server /usr/local/etc/redis/redis.conf --appendonly yes
      privileged: true
      restart: always
      volumes:
        - /data/redis/redis-cluster/6396/data:/data
        - /data/redis/redis-cluster/6396/conf/redis.conf:/usr/local/etc/redis/redis.conf
      ports:
        - 6396:6396
        - 16396:16396
  EOF

  echo "docker-compose redis 生成成功!"

  echo "step 5 -> 运行docker-compose 部署启动redis容器------"
  # 运行docker-compose启动redis容器
  docker-compose -f docker-compose.yaml up -d

  exist=$(docker inspect --format '{{.State.Running}}' redis-6391)

  if [[${exist}!='true']];
  then
      sleep 3000
  else
      echo 'redis容器启动成功!'
      IP_RESULT=""
      CONTAINER_IP=""
      for port in `seq 6391 6396`;
      do
      #CONTAINER_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-${port})
      IP_RESULT=${IP_RESULT}${CLUSTER_ANNOUNCE_IP}":"${port}" "
      done
  fi
  echo "获取redis容器ip和端口号:" ${IP_RESULT}

  echo "step 6 -> redis 执行集群指令------"
  #进入其中一个redis-6391,然后执行集群指令,-a 123456,是密码登录
  docker exec -it redis-6391 redis-cli -a 123456 --cluster create ${IP_RESULT} --cluster-replicas 1
  #执行了上面这句后,控制台需要输入 yes ,才能启动集群
  ##############################以下是install.sh的内容 end###################################


  #停止集群跟删除集群
  ##############################以下是 delete_redis_cluster.sh的内容 start###################################
  #!/bin/bash
  for port in `seq 6391 6396`; do
  docker stop "redis-"${port}
  sleep 1
  docker rm "redis-"${port}
  done
  ##############################以下是 delete_redis_cluster.sh的内容 end###################################


  ##############################以下是 show_cluster_info.sh的内容 start###################################
  #查看集群情况,-a 123456 密码按照自己的来,redis-6391是你docker-compose启动时指定的其中一个redis名称
  docker exec -it redis-6391 redis-cli -p 6391 -a 123456
  #执行show_cluster_info.sh,再输入cluster nodes 或者 cluster info 可以查看集群情况
  ##############################以下是 show_cluster_info.sh的内容 end###################################

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值