zoukankan      html  css  js  c++  java
  • Docker快速构建Redis集群(cluster)

    Docker快速构建Redis集群(cluster)

    以所有redis实例运行在同一台宿主机上为例子

    搭建步骤

    redis集群目录清单

    .
    ├── Dockerfile
    ├── make_master_slave.sh
    ├── run_master_slave.sh
    ├── compose_master_slave.sh
    ├── redis-trib.rb
    ├── master
    │   ├── 7000
    │   │   ├── data
    │   │   │   ├── appendonly.aof
    │   │   │   ├── dump.rdb
    │   │   │   └── nodes.conf
    │   │   └── redis.conf
    │   ├── 7001
    │   │   ├── data
    │   │   │   ├── appendonly.aof
    │   │   │   ├── dump.rdb
    │   │   │   └── nodes.conf
    │   │   └── redis.conf
    │   └── 7002
    │       ├── data
    │       │   ├── appendonly.aof
    │       │   ├── dump.rdb
    │       │   └── nodes.conf
    │       └── redis.conf
    ├── redis-cluster.tmpl
    └── slave
        ├── 7003
        │   ├── data
        │   │   ├── appendonly.aof
        │   │   ├── dump.rdb
        │   │   └── nodes.conf
        │   └── redis.conf
        ├── 7004
        │   ├── data
        │   │   ├── appendonly.aof
        │   │   ├── dump.rdb
        │   │   └── nodes.conf
        │   └── redis.conf
        └── 7005
            ├── data
            │   ├── appendonly.aof
            │   ├── dump.rdb
            │   └── nodes.conf
            └── redis.conf
    
    

    1.redis.conf

    找到一份原始的redis.conf文件,将其重命名为:redis-cluster.tmpl
    redis-cluster.tmpl

    # bind 127.0.0.1
    protected-mode no
    port ${PORT}
    daemonize no
    dir /data/redis
    appendonly yes
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 15000
    

    2.构建redis-trib镜像

    redis-trib.rbredis官方推出的管理redis集群的工具,集成在redis的源码src目录下,因为搭建redis-cluster的时候需要用到redis-trib工具。

    构建redis-trib镜像
    Dockerfile

    FROM ruby:2.5.5-slim
    MAINTAINER xinchen<xcmelody@gmail.com>
    RUN gem install redis
    RUN mkdir /redis
    WORKDIR /redis
    # redis-trib.rb 可在https://github.com/antirez/redis中找到
    # 此处已经 wget https://raw.githubusercontent.com/antirez/redis/4.0/src/redis-trib.rb 
    ADD ./redis-trib.rb /redis/redis-trib.rb
    

    构建镜像

    docker build -t redis-trib .
    

    3.创建docker内部网络

    # docker network ls 可查看
    docker network create redis-cluster-net
    

    4.创建 master 和 slave 文件夹并生成配置文件

    make_master_slave.sh

    # 创建 master 和 slave 文件夹
    for port in `seq 7000 7005`; do
        ms="master"
        if [ $port -ge 7003 ]; then
            ms="slave"
        fi
        mkdir -p ./$ms/$port/ && mkdir -p ./$ms/$port/data 
        && PORT=$port envsubst < ./redis-cluster.tmpl > ./$ms/$port/redis.conf;
    done
    

    5.运行docker redis 的 master 和 slave 实例

    run_master_slave.sh

    # 运行docker redis 的 master 和 slave 实例
    for port in `seq 7000 7005`; do
        ms="master"
        if [ $port -ge 7003 ]; then
            ms="slave"
        fi
        docker run -d -p $port:$port -p 1$port:1$port 
        -v $PWD/$ms/$port/redis.conf:/data/redis.conf 
        -v $PWD/$ms/$port/data:/data/redis 
        --restart always --name redis-$ms-$port --net redis-cluster-net 
        redis redis-server /data/redis.conf;
    done
    

    6.组装masters : slaves 节点参数

    组装masters : slaves 节点参数

    # 组装masters : slaves 节点参数
    matches=""
    for port in `seq 7000 7005`; do
        ms="master"
        if [ $port -ge 7003 ]; then
            ms="slave"
        fi
        matches=$matches$(docker inspect --format '{{(index .NetworkSettings.Networks "redis-cluster-net").IPAddress}}' "redis-$ms-${port}"):${port}" ";
    done
    
    echo $matches
    # 172.20.0.2:7000 172.20.0.3:7001 172.20.0.4:7002 172.20.0.5:7003 172.20.0.6:7004 172.20.0.7:7005
    
    # 创建docker-cluster,这里就用到了上面的redis-trib镜像
    docker run -it --rm --net redis-cluster-net redis-trib ruby redis-trib.rb create --replicas 1 $matches
    
    # 最后需要在接下来的console中输入“yes”,即可完成docker-cluster的搭建
    

    参考

    docker redis 集群(cluster)搭建

    redis官网

    redis中文文档

  • 相关阅读:
    qml+opencv(二),实现人脸检测
    CPU满格的元凶,这回是由于QTimer引起的(默认interval是0,太猛)
    Qt文档系统分析(解释Qt文档的生成工具与过程)
    2015 最受开发者欢迎的开发工具和服务(摘录对自己有用的)
    RAD Studio 10 自带Demo代码汇总说明
    ACE 容器之三 ACE_Unbounded_Queue的使用
    开发快很重要——如果只看法语或者产品结果C++似乎很强大,但是参与这个C++的开发过程,就会感觉到这种痛苦(Google也是这个看法)
    我是觉得创业永远不晚 但是绝对要谨慎,不是破釜沉舟就一定能赢的(不用拿工资啊 吃喝拉撒在公司报账就好了)
    人生的成功与否,真的是以天来计算啊——时间永远都是最宝贵的!
    thiscall仅仅应用于“C++”成员函数(this指针存放于CX寄存器,参数从右到左压)
  • 原文地址:https://www.cnblogs.com/xcmelody/p/10891636.html
Copyright © 2011-2022 走看看