zoukankan      html  css  js  c++  java
  • 使用DockerCompose搭建Redis集群

    一、安装Docker Compose

    1.下载docker-compose,我这里选择1.25.5这个版本

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

    2.下载好之后,设置权限

    sudo chmod +x /usr/local/bin/docker-compose
    

    3.检测是否安装成功

    docker-compose --version
    

    出现下图则表示安装成功

    二、Redis镜像

    1.下载redis镜像,我这里选择5.0.3

    docker pull redis:5.0.3
    

    2.查看镜像

    docker image ls -a
    

    三、准备容器挂载的目录

    1.创建根目录

    mkdir /docker/redis
    

    2.创建容器目录,我这里采用3主1从的方式。端口分别为7001-7006。然后创建给每个节点创建对应的目录和配置文件

    mkdir 700{1..6}
    mkdir 700{1..6}/data
    mkdir 700{1..6}/config
    touch 700{1..6}/config/redis.config
    

    四、准备配置文件

    1.将redis.config解压后,复制到各个节点的config下

    五、准备docker-compose.yml

    vi docker-compose.yml
    

    然后按键盘i,进入输入模式
    复制以下内容:

    version: '3'
    
    services:
     redis1:
      image: redis:5.0.3
      restart: always  
      volumes:
       - /docker/redis/7001/config/redis.conf:/etc/redis/redis.conf
       - /docker/redis/7001/data:/data
      environment:
       - TZ=Asia/Shanghai
       - LANG=en_US.UTF-8
      ports:
        - '7001:6379'     #服务端口
        - '17001:16379'   #集群端口
      command: ["redis-server", "/etc/redis/redis.conf"]
      privileged: true    #环境变量
      
    
     redis2:
      image: redis:5.0.3
      #network_mode: host
      restart: always
      volumes:
       - /docker/redis/7002/config/redis.conf:/etc/redis/redis.conf
       - /docker/redis/7002/data:/data
      environment:
       - TZ=Asia/Shanghai
       - LANG=en_US.UTF-8
      ports:
        - '7002:6379'     #服务端口
        - '17002:16379'   #集群端口
      command: ["redis-server", "/etc/redis/redis.conf"]
      privileged: true    #环境变量
    
     redis3:
      image: redis:5.0.3
      #network_mode: host
      restart: always
      volumes:
       - /docker/redis/7003/config/redis.conf:/etc/redis/redis.conf
       - /docker/redis/7003/data:/data
      environment:
       - TZ=Asia/Shanghai
       - LANG=en_US.UTF-8
      ports:
        - '7003:6379'     #服务端口
        - '17003:16379'   #集群端口
      command: ["redis-server", "/etc/redis/redis.conf"]
      privileged: true    #环境变量
    
     redis4:
      image: redis:5.0.3
      #network_mode: host
      restart: always
      volumes:
       - /docker/redis/7004/config/redis.conf:/etc/redis/redis.conf
       - /docker/redis/7004/data:/data
      environment:
       - TZ=Asia/Shanghai
       - LANG=en_US.UTF-8
      ports:
        - '7004:6379'     #服务端口
        - '17004:16379'   #集群端口
      command: ["redis-server", "/etc/redis/redis.conf"]
      privileged: true    #环境变量
    
     redis5:
      image: redis:5.0.3
      #network_mode: host
      restart: always
      volumes:
       - /docker/redis/7005/config/redis.conf:/etc/redis/redis.conf
       - /docker/redis/7005/data:/data
      environment:
       - TZ=Asia/Shanghai
       - LANG=en_US.UTF-8
      ports:
        - '7005:6379'     #服务端口
        - '17005:16379'   #集群端口
      command: ["redis-server", "/etc/redis/redis.conf"]
      privileged: true    #环境变量
    
     redis6:
      image: redis:5.0.3
      #network_mode: host
      restart: always
      volumes:
       - /docker/redis/7006/config/redis.conf:/etc/redis/redis.conf
       - /docker/redis/7006/data:/data
      environment:
       - TZ=Asia/Shanghai
       - LANG=en_US.UTF-8
      ports:
        - '7006:6379'     #服务端口
        - '17006:16379'   #集群端口
      command: ["redis-server", "/etc/redis/redis.conf"]
      privileged: true    #环境变量
    

    按键盘esc,输入:wq,保存文件

    六、启动容器

    以后台启动

    docker-compose up -d
    


    使用docker-compose ps查看容器列表,发现已经全部启动


    再使用docker container ls比较看下

    七、组建集群

    redis-cli -h 192.168.200.135 -p 7001 --cluster create 192.168.200.135:7001 192.168.200.135:7002 192.168.200.135:7003 192.168.200.135:7004 192.168.200.135:7005 192.168.200.135:7006 --cluster-replicas 1
    

    八、查看集群信息

    可以看到主从关系

    注意

    1.使用docker-compose的方式,如果未指定网络,会以文件夹 + _default的规则自动创建一个名为redis_default的网络(文件夹名为redis),该次创建的所有容器都会加入该网络,其中的容器可以相互访问。

    常见问题

    1.搭建集群的时候,一直是Waiting for the cluster to join.....
    我最初的想法是docker是相互隔离的,所以每个node中的端口都可以使用默认的6379。最开始配置为:

      ports:
        - '7001:6379'     #服务端口
        - '17001:16379'   #集群端口
    

    ...

      ports:
        - '7006:6379'     #服务端口
        - '17006:16379'   #集群端口
    

    其实这种配置有问题的。在启动容器的时候虽然正常,但是集群的节点间是无法通信的。因为redis集群间的通信端口是10000+当前节点port,在组建集群时,每个容器中的node,端口都是6379,会通过16379访问其他node,而容器映射的端口是17001不是16379,所以才会一直waiting。
    2.Node 192.168.200.135:7002 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0
    删除对应node中data下的内容即可,我这里是测试环境为了方便,删除所有node下data的内,命令如下:
    先停止容器,docker-compose down ,然后删除所有节点data下的内rm -f /docker/redis/700{1..6}/data/*

    参考:https://www.jianshu.com/p/b7dea62bcd8b

  • 相关阅读:
    vue开发chrome扩展,数据通过storage对象获取
    Vue手动集成less预编译器
    Google Translate寻找之旅
    Javascript Range对象的学习
    Javascript Promises学习
    SublimeText 建立构建Node js系统
    We're sorry but demo3 doesn't work properly without JavaScript enabled. Please enable it to continue.
    npm安装包出现UNMET DEPENDENCY报错
    (转载)命令行说明中格式 尖括号 中括号的含义
    Linux重启网卡服务Failed to start LSB: Bring up/down networking.
  • 原文地址:https://www.cnblogs.com/wugang/p/14491468.html
Copyright © 2011-2022 走看看