写点什么

Docker 实践经验(五)docker 上部署 redis 三主三从集群

作者:看,未来
  • 2022 年 5 月 30 日
  • 本文字数:1985 字

    阅读完需:约 7 分钟


@[toc]

环境准备

1、一个 redis 镜像 2、准备一份 redis.conf,建议使用物理机安装 redis 后自带的。3、准备一个承载目录,用于挂载 redis 容器数据卷,以及将配置文件放进去。我这里使用 /redis-data


==注释掉 redis.conf 里面的 bind 127.0.0.1,以允许外连接==



简易版本安装

docker run -p 6379:6379 --name myredis --privileged=true \-v /redis-data/redis.conf:/etc/redis/redis.conf \-v /redis-data/data:/data \-d redis redis-server /etc/redis/redis.conf
复制代码


docker exec -it myredis /bin/bashredis-cli
复制代码




搭建 redis 三主三从集群

在 docker 上搭建集群和在 VM 上搭建集群其实都是一样的步骤,在 VM 上搭建 redis 集群可以参考这篇:【redis】闲得无聊,来聊聊当下爆火的 redis集群,顺便搭一个玩玩呗


docker run -d --name redis-node-1 --net host --privileged=true -v /redis-data/redis-node-1:/data redis --cluster-enabled yes --appendonly yes --port 6381
docker run -d --name redis-node-2 --net host --privileged=true -v /redis-data/redis-node-2:/data redis --cluster-enabled yes --appendonly yes --port 6382
docker run -d --name redis-node-3 --net host --privileged=true -v /redis-data/redis-node-3:/data redis --cluster-enabled yes --appendonly yes --port 6383
docker run -d --name redis-node-4 --net host --privileged=true -v /redis-data/redis-node-4:/data redis --cluster-enabled yes --appendonly yes --port 6384
docker run -d --name redis-node-5 --net host --privileged=true -v /redis-data/redis-node-5:/data redis --cluster-enabled yes --appendonly yes --port 6385
docker run -d --name redis-node-6 --net host --privileged=true -v /redis-data/redis-node-6:/data redis --cluster-enabled yes --appendonly yes --port 6386
复制代码


然后,随便进入一个节点,比如:


docker exec -it redis-node-1 bash
复制代码


此时不再是简单粗暴的 redis-cli 启动了,而是:


redis-cli --cluster create 192.168.190.133:6381 192.168.190.133:6382 \192.168.190.133:6383 192.168.190.133:6384 \192.168.190.133:6385 192.168.190.133:6386 \--cluster-replicas 1
复制代码


注:个人配置的时候填入个人 IP,再不济就 127.0.0.1。注:这是两两配对,但配对方式与上面的顺序无关,一切以最终结果为准:



–cluster-replicas 1:为每个 master 随机配一个 slave 节点。



具体结果在这里。


有关于 redis 集群的内容更多可以关注上面那篇,这里不多说。



进入集群节点

那前面说不能直接简单粗暴的 redis-cli,那么要如何进入集群节点呢?



需要带上端口号了。



查看集群状态



优化路由

集群是搭建起来了,但是我们要如何往集群里面插入数据呢?这个集群里有三个节点,每个节点分管不同的数据域,但是我们每次只能以一个节点进入集群,那存取的数据如果不在该节点的管辖范围内,是否会自动调用管理该数据域的节点呢?



是吧,一个也没插进去。一个插不进去就已经是大问题了!!!


那怎么办呢?这样:



启动客户端的时候加一个 -c 参数。



主从切换

刚插了一个进 6382,插了一个进 6383,那我们就把 6382 停了,再查那个数据,看看它的从机会不会顶上去。




从机顶上去了。注:这里不过多深入讲解 redis 相关知识,若要了解 redis 相关知识,我也有相应的专栏。


那如果要还原该怎么办呢?可以思考一下。



集群扩容

docker run -d --name redis-node-7 --net host --privileged=true -v /data/redis/share/redis-node-7:/data redis --cluster-enabled yes --appendonly yes --port 6387
docker run -d --name redis-node-8 --net host --privileged=true -v /data/redis/share/redis-node-8:/data redis --cluster-enabled yes --appendonly yes --port 6388
docker ps
docker exec -it redis-node-7 /bin/bash
复制代码


将新节点以 master 身份加入集群:


redis-cli --cluster add-node 192.168.190.138:6387 192.168.190.138:6381
复制代码


6387 就是将要作为 master 新增节点,6381 就是原来集群节点里面的领路人。



看一下当前集群情况,只是允许它进来,还没给它分配工位呢、


那就分配一下呗:


redis-cli --cluster reshard 192.168.190.138:6381
复制代码




可见对于这个新人的加入,是每个老人匀一些活儿出来给它干。


那新人已经入职了,是时候给他个结对编程的小伙伴了:


redis-cli --cluster add-node 192.168.190.138:6388 192.168.190.138:6387 --cluster-slave --cluster-master-id 新节点id
复制代码



(之所以有个主机没从机,刚刚不是挂掉一个 6382 嘛,还没让他回来呢。)



集群缩容

好,现在经济不景气,那对新人被开除了。可怜呐,板凳都还没坐热就卷铺盖拿去卖了买机票了。


缩容的步骤如下:1、删除从机 2、主机工作交接 3、删除主机。


清空的步骤为:


redis-cli --cluster reshard 192.168.190.138:6381
复制代码




发布于: 38 分钟前阅读数: 5
用户头像

看,未来

关注

还未添加个人签名 2021.04.25 加入

还未添加个人简介

评论

发布
暂无评论
Docker 实践经验(五)docker上部署 redis 三主三从集群_云原生_看,未来_InfoQ写作社区