【Docker】Docker Compose方式搭建分布式内存数据库(Redis)集群

文章目录

开发微服务应用时,往往用到内存数据库,而内存数据库离不开Redis.Redis在日常搭建时有四种模式(单机、主备、哨兵、集群),生产环境往往采用哨兵或集群方式搭建,集群方式的资源利用率比哨兵方式高.开发者对使用虚拟机或物理机搭建集群模式往往比较熟悉,但现代应用往往使用云原生技术进行搭建.如何用Docker搭建Redis集群,这里介绍使用Docker Compose方式搭建分布式内存数据库(Redis)集群,适用于单机Docker环境,无论是本地单机开发、测试环境单机验证,还是生产环境单机运行.

开发环境

  1. macOS For Apple Silicon;
  2. Idea;
  3. Docker Desktop: 4.41.2,Engine: 28.1.1,Compose: v2.35.1-desktop.1;
  4. Docker镜像: redis:8.0;
  5. Docker Compose配置文件: redis-cluster.yaml;
  6. 命令行启动配置文件: README.md,见[命令行启动配置文件: README.md](#命令行启动配置文件: README.md)

开发流程

  1. 下载Docker Desktop并安装,Docker Desktop For Mac Apple Silicon地址;
  2. 编写本地Redis的结点的域名,并添加到/etc/hosts文件的末尾,见编写本地Redis的结点的域名,并添加到/etc/hosts文件的末尾;
  3. 编写Docker Compose配置文件,用来启动Redis集群,其中集群共6个结点,3个主结点,3个备份结点.启动命令(command)中,redis-server启动,集群配置为打开,镜像地址使用redis:8.0,六个结点分别配置,端口从7001-7006,宣布主机域名配置为从redis-node-1到redis-node-6,数据目录映射为主目录从~/seen/redis/data_1到~/seen/redis/data_6,工程文件见redis-cluster.yaml;
  4. 执行启动集群结点和创建集群命令,见启动集群结点和创建集群命令,启动集群结点运行见启动集群结点运行图;
  5. 创建集群时选择yes,见创建集群命令图.

运行效果

Docker Desktop桌面中的Redis结点启动图

Redis结点1的打印日志情况图

配置代码

命令行启动配置文件: README.md

删除集群信息

shell 复制代码
rm -rf ~/seen/redis/

新建数据目录

shell 复制代码
mkdir -p ~/seen/redis/data_1 ~/seen/redis/data_2 ~/seen/redis/data_3 ~/seen/redis/data_4 ~/seen/redis/data_5 ~/seen/redis/data_6

本地Redis的结点的域名,并添加到/etc/hosts文件的末尾

shell 复制代码
sudo vi /etc/hosts

域名映射

text 复制代码
127.0.0.1 redis-node-1
127.0.0.1 redis-node-2
127.0.0.1 redis-node-3
127.0.0.1 redis-node-4
127.0.0.1 redis-node-5
127.0.0.1 redis-node-6

启动集群结点

shell 复制代码
docker-compose -f redis-cluster.yaml up -d

创建集群

shell 复制代码
docker exec -it redis-node-1 redis-cli --cluster create \
  redis-node-1:7001 redis-node-2:7002 redis-node-3:7003 \
  redis-node-4:7004 redis-node-5:7005 redis-node-6:7006 \
  --cluster-replicas 1

关闭集群结点

shell 复制代码
docker-compose -f redis-cluster.yaml down

redis-cluster.yaml

yaml 复制代码
version: '3.8'
services:
  redis-node-1:
    image: redis:8.0
    container_name: redis-node-1
    ports:
      - "7001:7001"
    command: redis-server --cluster-enabled yes --port 7001 --cluster-announce-hostname redis-node-1 --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
    volumes:
      - ~/seen/redis/data_1:/data
    networks:
      - redis-cluster-net
  redis-node-2:
    image: redis:8.0
    container_name: redis-node-2
    ports:
      - "7002:7002"
    command: redis-server --cluster-enabled yes --port 7002 --cluster-announce-hostname redis-node-2 --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
    volumes:
      - ~/seen/redis/data_2:/data
    networks:
      - redis-cluster-net
  redis-node-3:
    image: redis:8.0
    container_name: redis-node-3
    ports:
      - "7003:7003"
    command: redis-server --cluster-enabled yes --port 7003 --cluster-announce-hostname redis-node-3 --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
    volumes:
      - ~/seen/redis/data_3:/data
    networks:
      - redis-cluster-net
  redis-node-4:
    image: redis:8.0
    container_name: redis-node-4
    ports:
      - "7004:7004"
    command: redis-server --cluster-enabled yes --port 7004 --cluster-announce-hostname redis-node-4 --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
    volumes:
      - ~/seen/redis/data_4:/data
    networks:
      - redis-cluster-net
  redis-node-5:
    image: redis:8.0
    container_name: redis-node-5
    ports:
      - "7005:7005"
    command: redis-server --cluster-enabled yes --port 7005 --cluster-announce-hostname redis-node-5 --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
    volumes:
      - ~/seen/redis/data_5:/data
    networks:
      - redis-cluster-net
  redis-node-6:
    image: redis:8.0
    container_name: redis-node-6
    ports:
      - "7006:7006"
    command: redis-server --cluster-enabled yes --port 7006 --cluster-announce-hostname redis-node-6 --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
    volumes:
      - ~/seen/redis/data_6:/data
    networks:
      - redis-cluster-net
networks:
  redis-cluster-net:
    driver: bridge

引用图

启动集群结点运行图

创建集群命令图

相关推荐
Hello.Reader18 小时前
Kafka 设计与实现动机、持久化、效率、生产者/消费者、事务、复制、日志压缩与配额
分布式·kafka
格调UI成品18 小时前
DCS+PLC协同优化:基于MQTT的分布式控制系统能效提升案例
数据库·云边协同
失散1318 小时前
分布式专题——5 大厂Redis高并发缓存架构实战与性能优化
java·redis·分布式·缓存·架构
牵牛老人18 小时前
Qt C++ 复杂界面处理:巧用覆盖层突破复杂界面处理难题之一
数据库·c++·qt
GBASE19 小时前
GBASE南大通用技术分享:构建最优数据平台,GBase 8s数据库安装准备(三)
数据库
言之。19 小时前
Django REST Framework 中 @action 装饰器详解
数据库·sqlite
janthinasnail19 小时前
使用Docker搭建MaxKB智能体平台
docker·maxkb
计算机小手20 小时前
高效 P2P 文件传输工具:FileSync 利用 WebRTC 技术实现极速安全传输
经验分享·docker·webrtc·开源软件
十八旬20 小时前
苍穹外卖项目实战(day7-1)-缓存菜品和缓存套餐功能-记录实战教程、问题的解决方法以及完整代码
java·数据库·spring boot·redis·缓存·spring cache
小橘快跑21 小时前
动态控制rabbitmq中的消费者监听的启动和停止
分布式·rabbitmq