云服务器上使用Docker Compose创建Redis三主三从集群

这篇具有很好参考价值的文章主要介绍了云服务器上使用Docker Compose创建Redis三主三从集群。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、环境

  • 云服务器
  • Ubuntu20.4
  • Dokcer 24.0.2

二、步骤

目录结构是这样:

绿色的目录是用来存储容器中的文件,不需要我们手动创建,将路径配置在配置文件中即可。黑色的目录和文件需要自己手动创建。

云服务器上使用Docker Compose创建Redis三主三从集群

 我们一共创建7个容器:

redis1~redis6是集群节点,redis_cluster是用来搭建主从关系的一个容器,搭建完之后就关闭了。

云服务器上使用Docker Compose创建Redis三主三从集群

1. 开放端口

端口记得开!端口记得开!端口记得开!端口记得开!端口记得开!端口记得开!端口记得开!端口记得开!端口记得开!端口记得开!端口记得开!端口记得开!端口记得开!端口记得开!端口记得开!端口记得开!端口记得开!端口记得开!

6379也要开!!!6379也要开!!!6379也要开!!!6379也要开!!!6379也要开!!!6379也要开!!!6379也要开!!!6379也要开!!!6379也要开!!!6379也要开!!!6379也要开!!!6379也要开!!!6379也要开!!!

redis1 redis2 redis3 redis4 redis5 redis6
端口号 6378 6380 6381 6382 6383 6384
配置文件名 redis1.conf redis2.conf redis3.conf redis4.conf redis5.conf redis6.conf

2. 准备为每个Redis节点准备配置文件

每个节点的配置文件为 redis[节点序号].conf。我是用线程的redis.conf文件改的,主要改下面几个参数,下面以redis1.conf为例:

port 6378
dir /data
requirepass 123456
masterauth 123456
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes6378.conf
cluster-node-timeout 15000
cluster-announce-ip [公网ip]
cluster-announce-port 6378
cluster-announce-bus-port 16378

3. 编写docker-compose.yml文件

一共有7个service,文件全文如下:之后再来解释为啥这么写

version: "3"

services:

  redis1:
    image: redis
    volumes:
      - /test/redis1/redis1.conf:/etc/redis/redis.conf
      - /test/data/redis1:/data
    network_mode: "host"
    command: redis-server /etc/redis/redis.conf

  redis2:
    image: redis
    volumes:
      - /test/redis2/redis2.conf:/etc/redis/redis.conf
      - /test/data/redis2:/data
    network_mode: "host"
    command: redis-server /etc/redis/redis.conf

  redis3:
    image: redis
    volumes:
      - /test/redis3/redis3.conf:/etc/redis/redis.conf
      - /test/data/redis3:/data
    network_mode: "host"
    command: redis-server /etc/redis/redis.conf
  redis3:
    image: redis
    volumes:
      - /test/redis3/redis3.conf:/etc/redis/redis.conf
      - /test/data/redis3:/data
    network_mode: "host"
    command: redis-server /etc/redis/redis.conf

  redis4:
    image: redis
    volumes:
      - /test/redis4/redis4.conf:/etc/redis/redis.conf
      - /test/data/redis4:/data
    network_mode: "host"
    command: redis-server /etc/redis/redis.conf

  redis5:
    image: redis
    volumes:
      - /test/redis5/redis5.conf:/etc/redis/redis.conf
      - /test/data/redis5:/data
    network_mode: "host"
    command: redis-server /etc/redis/redis.conf

  redis6:
    image: redis
    volumes:
      - /test/redis6/redis6.conf:/etc/redis/redis.conf
      - /test/data/redis6:/data
    network_mode: "host"
    command: redis-server /etc/redis/redis.conf


  redis-cluster:
    image: redis
    command: redis-cli -a 123456  --cluster create [内网IP]:6380 [内网IP]:6378 [内网IP]:6381 [内网IP]:6382 [内网IP]:6383 [内网IP]:6384 --cluster-replicas 1  --cluster-yes
    network_mode: "host"
    depends_on:
      - redis1
      - redis2
      - redis3
      - redis4
      - redis5
      - redis6

使用以下命令检查配置有没有什么语法上的错误,没有消息就是好消息。

dokcer-compose config -q

3.1 redis1服务

image 参数:使用最新的redis镜像

volumes 参数:数据卷映射,映射有两个一个是映射刚准备好的redis[节点序号].conf配置文件。

network_mode 参数:这里使用的是"host"模式。

也可以不选择这个模式转而这样配置:

    ports:
      - 6382:6382
      - 16382:16382
    networks: 
      - my_net 

【注意1】如果采用了ports参数+networks参数的配置,就不能再使用network_mode参数了,二者是冲突的,并且对于redis-cluster服务就可以使用各个服务名来访问,像这样:

    command: redis-cli -a 123456  --cluster create redis1:6380 redis2:6378 redis3:6381 redis4:6382 redis5:6383 redis6:6384 --cluster-replicas 1  --cluster-yes

【注意2】如果采用了ports参数+networks参数的配置,则每个节点都应该配置同一个neiworks,否则节点之间没法通信呀

【注意3】如果采用了ports参数+networks参数的配置,则不配置networks参数也可以,因为Docker Compose会根据这个文件的目录为我们配置一个响应的网络,节点们会在同一个网段下,使用如下命令就可以查看这些网络了,其中[test]_my_net是帮我们创建的网络,是bridge类型的:

云服务器上使用Docker Compose创建Redis三主三从集群

 没配置net_works的情况下,[test]_default是帮我们创建的网络:

云服务器上使用Docker Compose创建Redis三主三从集群

 直接使用network_mode: "host" 参数,则使用的就是宿主机的IP,Docker Compose就不会再配置新的网络了,至于端口我们在redis的配置文件中配置过了。

云服务器上使用Docker Compose创建Redis三主三从集群

【注意4】为什么端口号开了两个?

一个是port,一个是port+10000.

【注意5】两种配置方式的区别在哪里。ports参数+networks参数的配置 是官网推荐的配置方法,这样在各个配置文件使用服务名(这里的服务就是每个redis节点)redis1、redis2……就可以在容器间通信了。但是我选择了network_mode="host"的模式,是因为我自己的个人电脑上还有java web的代码想访问redis集群,而我没有把这个web应用的 jar 包推送到服务器上作为一个微服务和redis节点们一起启动,共享网段,如果用ports参数+networks参数的配置就没办法访问redis集群。详情请见 Docker Compose的文档。

云服务器上使用Docker Compose创建Redis三主三从集群

depends_on 参数:表示该服务依赖于哪些服务,很明显,我们需要先起6个redis服务,再在它们之间构建集群

command 参数:表示运行下面的命令,使用指定的redis.conf配置文件来启动redis服务端。

redis-server /etc/redis/redis.conf

3.2 redis-cluster服务

command:该服务会运行下面的命令来构建主从关系:

 redis-cli -a 123456  --cluster create [内网IP]:6380 [内网IP]:6378 [内网IP]:6381 [内网IP]:6382 [内网IP]:6383 [内网IP]:6384 --cluster-replicas 1  --cluster-yes

4. 运行,测试 

命令行运行:

后面那个-d参数可加可不加,我就打了个括号,我没加,因为还想看看实时的日志,就没有后台启动:

docker-compose up (-d)

看最后一行,用于构建主从关系的容器redis-cluster_1运行完命令构建主从关系的命令以后就退出了。

云服务器上使用Docker Compose创建Redis三主三从集群

 启动完之后使用docker ps -a命令可以看到,7个容器已经启动了,还有一个容器已经执行完毕并且退出了,而且当我们没有指定容器名称的时候,Docker Compose 会自动帮我们指定 [目录名]_服务名_1作为容器名。

云服务器上使用Docker Compose创建Redis三主三从集群

随便进入一个容器,使用cluster nodes和cluster info命令看看集群状态,如果cluster_state:fail那就是节点没在集群里,排查一下哪边配置有问题。

云服务器上使用Docker Compose创建Redis三主三从集群

最后最后,我在个人电脑上要连接这个集群,本地配置的是:

spring.data.redis.database=0
spring.data.redis.password=123456
spring.data.redis.cluster.nodes=[公网IP]:6385,[公网IP]:6380,[公网IP]:6381,[公网IP]:6382,[公网IP]:6383,[公网IP]:6384

三、小建议

3.1 怎么排错

报错的时候找找原因:

比如看看单个容器的日志

docker logs [容器IP/容器名]

3.2 使用脚本

一下子创建六个节点,难免手抖,写错,踩坑。建议一些重复的命令用脚本解决,虽然好像没帮上什么大忙,但是也能免得手忙脚乱的。

比如我总用这个脚本

#!/bin/bash
rm -rf ./data
docker rm -f test_redis1_1
docker rm -f test_redis2_1
docker rm -f test_redis3_1
docker rm -f test_redis4_1
docker rm -f test_redis5_1
docker rm -f test_redis6_1
docker-compose up

(报错=》一番处理 =》data目录有东西了再次启动失败了啊喂 =》删除data目录 =》容器名冲突了凸(艹皿艹 ) =》删除已经创建的容器 =》再次启动)

说多了都是泪。

云服务器上使用Docker Compose创建Redis三主三从集群文章来源地址https://www.toymoban.com/news/detail-487541.html

到了这里,关于云服务器上使用Docker Compose创建Redis三主三从集群的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 新服务器基本环境下载conda + docker + docker-compose + git

    miniconda官方下载地址 这个版本是py3.11的 执行 下完后从新开一个命令行前面就有一个(base)说明你下载好了 docker下载 免密设置(输入后再输入一次密码即可)

    2024年02月11日
    浏览(42)
  • 概述、搭建Redis服务器、部署LNP+Redis、创建Redis集群、连接集群、集群工作原理

    Top 案例1:搭建redis服务器 案例2:常用命令限 案例3:部署LNP+Redis 案例4:创建redis集群 1.1 具体要求如下 在主机redis64运行redis服务 修改服务运行参数 ip 地址192.168.88.64 服务监听的端口6364 redis服务的连接密码为 tarenaplj 1.2 方案 准备1台新虚拟机,要求如表-1所示。   1.3 步骤 实

    2024年02月12日
    浏览(76)
  • 利用群辉Docker创建MC服务器

    前段时间用旧笔记本创建了一台黑群晖,创建完就扔到角落吃灰了。今天忽然想玩MC ,正好不如将MC服务器搭建到群辉里得了。 网上找到不少教程,但是实际操作起来总是差一点。所以有了这篇文章。省的以后再弄不知道怎么弄。 说一下目的。 再群辉的docker内创建一个我的

    2024年02月07日
    浏览(78)
  • docker服务器中redis-cluster集群配置(redis-5.0.7)

    因为需要使用到docker服务器下的redis-cluster集群环境,而以前redis3.2.8版本的redis搭配起来费事费力还没有成功,所以使用了较新一些的redis版本----redis-5.0.7。 默认:dockers已经安装成功 1.1下载tar包 1.2把进行安装 2.1 编写配置文件 #编写目录 mkdir -p /usr/local/docker-redis/redis-cluster #切

    2024年02月21日
    浏览(57)
  • 3节点ubuntu24.04服务器docker-compose方式部署高可用elk+kafka日志系统并接入nginx日志

    节点名称 IP 部署组件及版本 配置文件路径 机器CPU 机器内存 机器存储 Log-001 10.10.100.1 zookeeper:3.4.13 kafka:2.8.1 elasticsearch:7.7.0 logstash:7.7.0 kibana:7.7.0 zookeeper:/data/zookeeper kafka:/data/kafka elasticsearch:/data/es logstash:/data/logstash kibana:/data/kibana 2*1c/16cores 62g 50g 系统 800g 数据盘 Log-002 10.10.10

    2024年04月27日
    浏览(43)
  • docker搭建redis集群(三主三从)及重启redis集群

    从远程仓库先拉取一下redis的镜像文件,如果已经提前安装过镜像的,可以跳过此步骤: 看到图上标识,就说明当前镜像文件已经下载好了。 通过镜像文件,分别 启动6台redis容器实例 ,并且 数据卷挂载到宿主机 上(保障容器被意外删除后数据不丢失): 每一台实例都是按

    2024年04月16日
    浏览(60)
  • 【服务器】Java连接redis及使用Java操作redis、使用场景

    在你的项目里面导入redis的pom依赖 连接redis 以下数据类型基本上涵盖了各种常见的数据存储需求,而且 Redis 的数据类型支持多种高级操作,因此特别适用于 快速、可靠、实时 的数据访问场景。 字符串(String) :最基本的数据类型,可以包含 任何数据 ,包括 二进制数据 。

    2024年02月06日
    浏览(55)
  • 【Linux】Centos 8 服务器部署:docker 安装 jdk、nginx、nacos、redis、Sentinel Dashboard

    目录 一、安装软件 (1)全部安装命令 (2)安装:jdk (3)安装:nginx  (4)安装:nacos (5)安装:redis (6)安装:Sentinel Dashboard 二、开放端口 三、启动软件  (1)启动:nacos (2)启动:nginx (3)启动:redis (4)启动:Sentinel Dashboard 四、访问网址  (1)访问:nacos 

    2024年02月06日
    浏览(61)
  • 使用RedisDesktopManager无法连接Redis服务器问题

    使用vim编辑器修改bin目录中的redis.conf文件,修改如下三项 第一项:# bind 127.0.0.1 ::1 第二项:protected-mode no 第三项daemonize yes 该配置可以控制 Redis 启动是否采用守护进程方式,即是否是后台启动。yes 是采用后台启动。 第一步:查看VM虚拟机的IP 查看命令是ip addr或是ifconfig ip a

    2024年02月02日
    浏览(45)
  • 使用 Node 创建 Web 服务器

    Node.js 提供了 http 模块,http 模块主要用于搭建 HTTP 服务端和客户端,使用 HTTP 服务器或客户端功能必须调用 http 模块,代码如下: 以下是演示一个最基本的 HTTP 服务器架构(使用 8080 端口),创建 server.js 文件,代码如下所示: 接下来我们在该目录下创建一个 index.html 文件,代

    2024年01月23日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包