一、集群架构
1、概念
业务发展过程中遇到的峰值瓶颈
- redis提供的服务OPS可以达到10万/秒,当前业务OPS已经达到10万/秒
- 内存单机容量达到256G,当前业务需求内存容量1T
使用集群的方式可以快速解决上述问题
集群就是使用网络将若干台计算机联通起来,并提供统一的管理方式,使其对外呈现单机的服务效果;
2、作用
3、Redis集群原理
- 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
- 节点的fail是通过集群中超过半数的节点检测失效时才生效.
- 客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
-
redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value
- 当客户端执行写(set)命令后, 会将
set name zhangsan经过CRC16算法, 计算出其哈希槽的位置, 然后根据该位置存储到对应的Node节点内, 当执行读命令(get), 会根据槽的位置, 去指定节点内取数据; 不同key的哈希槽不同, 此时读写数据就会在不同的Node内进行操作; 实现了对Redis集群的操作; -
故障转移, 将宕机的master节点的槽 由 选举出来的slave来接管; 不会从新分配 - 如果动态添加一个Node, 此时要将其他Node的槽都分出来一些, 给新的Node;
保持对16384个槽进行均分; 将槽的value也会分出去
二、Redis集群搭建
判断一个是集群中的节点是否可用,是集群中的所用主节点选举过程,如果半数以上的节点认为当前节点挂掉,那么当前节点就是挂掉了,所以搭建redis集群时建议节点数最好为奇数,搭建集群至少需要三个主节点,三个从节点,至少需要6个节点。
1、准备工作
1、准备环境安装ruby以及redis集群依赖
- yum install -y ruby rubygems
- gem install redis-xxx.gem
2、在一台机器创建7个目录
3、每个目录复制一份配置文件
[[email protected] ~]# cp redis-4.0.10/redis.conf 7000/
[[email protected] ~]# cp redis-4.0.10/redis.conf 7001/
[[email protected] ~]# cp redis-4.0.10/redis.conf 7002/
[[email protected] ~]# cp redis-4.0.10/redis.conf 7003/
[[email protected] ~]# cp redis-4.0.10/redis.conf 7004/
[[email protected] ~]# cp redis-4.0.10/redis.conf 7005/
[[email protected] ~]# cp redis-4.0.10/redis.conf 7006/
4、修改不同目录配置文件(每一个Redis服务的配置都要改)
- port 6379 … //修改端口
- bind 0.0.0.0 //开启远程连接
- cluster-enabled yes //开启集群模式
- cluster-config-file nodes-port.conf //集群节点配置文件
- cluster-node-timeout 5000 //集群节点超时时间
- appendonly yes //开启AOF持久化
5、指定不同目录配置文件启动七个节点
- [[email protected] bin]# ./redis-server /root/7000/redis.conf
- [[email protected] bin]# ./redis-server /root/7001/redis.conf
- [[email protected] bin]# ./redis-server /root/7002/redis.conf
- [[email protected] bin]# ./redis-server /root/7003/redis.conf
- [[email protected] bin]# ./redis-server /root/7004/redis.conf
- [[email protected] bin]# ./redis-server /root/7005/redis.conf
- [[email protected] bin]# ./redis-server /root/7006/redis.conf
6、查看进程
- [[email protected] bin]# ps aux|grep redis
2、创建集群
1.复制集群操作脚本到bin目录中
- [[email protected] bin]#
cp /root/redis-4.0.10/src/redis-trib.rb .
2.创建集群
./redis-trib.rb create --replicas 1 192.168.202.205:7000 192.168.202.205:7001 192.168.202.205:7002 192.168.202.205:7003 192.168.202.205:7004 192.168.202.205:7005
7000, 7001, 7002为主节点, 7003为7000的slave节点, 7004为7001的slave节点, 7005为7002的slave节点
3、集群创建成功出现如下提示
3、查看集群状态
1.查看集群状态 check [原始集群中任意节点] [无]
./redis-trib.rb check 192.168.202.205:7000
4、操作集群
get name, 扔会去指定槽的master节点取数据
5、集群节点状态说明
-
主节点
主节点存在hash slots,且主节点的hash slots 没有交叉
主节点不能删除, 因为删除后, hash slot就不完整了, 集群不可以操作
一个主节点可以有多个从节点主节点宕机时多个副本之间自动选举主节点 -
从节点
从节点没有hash slots
从节点可以删除从节点不负责数据的写,只负责数据的同步
当主节点kill后, 会将该主节点对应的slave节点, 充当master节点, hash slot也会被拿过去;