redis(八)集群
简介
redis提供的服务OPS可以达到10万/秒,当前业务OPS已经达到10万/秒
内存单机容量达到256G,当前业务需求内存容量1T
出现以上问题的时候说明一点,该加机器了
简介:
集群就是使用网络将若干台计算机联通起来,并提供统一的管理方式,使其对外呈现单机的服务效果
作用:
- 分散单台服务器的访问压力,实现负载均衡
- 分散单台服务器的存储压力,实现可扩展性
- 降低单台服务器宕机带来的业务灾难
集群结构设计
1.数据存储设计
- 通过算法设计,计算出key应该保存的位置
- 将所有的存储空间计划切割成16384份,每台主机保存一部分
- 每份代表的是一个存储空间,不是一个key的保存空间
- 将key按照计算出的结果放到对应的存储空间
当服务器添加的时候会从之前的的主机中各自抽取一部分放到新的机器上面
当服务器减少的时候将减少主机中的部分分散到其他主机上面去
2.集群内部通讯设计
为了让key两次就能命中,所以每个主机上存有一份槽的编号数据
从而即使第一次命中不到,也可以直接通过编号数据找到对应的槽
cluster集群结构搭建
本机打算搭建三主三从的集群结构
1.配置
创建如下6个配置文件
填如对应的信息及端口,记得去掉之前的主从复制配置
masterauth zhao56
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 10000
2.启动对应的docker 的redis实例
docker run -p 6379:6379 --name redis-6379 -v /usr/local/docker/redis/conf:/etc/redis/ -v /usr/local/docker/redis/data:/data -d redis redis-server /etc/redis/redis-6379.conf
docker run -p 6380:6380 --name redis-6380 -v /usr/local/docker/redis/conf:/etc/redis/ -v /usr/local/docker/redis/data:/data -d redis redis-server /etc/redis/redis-6380.conf
docker run -p 6381:6381 --name redis-6381 -v /usr/local/docker/redis/conf:/etc/redis/ -v /usr/local/docker/redis/data:/data -d redis redis-server /etc/redis/redis-6381.conf
docker run -p 6382:6382 --name redis-6382 -v /usr/local/docker/redis/conf:/etc/redis/ -v /usr/local/docker/redis/data:/data -d redis redis-server /etc/redis/redis-6382.conf
docker run -p 6383:6383 --name redis-6383 -v /usr/local/docker/redis/conf:/etc/redis/ -v /usr/local/docker/redis/data:/data -d redis redis-server /etc/redis/redis-6383.conf
docker run -p 6384:6384 --name redis-6384 -v /usr/local/docker/redis/conf:/etc/redis/ -v /usr/local/docker/redis/data:/data -d redis redis-server /etc/redis/redis-6384.conf
查看日志可以看到如下信息,表示等待连接
3.查询对应docker分配的地址
docker inspect redis-6379 redis-6380 redis-6381 redis-6382 redis-6383 redis-6384 |grep IPAddress
得到如下信息
docker实例 | ip |
---|---|
redis-6379 | 10.88.0.41 |
redis-6380 | 10.88.0.42 |
redis-6381 | 10.88.0.43 |
redis-6382 | 10.88.0.44 |
redis-6383 | 10.88.0.45 |
redis-6384 | 10.88.0.46 |
4.组建集群
redis 4.0的时候用redis-trib命令 需要ruby环境 我们用的是最新版的此处不再赘述
5.0以上在redis-cli上面 用cluster
进入6379的容器中
docker exec -it redis-6379 /bin/bash
redis-cli --cluster create 10.88.0.41:6379 10.88.0.42:6380 10.88.0.43:6381 10.88.0.44:6382 10.88.0.45:6383 10.88.0.46:6384 --cluster-replicas 1 -a zhao56
其中
--cluster-replicas 后面的1表示每个master节点上面都有一个salve节点,如果是0则都是master节点
-a zhao56 表示连接时的密码
执行命令如下图
1.上面两句表示在6台主机上执行hash槽
主机0,1,2上面分别分配了0-5460,5461-10922,10923-16383三个范围
分配slave给三个master
在nodes-6379.conf上面也能看到对应的绑定信息
上面可以看出来如下信息
master | slave |
---|---|
6380 | 6384 |
6379 | 6383 |
6381 | 6382 |
5.验证
进入到6379redis中
docker exec -it redis-6379 redis-cli
执行set name 和get name会提示到6380中去操作
从新进入6379此时带上-c的参数
docker exec -it redis-6379 redis-cli -c
可以看出执行set name 的时候会跳到6380中去执行操作
查看集群的节点信息
cluster nodes
下线6383slave
查看6383的master6379.log日志文件
查看集群状态
发现将6383置为了fail的状态
重新上线6383
连接恢复正常了
下线6379master
查看salve节点的 6383.log文件
redis-6379连接不上了,所以6383变成了master
查看cluster nodes发现有四个master了,然后6383变为了master 6379标记为fail
redis-6379上线
查看cluster nodes
发现6379变为了从节点
6.Cluster配置及指令总结
1.配置
添加节点
cluster-enabled yes|no
cluster配置文件名,该文件属于自动生成,仅用于快速查找文件并查询文件内容
cluster-config-file <filename>
节点服务响应超时时间,用于判定该节点是否下线或切换为从节点
cluster-node-timeout <milliseconds>
master连接的slave最小数量
cluster-migration-barrier <count>
2指令
查看集群节点信息
cluster nodes
进入一个从节点 redis,切换其主节点
cluster replicate <mater-id>
发现一个新节点,新增主节点
cluster meet ip:port
忽略一个没有solt的节点
cluster forget <id>
手动故障转移
cluster failover
本文来自博客园,作者:zhao56,转载请注明原文链接:https://www.cnblogs.com/zhao56/p/14874314.html