docker-compose搭建redis伪集群

docker-compose搭建redis伪集群

docker-compose搭建redis伪集群

1、端口的安排

搭建三主三从,所以需要6个端口

server_ip=192.168.43.23(自己的主机的ip地址)

master-1:16379

master-2:16380

master-3:16381

slave-1:16389

slave-2:16390

slave-3:16391

这里虽然用到了6个端口,其实还需要占用3个集群总线的端口,就是master的端口+1000,也就是26379,26380,26381端口,需要查看端口是否被占用以及防火墙是否开启

2、创建文件及文件夹

(1)创建/docer-data/redis-cluster

我的所有的redis集群的文件都是放到该文件夹下面的,里面包含如下内容:

文件:docker-compose.yaml

文件夹:master-1、master-2、master-3、slave-1、slave-2、slave-3

其中,docker-compose.yaml是docker-compose启动redis集群的配置文件

下面的文件夹,是存放每个redis服务的资源以及生成数据或者log等

(2)文件内容

docker-compose.yaml

version: '3'

services:
 master-1:
  container_name: master-1
  image: redis:5.0.8
  command: redis-server /etc/usr/local/redis.conf
  network_mode: "host"
  restart: always
  volumes:
   - ./master-1/redis.conf:/etc/usr/local/redis.conf
   - ./master-1/redis.log:/usr/local/redis/logs/redis-server.log
   - ./master-1/data:/data

 master-2:
  container_name: master-2
  command: redis-server /etc/usr/local/redis.conf
  image: redis:5.0.8
  network_mode: "host"
  restart: always
  volumes:
   - ./master-2/redis.conf:/etc/usr/local/redis.conf
   - ./master-2/redis.log:/usr/local/redis/logs/redis-server.log
   - ./master-2/data:/data

 master-3:
  container_name: master-3
  image: redis:5.0.8
  command: redis-server /etc/usr/local/redis.conf
  network_mode: "host"
  restart: always
  volumes:
   - ./master-3/redis.conf:/etc/usr/local/redis.conf
   - ./master-3/redis.log:/usr/local/redis/logs/redis-server.log
   - ./master-3/data:/data

 slave-1:
  container_name: slave-1
  image: redis:5.0.8
  command: redis-server /etc/usr/local/redis.conf
  network_mode: "host"
  restart: always
  volumes:
   - ./slave-1/redis.conf:/etc/usr/local/redis.conf
   - ./slave-1/redis.log:/usr/local/redis/logs/redis-server.log
   - ./slave-1/data:/data

 slave-2:
  container_name: slave-2
  image: redis:5.0.8
  command: redis-server /etc/usr/local/redis.conf
  network_mode: "host"
  restart: always
  volumes:
   - ./slave-2/redis.conf:/etc/usr/local/redis.conf
   - ./slave-2/redis.log:/usr/local/redis/logs/redis-server.log
   - ./slave-2/data:/data

 slave-3:
  container_name: slave-3
  image: redis:5.0.8
  command: redis-server /etc/usr/local/redis.conf
  network_mode: "host"
  restart: always
  volumes:
   - ./slave-3/redis.conf:/etc/usr/local/redis.conf
   - ./slave-3/redis.log:/usr/local/redis/logs/redis-server.log
   - ./slave-3/data:/data

上面的配置文件注意一下几点:

1、网络模式使用host模式

2、需要在指定的宿主机创建文件,如redis.conf、redis.log,上面的volumes上面已经指定好了创建在宿主机的路径,每个redis实例都需要创建,所以需要创建6个(三主三从)

其中redis.conf的可以从其他的redis中copy一份过来,在上面只需要修改如下几项即可

port 16379 #这里填每台redis的端口号
bind 0.0.0.0 #绑定ip 0.0.0.0 指可以外网访问
cluster-enabled yes #开启集群
logfile "/usr/local/redis/logs/redis-server.log" #指定日志文件
requirepass htl123456 #密码

特别留意端口,上面的端口配置与前面端口安排是一致的

输入docker-compose up -d

如果没有意外的话6个redis实例会成功启动,尝试是否能够连接,如果不能连接需要自己查看日志,排查问题

3、构建集群

上面的步骤如果都成功了,仅仅说明是搭建了6个redis的实例,但是之间没有任何联系,下面就是如果使他们构建集群

docker exec -it master-1 redis-cli  -h <server_ip> -p 16379 -a htl123456 --cluster create <server_ip>:16379 <server_ip>:16380 <server_ip>:16381 <server_ip>:16389 <server_ip>:16390 <server_ip>:16391 --cluster-replicas 1

上面的docker命令不能直接使用,需要给<server_ip>具体值,另外端口要根据自己上面安排的端口设计,以及密码。最后就是如果运行失败了,那么久看看是不是格式错误(空格啥的)

在这里插入图片描述

如果出现上图,那么恭喜你,搭建完成

我们可以使用下面的语句测试一下

docker exec -it master-1 redis-cli -c -p16379 -a htl123456

坑:

一直显示:waiting for the cluster to join…

开始以为是分槽需要那么多时间,后来运行了几个小时,还是这样显示

原来有redis集群总线的概念:redis集群总线端口为redis客户端端口加上10000,比如说你的redis 6379端口为客户端通讯端口,那么16379端口为集群总线端口

我搭建的redis集群中端口号是从 16379 ~ 16381为主节点端口, 16389~16391 从节点端口,这里需要将主端口+10000端口防火墙开放(我是用了阿里云的服务器,需要开放端口,如果是虚拟机可以直接关闭防火墙)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111205.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【云原生】第十二篇–docker容器镜像仓库Harbor部署[通俗易懂]

    【云原生】第十二篇–docker容器镜像仓库Harbor部署[通俗易懂]由于国内访问国外的容器镜像仓库速度比较慢,因此国内企业创建了容器镜像加速器,以方便国内用户使用容器镜像。Harbor是VMware公司开源的企业级DockerRegistry项目,其目标是帮助用户迅速搭建一个企业级的Dockerregistry服务。它以Docker公司开源的registry为基础,提供了管理UI,基于角色的访问控制(RoleBasedAccessControl),AD/LDAP集成、以及审计日志(Auditlogging)等企业用户需求的功能,同时还原生支持中文。…

    2025年7月29日
    4
  • docker 入门_docker高级教程

    docker 入门_docker高级教程一、docker概述1.什么是dockerDocker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似iPhone的app),更重要的是容器性能开销极低。Docker从17.03版本之后分为CE(CommunityEdition:社区版)和E..

    2022年10月15日
    3
  • docker 镜像启动命令_宿主机ping不通docker

    docker 镜像启动命令_宿主机ping不通dockerdockerrun:创建一个新的容器并运行一个命令语法dockerrun[OPTIONS]IMAGE[COMMAND][ARG…]OPTIONS说明: -astdin:指定标准输入输出内容类型,可选STDIN/STDOUT/STDERR三项; -d:后台运行容器,并返回容器ID; -i:以交互模式运行容器,通常与-t同时使用; -P:随机端口映射,容器内部端口随机映射到主机的端口 -p:指定端口映射,格式为:主…

    2022年9月23日
    3
  • docker安装使用_docker 安装centos

    docker安装使用_docker 安装centos一.安装docker1.删除已安装的dockeryumremovedocker\docker-client\docker-client-latest\docker-common

    2022年8月16日
    7
  • Docker 开启2375端口提供外部访问

    Docker 开启2375端口提供外部访问1、编辑docker.service#vim/usr/lib/systemd/system/docker.service在ExecStart=/usr/bin/dockerd-current后增加-Htcp://0.0.0.0:2375-Hunix://var/run/docker.sock[Unit]Description=DockerApplicationContainerEngineDocumentation=https://docs.docker.c..

    2022年5月9日
    58
  • 每天5分钟玩转docker容器技术 pdf_docker 创建容器

    每天5分钟玩转docker容器技术 pdf_docker 创建容器Docker介绍Docker简介和安装Docker是什么为什么使用Docker和普通虚拟机的对比打包、分发、部署小结Docker部署的优势Docker通常用来做什么重要概念:镜像、容器安装Ubuntu安装DockerWindows安装DockerDocker架构镜像加速源Docker命令服务相关命令镜像相关命令容器相关命令数据卷数据卷概念及其作用配置数据卷数据卷容器应用部署部署MySQL部署tomcat部署Nginx部署reids镜像原理容器转为镜像Dockfile案例部署springboot项目自定义ce

    2025年6月10日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号