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

  • 相关阅读:
    MSSQL-sql server-视图简介
    MSSQL 如何采用sql语句 获取建表字段说明、字段备注、字段类型、字段长度
    mssql instead of 触发器应用一-创建只读视图(view)的方法
    DVWA-XSS学习笔记
    DVWA-命令执行学习笔记
    DVWA-暴力破解学习笔记
    kali权限提升之本地提权
    信息收集之主动信息收集(二)
    kali权限提升之配置不当提权与WCE
    linux 搭建squid代理服务器
  • 原文地址:https://www.cnblogs.com/wugang/p/14491468.html
Copyright © 2011-2022 走看看