docker搭建redis集群记录

参考:
docker redis4.0 集群(cluster)搭建
本文是在上面这个文章的基础上进行的探索

创建redis容器

1.创建配置文件

要搭建集群的文件夹下创建redis-cluster.tmpl,内容为以下内容,根据需要更改我这里文件在/root/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

如果需要密码则加上配置

masterauth 123456
requirepass 123456

注:5.x以下版本不支持在创建集群的时候指定密码,所以要先创建好集群之后,再设置密码,5.x+版本支持在创建集群的时候指定参数-a来指定创建集群时候密码

2.docker创建集群的网络

docker network create redis-net

3.生成配置信息

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

执行之后会在当前目录下生成 7000-7005的文件夹,对应不同的端口,里面包含conf和data文件夹

4.创建redis容器

for port in `seq 7000 7005`; do \
  docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} \
  -v /root/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
  -v /root/redis-cluster/${port}/data:/data \
  --restart always --name redis-${port} --net redis-net \
  redis:4.0 redis-server /usr/local/etc/redis/redis.conf; \
done

这里会启动6个redis 打开端口7000-7005,17000-17005并映射到了主机,将端口文件夹中的配置文件挂载到容器中,端口文件夹中的data文件夹挂载到容器中的/data下并自动重启

注:这里使用的是redis的4.0版本

集群

3.x版本

redis在4.x+版本提供了对docker的友好支持,如果需要redis能够使用外网访问,最好使用redis4.x+版本。3.x版本使用docker的默认网络配置只能够创建内网能够访问的docker redis集群,如果需要外网能够访问可能要更改redis-net的网络模式为host,并使用redis-trib.rb来创建集群,这里没有做尝试。

4.x版本

使用ruby来指定redis的redis-trib.rb来创建集群

注:5.0的redis不支持使用这种方式(5.0使用redis-cli来创建集群,使用5.0的话不需要使用ruby,用其中一个redis实例来执行redis-cli创建集群的命令即可),所以这里的redis-trib.rb文件需要使用5.0以下的版本,参考文章中的获取的redis-trib.rb是属于stable版本的,最新stable版本的似乎已经是5.0的了,所以这里需要去到redis5.0版本以下的源码中去获取该文件。

1.下载redis-trib.rb

下载redis4.x的源码文件(自行下载,这里不赘述),解压,我这里解压到/root/redis-4.0.12这个文件夹下的

2.使用ruby + redis-trib.rb 创建集群

echo yes | docker run -i --rm -v /root/redis-4.0.12/src/redis-trib.rb:/redis-trib.rb --net redis-net ruby sh -c '\
  gem install redis -v 4.0 \
  && ruby 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)"

这里就是将/root/redis-4.0.12/src/redis-trib.rb该文件挂载到容器的/redis-trib.rb这个目录下,然后使用ruby来执行该文件创建集群

5.x版本

5.x使用redis-cli来创建集群,所以这里不需要去挂载redis-trib.rb,单独启动一个5.x的redis实例,指定redis-cli创建集群的命令就可以了

echo yes | docker run -i --rm -p 6379 --net redis-net redis:5.0 \
   redis-cli --cluster create \
   $(for port in `seq 7000 7005`; do \
     echo -n "$(docker inspect --format '{{ (index .NetworkSettings.Networks "redis-net").IPAddress }}' "redis-${port}")":${port} ' ' ; \
     done) $(echo "--cluster-replicas 1")

如果使用了密码加上配置(5.x+版本支持,在配置文件中加masterauth requirepass属性)

-a 123456

echo yes | docker run -i --rm -p 6379 --net redis-net redis:5.0 \
   redis-cli --cluster create \
   $(for port in `seq 7000 7005`; do \
     echo -n "$(docker inspect --format '{{ (index .NetworkSettings.Networks "redis-net").IPAddress }}' "redis-${port}")":${port} ' ' ; \
     done) $(echo "--cluster-replicas 1 -a 123456")

注:

  1. 操作环境为cento7

  2. 注意各种路径

  3. 执行之前要保证之前填的自己的IP的服务器的端口7000-7005,17000-17005端口是打开的,云服务器端口也要打开(如果需要外网连接的话),要不有可能一直卡在

    Waiting for the cluster to join...
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容

  • 在我的docker安装redis里,已经说明过docker安装redis的流程,对于redis的安装下面文章很多部...
    szgl_lucifer阅读 12,731评论 1 23
  • 这里主要说明的是windows单机上,运行多个redis实例组成集群。 一 所需软件: Redis、Ruby语言运...
    GuangHui阅读 412评论 0 1
  • redis 集群搭建 redis集群搭建包含两个主要步骤:一是搭建若干单节点redis服务器,二是启动集群控制进程...
    southlake阅读 3,067评论 0 4
  • Redis集群 使用redis做缓存工具 实现系统高可用,redis需要做主备。使用redis做分片集群。 向业务...
    tanghuibook阅读 554评论 0 0
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,518评论 16 22