复制集群概述
&.集群特点
(1) 读写分离: Redis复制集群采用主写从读机制进行读写分离,易于性能扩展.
(2) 数据容灾: Redis复制集群仅支持一主多从,且从服务器也可以关联从服务器 (树状拓扑).
主从模式
&.一主多从 (方案一)
(1) 配置Redis主服务器: 用相同的方式配置多台Redis服务器,配置方式参考Redis6.2安装配置.
(2) 配置Redis从服务器: 配置多台Redis服务器(参考Redis6.2安装配置). 逐个连接并执行如下命令.
info replication # 查看当前Redis主机的信息(role为角色,默认为master)
slaveof <master_ip> <master_port> # 将当前Redis主机配置为指定Redis主机的从机,role变为slave.
[提示] Redis服务启动后,默认角色均为master(主). 配置复制集群时,只需要将部分主机的角色切换为slave(从)即可构建出主从关系. 因此,除以上方式外,也可先启动多台Redis服务器,然后再逐个对从服务器的角色进行配置(将master切换为slave).
复制原理
复制集群主服务器故障的高可用机制
主服务器单点故障时,从服务器不会选举新的主服务器,而是等待主服务器恢复(此时集群可读不可写),当主服务器重启后,会自动根据从服务器进行数据恢复 (此时集群恢复写功能). 复制集群从服务器故障的高可用机制 从服务器单点故障时,复制集群将通过其他从服务器提供读取操作. 故障服务器重启后,默认身份会还原为master,需要重新指定slave身份,指定成功后,该从服务器会自动从主服务器进行数据同步. 从服务器在多点故障中全军覆没时,复制集群将通过主服务器提供读写支持. 后续只需将已修复主机/新增主机以slave的身份关联到主服务器即可. |
&.薪火相传
(1) 初始化服务器: 安装配置多台Redis服务器,配置方式参考Redis6.2安装教程.
(2) 建立主从关系: 在一主多从的基础上,使用slaveof
命令为从服务器关联从服务器 (树状拓扑).
slaveof <slave_ip> <slave_port> # 将当前Redis主机配置为指定slave从机的从机.
info replication # 查看当前Redis主机的信息 (判断是否配置成功).
&.反客为主
(1) 初始化服务器: 安装配置多台Redis服务器,配置方式参考Redis6.2安装教程.
(2) 建立主从关系: 在
slaveof <master_ip> <master_port> # 将当前Redis主机配置为指定master主机的从机.
slaveof no one # 将当前slave主机变为master主机.
info replication # 查看当前Redis主机的信息 (判断是否配置成功).
&.哨兵模式 (高可用)
(1) 配置Redis主从服务器
(2) 配置Redis哨兵服务器
# sentinel.conf文件中写入如下内容,其中1为至少有多少个哨兵同意迁移的数量
sentinel monitor <master_name> <master_ip> <master_port> 1
选举规则: 权重高的从机优先被选举(权重值可通过redis.conf中的replica-priority
进行设置,值越小权重越高). 各从机权重相同时,偏移量大的从机优先被选举(偏移量指存储的数据量,偏移量越大说明数据越完整). 各从机偏移量也相同时,选举runid最小的从机作为主机(runid是redis启动时随机生成的一个40位的大整数).
# 启动哨兵服务器
redis-sentinel /etc/redis/sentinel.conf
# 配置选举规则 (原主机故障重启后会变为从机)
# replica-priority: 100 值越小优先级越高 (redis.conf)
缺点 (复制延时): 由于所有的数据都是通过master写入,然后再同步更新到slave上,所以slave的数据存在一定延迟,当系统繁忙时,延迟问题会更严重,slave主机数量也会加重该问题 (从机越多延迟越高)
分片集群 (负载均衡)
(优点) 易于水平扩展(内存扩展、压力分摊) | (缺点) 无中心化配置相对简单 |
(优点) 不支持多键操作和多键的Redis事务 | (缺点) 不支持lua脚本 |