0
点赞
收藏
分享

微信扫一扫

Docker 从入门到进阶六:于 Docker 上部署 redis 集群


Docker 从入门到进阶六:于 Docker 上部署 redis 集群_docker


文章目录

  • ​​配置单机 redis​​
  • ​​配置 redis 集群​​
  • ​​1、启动六台 redis 实例​​
  • ​​2、构建集群关系​​
  • ​​查看集群状态​​
  • ​​优化路由​​
  • ​​主从切换​​
  • ​​集群扩容​​
  • ​​集群缩容​​


配置单机 redis

多的咱就不说了吧,快速先安装一台 redis上去。

mkdir /tmp/redis
redis.conf 拷贝至该目录下(再不济,下个 redis 里面就有)
注释掉里面的 bind 127.0.0.1,以允许外连接

docker pull redis
docker images

docker run -p 6379:6379 --name myredis --privileged=true -v /tmp/redis/redis.conf:/etc/redis/redis.conf -v /tmp/redis/data:/data -d redis redis-server /etc/redis/redis.conf

docker exec -it myredis /bin/bash
redis-cli

Docker 从入门到进阶六:于 Docker 上部署 redis 集群_数据_02

配置 redis 集群

本例咱来构建一个三主三从的小集群。

1、启动六台 redis 实例

docker run -d --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis --cluster-enabled yes --appendonly yes --port 6381

docker run -d --name redis-node-2 --net host --privileged=true -v /data/redis/share/redis-node-2:/data redis --cluster-enabled yes --appendonly yes --port 6382

docker run -d --name redis-node-3 --net host --privileged=true -v /data/redis/share/redis-node-3:/data redis --cluster-enabled yes --appendonly yes --port 6383

docker run -d --name redis-node-4 --net host --privileged=true -v /data/redis/share/redis-node-4:/data redis --cluster-enabled yes --appendonly yes --port 6384

docker run -d --name redis-node-5 --net host --privileged=true -v /data/redis/share/redis-node-5:/data redis --cluster-enabled yes --appendonly yes --port 6385

docker run -d --name redis-node-6 --net host --privileged=true -v /data/redis/share/redis-node-6:/data redis --cluster-enabled yes --appendonly yes --port 6386

–net host:使用宿主机的 ip 和端口,默认。

–cluster-enabled yes:开启集群服务。

–appendonly yes:开启持久化。

2、构建集群关系

挑个看的喜欢的节点进去。

注意进去之后要这样启动:

redis-cli --cluster create 192.168.190.138:6381 192.168.190.138:6382 192.168.190.138:6383 192.168.190.138:6384 192.168.190.138:6385 192.168.190.138:6386 --cluster-replicas 1

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

Docker 从入门到进阶六:于 Docker 上部署 redis 集群_redis_03

Docker 从入门到进阶六:于 Docker 上部署 redis 集群_数据_04

这里面还涉及了哈希槽的内容,后面会专门出一篇关于分布式一致性的文来讲。

查看集群状态

Docker 从入门到进阶六:于 Docker 上部署 redis 集群_数据_05

Docker 从入门到进阶六:于 Docker 上部署 redis 集群_云原生_06

优化路由

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

Docker 从入门到进阶六:于 Docker 上部署 redis 集群_redis_07

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

那怎么办呢?这样:

Docker 从入门到进阶六:于 Docker 上部署 redis 集群_docker_08

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

主从切换

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

Docker 从入门到进阶六:于 Docker 上部署 redis 集群_数据_09

Docker 从入门到进阶六:于 Docker 上部署 redis 集群_数据_10

从机顶上去了。

注:这里不过多深入讲解 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 就是原来集群节点里面的领路人。

Docker 从入门到进阶六:于 Docker 上部署 redis 集群_数据_11

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

那就分配一下呗:

redis-cli --cluster reshard 192.168.190.138:6381

Docker 从入门到进阶六:于 Docker 上部署 redis 集群_云原生_12

Docker 从入门到进阶六:于 Docker 上部署 redis 集群_数据_13

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

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

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

Docker 从入门到进阶六:于 Docker 上部署 redis 集群_数据_14

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

集群缩容

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

缩容的步骤如下:

1、删除从机

2、主机工作交接

3、删除主机。

清空的步骤为:

redis-cli --cluster reshard 192.168.190.138:6381

Docker 从入门到进阶六:于 Docker 上部署 redis 集群_数据_15

Docker 从入门到进阶六:于 Docker 上部署 redis 集群_数据_16

其他步骤也就不用我多说了吧。

到这步了,我就问一个问题:累吗?

我也累,这时候我就再想,就没人把这些东西封装一下我一键解决吗?

诶,还真别急,下篇就讲这个。



举报

相关推荐

0 条评论