首先选择redis版本,目前最新是5.0,

5.0版本集群的创建工具是c语言写的,直接用redis-cli命令,不依赖于ruby,

如果是4.0版本,创建集群需要用到ruby脚本:redis-trib.rb

一、首先获取redis docker官方镜像

$ docker pull redis:5.0

或者

$ docker pull redis:4.0(大概25Mb)

4.0版本还需要获取 ruby 镜像备用

$ docker pull ruby(大概200Mb)

二、准备配置文件

1、创建redis配置文件(redis-cluster.tmpl)

我在路径/home下创建一个文件夹redis-cluster,在路径/home/redis-cluster下创建一个文件redis-cluster.tmpl,并把以下内容复制过去。(注:路径可自定义,我用的是/home/redis-cluster)

port ${PORT}

protected-mode no

cluster-enabled yes

cluster-config-file nodes.conf

cluster-node-timeout 5000

cluster-announce-ip 39.10X.XX.XX //自己服务器IP

cluster-announce-port ${PORT}

cluster-announce-bus-port 1${PORT}

appendonly yes

2、在/home/redis-cluster下生成conf和data目标,并生成配置信息

for port in `seq 7000 7005`; do \

  mkdir -p ./${port}/conf \

  && PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \

  && mkdir -p ./${port}/data; \

done

注意这个里面用到一个命令:envsubst,一般linux系统都自带这个命令。如果没有的话,就换个linux系统去执行吧。

三、创建redis docker容器

1、创建自定义network

$ docker network create redis-net

2、创建6个redis容器

注意下面的挂载路径自己根据实际情况调整。

for port in `seq 7000 7005`; do \

  docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} \

  -v /home/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \

  -v /home/redis-cluster/${port}/data:/data \

  --restart always --name redis-${port} --net redis-net \

  --sysctl net.core.somaxconn=1024 redis:5.0 redis-server /usr/local/etc/redis/redis.conf; \

done

至此,通过命令docker ps可查看刚刚生成的6个容器信息。

四、组成集群

4.0以前的版本通过ruby来实现集群,

先获得对应版本的 src/redis-trib.rb 文件,可以从这里下载源码包http://download.redis.io/releases/

解压后得到redis-trib.rb 文件。然后挂载到ruby的docker容器上执行,例如:

echo yes | docker run -i --rm --net redis-net \

  -v /vagrant_data:/data \

  ruby sh -c '\

  gem install redis \

  && ruby /data/redis-trib.rb create --replicas 1 \

  '"$(for port in `seq 7000 7005`; do \

    echo -n "$(docker inspect --format '{{ (index .NetworkSettings.Networks "redis-net").IPAddress }}' "redis-${port}")":${port} ' ' ; \

  done)"

如果打印类似于如下的信息,则代表创建成功。

Successfully installed redis-4.1.0

1 gem installed

>>> Creating cluster

>>> Performing hash slots allocation on 6 nodes...

Using 3 masters:

172.18.0.2:7000

172.18.0.3:7001

172.18.0.4:7002

Adding replica 172.18.0.6:7004 to 172.18.0.2:7000

Adding replica 172.18.0.7:7005 to 172.18.0.3:7001

Adding replica 172.18.0.5:7003 to 172.18.0.4:7002

M: 69d4fd6c9e88c9a134b2d714887646100c5d8f8b 172.18.0.2:7000

   slots:0-5460 (5461 slots) master

M: 0e9b44b7a5fb691ebaf8c4dc102806d5a2c63a26 172.18.0.3:7001

   slots:5461-10922 (5462 slots) master

M: 2ed13921839e9a287f05dfa0ad3c6bf1cf2bdbf0 172.18.0.4:7002

   slots:10923-16383 (5461 slots) master

S: d1b2d4c56db4818d236dd750de0fd28b59f9dcf8 172.18.0.5:7003

   replicates 2ed13921839e9a287f05dfa0ad3c6bf1cf2bdbf0

S: a92038b327517afec4f777984440254b4a56ae44 172.18.0.6:7004

   replicates 69d4fd6c9e88c9a134b2d714887646100c5d8f8b

S: e4faabf2248e60d79f3d4848ac0a1d466b201222 172.18.0.7:7005

   replicates 0e9b44b7a5fb691ebaf8c4dc102806d5a2c63a26

Can I set the above configuration? (type 'yes' to accept): >>> Nodes configuration updated

>>> Assign a different config epoch to each node

>>> Sending CLUSTER MEET messages to join the cluster

Waiting for the cluster to join..

>>> Performing Cluster Check (using node 172.18.0.2:7000)

M: 69d4fd6c9e88c9a134b2d714887646100c5d8f8b 172.18.0.2:7000

   slots:0-5460 (5461 slots) master

   1 additional replica(s)

M: 2ed13921839e9a287f05dfa0ad3c6bf1cf2bdbf0 192.168.33.11:7002

   slots:10923-16383 (5461 slots) master

   1 additional replica(s)

S: a92038b327517afec4f777984440254b4a56ae44 192.168.33.11:7004

   slots: (0 slots) slave

   replicates 69d4fd6c9e88c9a134b2d714887646100c5d8f8b

M: 0e9b44b7a5fb691ebaf8c4dc102806d5a2c63a26 192.168.33.11:7001

   slots:5461-10922 (5462 slots) master

   1 additional replica(s)

S: e4faabf2248e60d79f3d4848ac0a1d466b201222 192.168.33.11:7005

   slots: (0 slots) slave

   replicates 0e9b44b7a5fb691ebaf8c4dc102806d5a2c63a26

S: d1b2d4c56db4818d236dd750de0fd28b59f9dcf8 192.168.33.11:7003

   slots: (0 slots) slave

   replicates 2ed13921839e9a287f05dfa0ad3c6bf1cf2bdbf0

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

5.0版本类似,但是不用 ruby镜像,直接登录其中一个redis容器内,

1)首先确定好生成容器的ip

通过下面命令得到redis容器的ip地址:

for port in `seq 7000 7005`; do \

    echo -n "$(docker inspect --format '{{ (index .NetworkSettings.Networks "redis-net").IPAddress }}' "redis-${port}")":${port} ' ' ; \

done

2)然后登陆其中一个redis容器

$docker exec -it redis-7000 bash

3)在容器中执行

$ redis-cli --cluster create 上面获得的ip地址 --cluster-replicas 1

五、测试

使用Redis客户端Redis-cli.exe来查看数据记录数,以及集群相关信息

命令 redis-cli –c –h ”地址” –p "端口号" ;  c 表示集群

登录进去之后可以执行: cluster info,查看集群信息。

Docker redis cluster集群的搭建相关推荐

  1. Redis Cluster集群的搭建与实践[转]

    Redis Cluster集群的搭建与实践 Redis Cluster集群 一.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis 3.0之后 ...

  2. Redis Cluster集群的搭建与实践

    Redis Cluster集群 一.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis 3.0之后版本支持redis-cluster集群,Re ...

  3. Docker搭建3主3从Redis Cluster集群

    本文使用镜像由慕课网的神思者老师提供 本文使用镜像是已经配置好了的Redis镜像, 如果需要自定义可修改配置文件或用官方Redis镜像进行部署 1. 拉取配置好的Redis镜像 docker pull ...

  4. centos7 docker-compose安装_Docker Compose 搭建 Redis Cluster 集群环境

    在前文<Docker 搭建 Redis Cluster 集群环境>中我已经教过大家如何搭建了,本文使用 Docker Compose 再带大家搭建一遍,其目的主要是为了让大家感受 Dock ...

  5. redis映射的概念_搭建分布式Redis Cluster集群与Redis入门

    目录 Redis 集群搭建Redis 是啥集群(Cluster)Redis Cluster 说明Redis Cluster 节点Redis Cluster 集群模式不能保证一致性创建和使用 Redis ...

  6. Ubuntu 16.04下Redis Cluster集群搭建(官方原始方案)

    前提:先安装好Redis,参考:http://www.cnblogs.com/EasonJim/p/7599941.html 说明:Redis Cluster集群模式可以做到动态增加节点和下线节点,使 ...

  7. redis cluster 集群 HA 原理和实操(史上最全、面试必备)

    文章很长,建议收藏起来慢慢读!疯狂创客圈总目录 语雀版 | 总目录 码云版| 总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 经典图书:<Java高并发核心编程(卷1)> 面试必备 ...

  8. python连接redis集群如何释放内存_python 连接 redis cluster 集群

    一. redis集群模式有多种, cluster模式只是其中的一种实现方式, 其原理请自行谷歌或者百度, 这里只举例如何使用Python操作 redis cluster 集群 二. python 连接 ...

  9. redis集群扩容和缩容_深入理解Redis Cluster集群

    一.背景 前面的文章<深入理解Redis哨兵机制>一文中介绍了Redis哨兵集群的工作原理,哨兵集群虽然满足了高可用的特性,但是依然存在这样的问题:即数据只能往一个主节点上进行写入. 只能 ...

最新文章

  1. Python环境变量设置
  2. java 更新jlabel_java – 如何动态更改JLabel
  3. Angular开发模式下的编译器和运行时的代码比较
  4. matlab hpopup2,matlabpopupmenu的问题
  5. 参加西安第三届数字油田高端论坛暨第二届国际学术会议
  6. Winboard - X
  7. 基于visual Studio2013解决面试题之0707最小元素
  8. 台式计算机主板,台式电脑主板开机过程详解
  9. Access2016学习6
  10. xdb 服务_[20200115]监听中没有xdb服务.txt
  11. 数字图像处理实验之对数变换
  12. Android 10 低内存应用白名单和应用保活
  13. C#POP3协议实现SSL验证登陆GMAIL
  14. Excel教程:数值为0不显示的三种解决方法介绍
  15. 无监督学习------分类学习-----朴素贝叶斯(navie bayes)
  16. 使用POI读取EXCEL模板并填充数据,上传至腾讯云储存桶
  17. 2345浏览器劫持主页解决办法
  18. JavaWeb-02
  19. 3.3 Options
  20. Drupal 面包屑(Breadcrumb)

热门文章

  1. 人工智能学习路线图(超详细、超全面)
  2. linux 导入fpx证书,金贡荣获神秘奖章,结果写着FPX全队慈父,网友点歌以父之名...
  3. 我想建立网站,网站搭建需要哪些大体步骤?
  4. 糟糕!我的服务器CPU被黑客挖矿了
  5. JDK11源码学习05 | HashMap类
  6. 【迁移学习】PointDAN: A Multi-Scale 3D Domain Adaption Network for Point Cloud Representation
  7. python电脑版怎么下载-Python
  8. 无人驾驶汽车系统入门(十一)——深度前馈网络,深度学习的正则化,交通信号识别
  9. mysql更新加锁_一条简单的更新语句,MySQL是如何加锁的?
  10. java 微信时间戳转换工具_微信小程序实现时间戳格式转换