docker安装redis3主3从

42 篇文章 0 订阅
25 篇文章 0 订阅

单机安装redis

docker run -d -p 6379:6379 --name redis-node-1 -v /data/redis/share/redis-node-1:/data --privileged=true  redis 

 

1亿条数据怎么做缓存?
可以使用多主多从;
哈希取余分区:使用hash(key)/机器数,但是有个缺点,有一台机器挂了,他还是按照之前的机器数去算的;
一致性哈希算法分区:这里按照2的32次方取余,构成一个hash环,有一台机器挂了,也不会受影响,对哈希取余分区,进行了优化,缺点是如果机器少了,就会造成资源倾斜;
哈希槽分区:哈希槽就是一个数组, redis通过crc16算法对key得出一个结果,然后对16384取余,得出在0-16383之间的一个值,然后放入对应的机器上,减少资源倾斜;

而我们的多主多从就是使用的哈希槽分区;

为啥redis使用16384个哈希槽?
因为16384个槽,在1000台内的机器就够用了,超过1000台机器就会造成网络拥堵,所以redis的作者,不建议超过1000台机器。

创建redis集群

docker run -d --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis:latest --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:latest --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:latest --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:latest --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:latest --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:latest --cluster-enabled yes --appendonly yes --port 6386

命令解释

--net host 使用宿主机的IP和端口,默认


--privileged=true 获取宿主机root用户权限


--cluster-enabled yes 开启redis集群


--appendonly yes 开启aof持久化

进入容器redis-node-1并为6台机器构建集群关系

docker exec -it redis-node-1 /bin/bash

构建主从关系

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

--cluster-replicas 1表示为每一个master节点 ,创建一个slave节点

 我们在6381端口这个节点,进入redis

redis-cli -p 6381

查看集群状态

cluster info

 查看节点状态

cluster nodes

我们先插入一条数据看看好不好使

可以看到,插入bb的时候,报错了

 为啥呢?因为bb这个槽是8620,在5461-10922之间,所以插入不到

 那么我们要想插入怎么办呢?

使用-c 优化路由,重新执行一下

redis-cli -p 6381 -c

可以看到,插入bb的时候,自动重定向到了6382这个端口

 接下来我们查看下集群信息

redis-cli --cluster check 192.168.184.134:6381

 我们可以看到,6381是master,6385是slave

 那么接下来,我们停掉master看看slave会不会变成master

docker stop redis-node-1

我们在6385这个端口号对应的机器上查看下节点状态

docker exec -it redis-node-5 /bin/bash

redis-cli -p 6385 -c

cluster nodes

可以看到6381挂掉了,6385成为了master

我们这时候在恢复下6381

docker start redis-node-1

再次查看下节点状态,可以看到6381变成了slave

cluster nodes

接下来,我们看下扩容

新建6387和6388两个端口

docker run -d --name redis-node-7 --net host --privileged=true -v /data/redis/share/redis-node-7:/data redis:latest --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:latest --cluster-enabled yes --appendonly yes --port 6388

docker ps

 进入6387的容器

docker exec -it redis-node-7 /bin/bash

将新增的6387作为master节点加入集群

redis-cli --cluster add-node 192.168.184.134:6387 192.168.184.134:6381


6387 就是将要作为master新增节点
6381 就是原来集群节点里面的领路人,相当于找到组织加入集群

检查集群情况

redis-cli --cluster check 192.168.184.134:6381

 6387暂时没有槽号

 接下来重新分配槽号

redis-cli --cluster reshard 192.168.184.134:6381

 这里的4096是16384/4台master算出来的

下面的node ID就是6387 M:后面的数据 

Source node :填写all

这里输入yes

再次检查下集群情况

redis-cli --cluster check 192.168.184.134:6381

可以看到,从3个master各自匀出来一些,分配到了6387 

 接下来,我们为6387master ,分配salve节点

命令:redis-cli --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点ID

redis-cli --cluster add-node 192.168.184.134:6388 192.168.184.134:6387 --cluster-slave --cluster-master-id a39055f975a05b2b2f66e9f44b7081295726d970

再次检查下集群情况

redis-cli --cluster check 192.168.184.134:6381

 可以看到我们现在的集群就是4主4从

接下来我们在看下缩容,把6387和6388移除掉

先来看下集群情况

redis-cli --cluster check 192.168.184.134:6381

找到从机的id

将6388删除 从集群中将4号从节点6388删除

命令:redis-cli --cluster del-node ip:从机端口 从机6388节点ID

redis-cli --cluster del-node 192.168.184.134:6388 26f8a991f11a4fb5d57a9956c88ed714d4928802

在来看下集群情况

redis-cli --cluster check 192.168.184.134:6381

 从机已经被删除了

接下来将6387的槽号清空,重新分配

redis-cli --cluster reshard 192.168.184.134:6381

在这里随便选择一个master节点的id ,来接手6387的槽

 这里的资源节点就是6387的id

 接下来输入done

 输入yes

 在来看下集群情况

redis-cli --cluster check 192.168.184.134:6381

6387的槽已经变空了,由6385接手了

接下来将6387删除

命令:redis-cli --cluster del-node ip:端口 6387节点ID

redis-cli --cluster del-node 192.168.184.134:6387 a39055f975a05b2b2f66e9f44b7081295726d970

 

 在来看下集群情况

redis-cli --cluster check 192.168.184.134:6381

 可以看到已经变成了3主3从

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值