docker-compose 搭建redis集群(三台服务器,每台服务器上一主一从)
创始人
2024-09-25 05:48:53
0

文章目录

  • 1、前言
  • 2、准备工作
    • 2.1、Docker 安装
    • 2.2、docker-compose 安装
    • 2.3 目录创建
  • 3、redis配置文件
    • 3.1 生成redis.conf文件
    • 3.2 shell文件无法执行问题解决
    • 3.3 docker-compose.yml文件编写
  • 4、启动集群及初始化
    • 4.1 启动 Redis 集群
    • 4.2 Redis 集群初始化
  • 5、总结

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 集群的搭建和销毁变得极其简单,这对于功能开发、问题排查和测试用例的验证来说,都是极大的优势。

相关内容

热门资讯

一分钟知晓!(算翻宝典)外挂透... 一分钟知晓!(算翻宝典)外挂透视辅助代打!(透视)详细教程(2021已更新)(哔哩哔哩)是一款可以让...
推荐一款!网易棋牌麻将有挂的,... 推荐一款!网易棋牌麻将有挂的,网易棋牌才能赢,原来真实是真的有挂(2025已更新)(哔哩哔哩)推荐一...
终于知道!((WPK app)... 终于知道!((WPK app))外挂透明挂辅助|工具!太坑了原来真的真的是有挂(2024已更新)(哔...
实测揭晓!德扑之星软件模拟器,... 实测揭晓!德扑之星软件模拟器,红龙扑克有挂的,wpk稳定真实真的是有挂(2022已更新)(哔哩哔哩)...
一分钟揭秘!蜀州石城麻将外挂辅... 一分钟揭秘!蜀州石城麻将外挂辅助器神器,wpk俱乐部有ai,wpk德州原来确实真的是有挂(2022已...
实测教程!WPK最新版软件透明... 实测教程!WPK最新版软件透明挂!2021已更新外挂透明挂插件(透视辅助)(哔哩哔哩)是一款可以让一...
6分钟知晓!(28圈)外挂透明... 自定义新版28圈系统规律,只需要输入自己想要的开挂功能,一键便可以生成出28圈专用辅助器,不管你是想...
必知教程!聚乐九州麻将有挂的,... 您好,边锋老友棋牌这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】很多玩家在这款...
9分钟了解!aapoker是软... 9分钟了解!aapoker是软件,aapoker有网页版的,微扑克线上原来一直都是有挂(2024已更...
重大通报!((微扑克机器人))... 您好,微扑克机器人这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】很多玩家在这款...