docker-compose 搭建redis集群(三台服务器,每台服务器上一主一从)

 更新时间:2025年03月31日 10:39:33   作者:黑尾土拨鼠  
本文主要介绍了Docker Compose搭建Redis集群是一种便捷高效的方法,本次搭建使用三台服务器,每台服务器上一主一从,具有一定的参考价值,感兴趣的可以了解一下

1、前言

使用 Docker Compose 搭建 Redis 集群是一种便捷高效的方法,可以快速地在本地或者测试环境中搭建一个 Redis 集群。以下是详细的步骤,在 Docker 环境中使用 docker-compose 来搭建 Redis 集群。

本次搭建使用三太虚拟机作为宿主机,ip分别如下:

192.168.10.128
192.168.10.129
192.168.10.130

2、准备工作

2.1、Docker 安装

通过以下指令进行Docker 安装:

// 更新软件包索引
sudo apt-get update

// 允许APT使用HTTPS
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

// 添加 Docker 的官方 GPG 密钥:
sudo  curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
// 设置稳定版仓库
sudo add-apt-repository \
   "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ \
  $(lsb_release -cs) \
  stable"
// 更新软件包索引
sudo apt-get update

// 安装 Docker
sudo apt-get install docker-ce

// 查看Docker状态
sudo systemctl status docker

2.2、docker-compose 安装

docker-compose 安装命令如下:

sudo curl -L "https://github.com/docker/compose/releases/download/v2.29.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

2.3 目录创建

在每台创建redis的data目录,使用以下脚本进行:

#!/bin/bash

for dir in master/data slave/data; do
  mkdir -p "/home/arkham/docker/redis/redis-cluster/$dir";
done

3、redis配置文件

3.1 生成redis.conf文件

我们需要为每个 Redis 节点创建独立的配置文件,以下是 redis.conf 的示例,其他节点的配置文件类似,只需要修改端口和节点名称。为了方便操作,同样通过shell脚步来完成,不同服务器只需要更改cluster-announce-ip即可,脚本代码如下:

#!/bin/bash

for dir in master slave; do
 if [ "$dir" == "master" ]; then
    port=6379
  elif [ "$dir" == "slave" ]; then
    port=6380
  fi
echo "port $port
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir /data
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
requirepass 123456arkham
masterauth 123456arkham
cluster-announce-ip 192.168.10.128" >/home/arkham/docker/redis/redis-cluster/$dir/redis.conf;
done

3.2 shell文件无法执行问题解决

在windows下编写的shell脚本,将shell文件拷贝至相应服务器,执行过程中可能会报文件不存在错误,这时候脚本文件可能执行失败,一个是权限问题,还有可能是文件问题,dos格式的文件行尾为^M,而 unix 格式的文件行尾为$,解决办法如下

# 给sehll目录下所有文件增加权限
chmod -R 775 /home/server/shell

# 查看行尾符 dos格式的文件行尾为^M$,而unix格式的文件行尾为$
sudo  cat -A redis.sh
# 修改
sudo  sed -i "s/\r//" redis.sh

3.3 docker-compose.yml文件编写

docker-compose.yml文件内容如下:

version: '3.1'

services:
  redis-master:
    image: redis:latest
    container_name: redis-master
    restart: always
    ports:
      - "6379:6379"
      - "16379:16379"
    environment:
      - TZ=Asia/Shanghai
    volumes:
    - /home/arkham/docker/redis/redis-cluster/master/data:/data
    - /home/arkham/docker/redis/redis-cluster/master/redis.conf:/usr/local/etc/redis/redis.conf
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 4G
        reservations:
          cpus: '2'
          memory: 4G
    command: ["redis-server","/usr/local/etc/redis/redis.conf"]

  redis-slave:
    image: redis:latest
    container_name: redis-slave
    restart: always
    ports:
      - "6380:6380"
      - "16380:16380"
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - /home/arkham/docker/redis/redis-cluster/slave/data:/data
      - /home/arkham/docker/redis/redis-cluster/slave/redis.conf:/usr/local/etc/redis/redis.conf
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 4G
        reservations:
          cpus: '2'
          memory: 4G
    command: [ "redis-server","/usr/local/etc/redis/redis.conf" ]

4、启动集群及初始化

4.1 启动 Redis 集群

在 redis 目录下,执行以下命令启动 Redis 节点:

sudo docker-compose up -d

如果拉取镜像超时失败或者拒绝连接,可能是因为docker源的原因,修改为国内源:

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://do.nark.eu.org",
        "https://dc.j8.work",
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://docker.nju.edu.cn"
    ]
}
sudo systemctl daemon-reload
sudo systemctl restart docker

4.2 Redis 集群初始化

集群启动后,需进行集群初始化操作。需要进入到任意一个 Redis 容器中,并使用 redis-cli 命令来创建集群。

// 进入任意 Redis 容器
docker exec -it redis-master  /bin/bash
// 执行创建集群
redis-cli -a 123456arkham --cluster create 192.168.10.128:6379 192.168.10.128:6380 192.168.10.129:6379 192.168.10.129:6380 192.168.10.129:6379 192.168.10.129:6380 --cluster-replicas 1
// 创建成功后连接任意一个redis节点
redis-cli -a 123456arkham -c -h 192.168.10.128 -p 6379
// 查看集群信息
cluster info

执行结果如下:

192.168.10.128:6379> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:4
cluster_size:3
cluster_current_epoch:4
cluster_my_epoch:1
cluster_stats_messages_ping_sent:2972
cluster_stats_messages_pong_sent:2841
cluster_stats_messages_fail_sent:4
cluster_stats_messages_sent:5817
cluster_stats_messages_ping_received:2841
cluster_stats_messages_pong_received:2970
cluster_stats_messages_fail_received:2
cluster_stats_messages_received:5813
total_cluster_links_buffer_limit_exceeded:0

5、总结

通过上述步骤,我们已经使用 Docker Compose 成功搭建了一个 Redis 集群。这种方式特别适合用于开发和测试环境,因为它的配置简单、部署快速,非常适合本地或测试环境中进行集群架构的模拟和验证。但在生产环境中,Redis 集群的部署和使用需要更为谨慎和仔细的规划,包括性能调优、安全配置、资源分配等多个方面。

使用 Docker Compose 部署 Redis 集群的优势主要在于快速构建和灵活配置。通过 Compose 文件,可以定义多个 Redis 实例的网络、端口和数据卷,实现一键启动整个集群的需求。在开发和测试阶段,这种方式能够节省大量时间,便于模拟复杂的集群环境,帮助开发者验证 Redis 集群在不同场景下的表现和问题。Docker Compose 对资源的隔离性和可移植性,使得 Redis 集群的搭建和销毁变得极其简单,这对于功能开发、问题排查和测试用例的验证来说,都是极大的优势。

到此这篇关于docker-compose 搭建redis集群(三台服务器,每台服务器上一主一从)的文章就介绍到这了,更多相关docker-compose 搭建redis集群内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker安装配置Oracle详细步骤记录(以作持久化处理)

    Docker安装配置Oracle详细步骤记录(以作持久化处理)

    docker是一个用Go语言实现的开源项目,可以让我们方便的创建和使用容器,下面这篇文章主要给大家介绍了关于Docker安装配置Oracle详细步骤的相关资料,需要的朋友可以参考下
    2024-03-03
  • 详解Docker中容器的备份、恢复和迁移

    详解Docker中容器的备份、恢复和迁移

    本篇文章主要介绍了详解Docker中容器的备份、恢复和迁移 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Docker 配置阿里云容器服务操作

    Docker 配置阿里云容器服务操作

    这篇文章主要介绍了Docker 配置阿里云容器服务操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • docker run -d和docker run -it的区别详解

    docker run -d和docker run -it的区别详解

    记得第一次接触docker的时候,教程中写着docker run -it之类的命令,当时对这个-it选项是一知半解,下面这篇文章主要给大家介绍了关于docker run -d和docker run -it的区别的相关资料,需要的朋友可以参考下
    2023-05-05
  • Docker搭建并启动Logstash的实现方式

    Docker搭建并启动Logstash的实现方式

    这篇文章主要介绍了Docker搭建并启动Logstash的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • IDEA远程连接Docker的流程步骤

    IDEA远程连接Docker的流程步骤

    这篇文章主要介绍了IDEA远程连接Docker的流程步骤,文中通过代码示例给大家介绍的非常详细,对大家学习IDEA远程连接Docker有一定的帮助,需要的朋友可以参考下
    2024-10-10
  • Docker 命令教程(附中文解释)

    Docker 命令教程(附中文解释)

    这篇文章主要介绍了Docker 命令教程的相关资料,在学习Docker的过程中,特地把所以命令实验了一番并整理,希望大家尽快掌握此部分的知识,有需要的小伙伴可以参考下
    2016-10-10
  • Docker服务迁移的实现

    Docker服务迁移的实现

    本文详细介绍了如何备份和迁移Docker服务数据,包括停止Docker服务、备份Docker数据和DockerCompose文件,使用SCP或Rsync传输备份文件,以及在新服务器上恢复Docker数据和设置权限,文中提供了详细的命令和步骤,确保数据迁移过程顺利进行
    2024-10-10
  • 使用docker命令不需要敲sudo的操作

    使用docker命令不需要敲sudo的操作

    这篇文章主要介绍了使用docker命令不需要敲sudo的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • 在Docker容器中部署静态网页的方法教程

    在Docker容器中部署静态网页的方法教程

    这篇文章主要给大家介绍了在Docker容器中部署静态网页的方法教程,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-06-06

最新评论