Redis linux - 集群(经典3主3从)
- 前言
- 每个节点知道彼此之间的关系,也会知道自己的角色,当然它们也会知道自己存在于一个集群环境中,它们彼此之间可以交互、通信,比如:ping请求,pong响应。这些关系都会保存到某个配置文件中,每个节点都有,在搭建集群服务的时候配置
- 客户端需要和集群建立连接,只需要与其中一个建立连接关系就可以
- 某个节点挂掉,也是通过超过半数的节点进行检测确认的结果,客观下线后主从切换,与哨兵模式主从切换一个逻辑
- Redis中存在很多插槽,又称之为槽节点,用于存储数据,集群最多节点也是与槽节点有关
- 集群容错
- 构建Redis集群,需要至少6个节点,master*3,slave*3,以此组成高可用集群,称之为经典集群3主3从,容错性更加
- 可以理解为3主3从6哨兵
- 配置文件
# 开启集群模式
cluster-enabled yes
# 每一个节点需要有一个配置文件,需要6份。每个节点处于集群的角色都需要告知其他所有节点,彼此知道,这个文件用于存储集群模式下的集群状态等信息,这个文件是由redis自己维护,我们不用管。如果你要重新创建集群,那么把这个文件删了就行
cluster-config-file nodes-201.conf
# 超时时间,超时则认为master宕机,随后主备切换,具体时间根据当前网络与服务器配置调试,这里建议12000
#时间短容易误判,时间就容易集群瘫痪
cluster-node-timeout 12000
# 开启AOF
appendonly yes
#主备切换认证密码,与master密码(requirepass)保持一致
masterauth <密码>
![](https://i-blog.csdnimg.cn/blog_migrate/f660c320dad0417d5b6db3e11ec5e982.png)
- redis客户端中执行命令
- 注意1:如果你使用的是redis3.x版本,需要使用redis-trib.rb来构建集群,最新版使用C语言来构建了,这个要注意
- 注意2:以下为新版的redis5.x构建方式
- 注意3:集群权限密码统一
- 注意4:启动前,工作空间内的用于单实例或哨兵模式的持久化文件(rdb、aof)会影响集群,删除处理
- redis-cli -a 密码 --cluster create ip1:port1 ip2:port2 ip3:port3 ip4:port4 ip5:port5 ip6:port6 --cluster-replicas 1
- 没有设置密码可以省略 -a 密码
- 创建集群,主节点和从节点比例为1,1-3为主,4-6为从,1和4,2和5,3和6分别对应为主从关系,这也是最经典用的最多的集群模式
- 最后的‘1’表示mater与slave分配比例
- 会默认分配主从关系,一般yes即可
![](https://i-blog.csdnimg.cn/blog_migrate/b2788187dde7009b8ed891cecfc3c4be.png)
- 检查集群信息
- redis-cli -a <密码> --cluster check ip:port
![](https://i-blog.csdnimg.cn/blog_migrate/855453cd5abc3a91f2c87eb83b600eac.png)
- 访问redis集群
- redis-cli -c -a < 密码> -h <IP> -p <端口>
![](https://i-blog.csdnimg.cn/blog_migrate/37a3809c7cfc0192f34351ddcd436692.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ad150e29d9fd155a9548d49788ba3d06.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7fceac304df90e453c0719013199a42b.png)
- 测试数据存储
- 在192.168.213.134从节点存储数据,会自动切换到对应的主节点192.168.213.131操作
- 192.168.213.131查看所有key,是可以看到刚刚存储的key(a),但是切换到192.168.213.129上又查不到key(a)--插槽存储
- 192.168.213.129获取key(a)会自动切换到192.168.213.131获取数据-集群获取
![](https://i-blog.csdnimg.cn/blog_migrate/f2e4c2b4cfcee36aaac606cd7f8bfacf.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b7faf1386b26d11890f87720403e1e7a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/27b1c80761da123247ba850b33687643.png)
- 测试
- 当从节点宕机,集群正常运行
- 当主节点宕机,会把关联这个主节点的从节点其中之一通过选举,提升为主节点继续工作
- 存储为插槽式存储,当前节点获取全部key,只能获取存储在当前节点的数据,获取指定key则可以切换节点获取
- 当宕机的原master节点恢复后,自动归队,归属于原从节点提升后成为主节点的从节点
![](https://i-blog.csdnimg.cn/blog_migrate/851df1adbe689733e8ce851dc864c408.png)
![](https://i-blog.csdnimg.cn/blog_migrate/baf10b46ae3efdb308a7f7c3a6feaa2d.png)
- 槽节点
- 共有16384个槽节点,会根据master总数平均分配
- 存储方式是根据key与16384求余,计算数据存储于哪个master节点
- 不在同一个节点的数据获取时,会自动切换节点,get keys 获取不到全部数据
- 注意
- 如果在核心配置文件(redis.conf)中如果没有配置masterauth 属性,则master节点宕机后关联的slave节点不能提升为新的master节点,导致集群瘫痪
- cluster-node-timeout,健康检查超时时间,超时则认为master宕机,随后主备切换,具体时间根据当前网络与服务器配置调试,这里建议12000,时间短容易误判,时间就容易集群瘫痪