Docker快速构建Redis集群(cluster)

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

搭建步骤

redis集群目录清单

  1. .
  2. ├── Dockerfile
  3. ├── make_master_slave.sh
  4. ├── run_master_slave.sh
  5. ├── compose_master_slave.sh
  6. ├── redis-trib.rb
  7. ├── master
  8.    ├── 7000
  9.       ├── data
  10.          ├── appendonly.aof
  11.          ├── dump.rdb
  12.          └── nodes.conf
  13.       └── redis.conf
  14.    ├── 7001
  15.       ├── data
  16.          ├── appendonly.aof
  17.          ├── dump.rdb
  18.          └── nodes.conf
  19.       └── redis.conf
  20.    └── 7002
  21.    ├── data
  22.       ├── appendonly.aof
  23.       ├── dump.rdb
  24.       └── nodes.conf
  25.    └── redis.conf
  26. ├── redis-cluster.tmpl
  27. └── slave
  28. ├── 7003
  29.    ├── data
  30.       ├── appendonly.aof
  31.       ├── dump.rdb
  32.       └── nodes.conf
  33.    └── redis.conf
  34. ├── 7004
  35.    ├── data
  36.       ├── appendonly.aof
  37.       ├── dump.rdb
  38.       └── nodes.conf
  39.    └── redis.conf
  40. └── 7005
  41. ├── data
  42.    ├── appendonly.aof
  43.    ├── dump.rdb
  44.    └── nodes.conf
  45. └── redis.conf

1.redis.conf

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

redis-cluster.tmpl

  1. # bind 127.0.0.1
  2. protected-mode no
  3. port ${PORT}
  4. daemonize no
  5. dir /data/redis
  6. appendonly yes
  7. cluster-enabled yes
  8. cluster-config-file nodes.conf
  9. cluster-node-timeout 15000

2.构建redis-trib镜像

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

构建redis-trib镜像

Dockerfile

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

构建镜像

  1. docker build -t redis-trib .

3.创建docker内部网络

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

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

make_master_slave.sh

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

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

run_master_slave.sh

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

6.组装masters : slaves 节点参数

组装masters : slaves 节点参数

  1. # 组装masters : slaves 节点参数
  2. matches=""
  3. for port in `seq 7000 7005`; do
  4. ms="master"
  5. if [ $port -ge 7003 ]; then
  6. ms="slave"
  7. fi
  8. matches=$matches$(docker inspect --format '{{(index .NetworkSettings.Networks "redis-cluster-net").IPAddress}}' "redis-$ms-${port}"):${port}" ";
  9. done
  10. echo $matches
  11. # 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
  12. # 创建docker-cluster,这里就用到了上面的redis-trib镜像
  13. docker run -it --rm --net redis-cluster-net redis-trib ruby redis-trib.rb create --replicas 1 $matches
  14. # 最后需要在接下来的console中输入“yes”,即可完成docker-cluster的搭建

参考

docker redis 集群(cluster)搭建

redis官网

redis中文文档

Docker快速构建Redis集群(cluster)的更多相关文章

  1. 使用Docker构建redis集群--最靠谱的版本

    1集群结构说明 集群中有三个主节点,三个从节点,一共六个结点.因此要构建六个redis的docker容器.在宿主机中将这六个独立的redis结点关联成一个redis集群.需要用到官方提供的ruby脚本 ...

  2. redis单点、redis主从、redis哨兵sentinel,redis集群cluster配置搭建与使用

    目录 redis单点.redis主从.redis哨兵 sentinel,redis集群cluster配置搭建与使用 1 .redis 安装及配置 1.1 redis 单点 1.1.2 在命令窗口操作r ...

  3. redis集群cluster简单设置

    环境: 这里参考官方使用一台服务器:Centos 7  redis-5.0.4    192.168.10.10 redis集群cluster最少要3个主节点,所以本次需要创建6个实例:3个主节点,3 ...

  4. centos7 快速搭建redis集群环境

    本文主要是记录一下快速搭建redis集群环境的方式. 环境简介:centos 7  + redis-3.2.4 本次用两个服务6个节点来搭建:192.168.116.120  和  192.168.1 ...

  5. Docker镜像配置redis集群

    redis版本:3.2.3 架构: 3节点redis集群,并为每个节点设置一个备用节点,共6个节点 1.安装redis镜像 docker load < docker.redis.tar.gz 2 ...

  6. docker 快速部署ES集群 spark集群

    1) 拉下来 ES集群  spark集群 两套快速部署环境, 并只用docker跑起来,并保存到私库. 2)弄清楚怎么样打包 linux镜像(或者说制作). 3)试着改一下,让它们跑在集群里面. 4) ...

  7. docker之构建redis-cluster集群

    下载和编译redis安装包 参考:https://www.cnblogs.com/cwp-bg/p/8094914.html # 从官方网站下载安装包,注意,当前在哪个目录下执行命令,下载的包将在哪个 ...

  8. 从零开始学习docker之在docker中搭建redis(集群)

    docker搭建redis集群 docker-compose是以多容器的方式启动,非常适合用来启动集群 一.环境准备 云环境:CentOS 7.6 64位 二.安装docker-compose #需要 ...

  9. redis集群cluster模式搭建

    实验服务器 :192.168.44.139    192.168.44.138  192.168.44.144 在 192.168.44.139上操作: 将redis的包上传的新建的目录newtouc ...

随机推荐

  1. react之redux增加删除数字

    比如在页面中添加和删除‘222’ action.js export const ADD= 'ADD'; export const RED='RED'; export const add=(str)=& ...

  2. 关于ubuntu 16.04 docker常用命令

    1.sudo docker ps -a 查看当前docker实例的信息: CONTAINER ID        IMAGE               COMMAND                 ...

  3. asio socket设置 server地址与端口的两种方式

     1. 用解释器的方法, 常用来解析域名, 如 // query("www.163.com","80"), 也可以 query("www.163.co ...

  4. 动态规划专题(一) HDU1087 最长公共子序列

    Super Jumping! Jumping! Jumping! 首先对于动态规划问题要找出其子问题,如果找的子问题是前n个序列的最长上升子序列,但这样的子问题不好,因为它不具备无后效性,因为它的第n ...

  5. 3.sql中的向上递归和向下递归

    1.向下递归 select * from table_name where 条件 connect by prior bmbm(本级关联条件)=sjbmbm(上级关联条件) start with bmb ...

  6. Java: JavaMail 初试(一)

    前言:以前的我,很喜欢写东西,写一写所想所见所闻所感,但是工作之后,总不能写出让自己满意的文章,突发奇想,能否利用写博客的时机,将其写成类似散文似的博文呢?哈哈... 邮件功能尝试:作为一个小菜鸟,对 ...

  7. mfc画波形函数

    void CMyPicoTestDlg::DrawWave(CDC *pDC,CRect &rectPicture) { float fDeltaX; float fDeltaY; int n ...

  8. HDU - 1272 小希的迷宫 并查集判断无向环及连通问题 树的性质

    小希的迷宫 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一 ...

  9. django继承修改 User表导致的问题 fields.E304(permissions/group都会有这样的错误)

    问题: django继承修改 User表时,进行migrations操作时会导致的问题 fields.E304(permissions/group都会有这样的错误)如图: 根源: django文档中有 ...

  10. Lightoj1122 【数位DP】

    题意: 给你m个数,让你在里面挑n个组合,保证位数相差不超过2,求能够组合多少种情况: 思路: dp[i][j]代表第i个结尾为j的方案数. #include<bits/stdc++.h> ...