主从复制好处:
- 读写分离,性能扩展;
- 容灾快速恢复(一台从机宕掉,切换其他从机);
一主二从: 当从服务器挂掉,重新启动时,(从机)切换为独立主机,重新设置为从机,则从头开始复制主机数据; 主服务器挂掉,从服务器不变,主服务器恢复,还为主服务器; 主从复制原理:(全量复制+增量复制) 1、当从服务器连接主服务器后,从服务器向主服务器发送进行数据 同步消息; 2、主服务器接到从服务器发送过来的同步消息,把主服务器数据进行持久化,rdb文件,把rdb文件发送从服务器,从服务器拿到rdb进行读取; 3、每次主服务器进行写操作之后,和从服务器进行数据同步; 薪火相传: 从服务器下可以挂从服务器,挂掉同一主而从(从服务器恢复后变为独立主机,需要重新建立关联); 反客为主: 将从机变为主机:slaveof no one 当一个master宕机后,后面的slave可以立刻升为master,其后面的slave不用做任何修改 哨兵模式:(反客为主的自动版) 主机挂掉,选择从机的条件依次为: 1、选择优先级靠前的(slave-priority(redis6:replica-priority) 100(默认)值越小,优先级越高); 2、选择偏移量最大的(偏移量指获得原主机数据最全的); 3、选择runid最小的从服务(每个redis实例启动都会随机生成一个40位的runid); Redis集群 主从模式,薪火相传模式,主机宕机,导致ip地址发生变化,应用程序中配置需要修改对应的主机地址、端口等信息;(之前通过代理主机来解决,但是redis3.0中提供了解决方案,就是无中心化集群配置) Redis集群特点 Redis集群实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分布式存储在这N个节点中,每个节点存储总数据的1/N; Redis集群通过分区(partition)来提供一定程度的可用行:即使集群中有一部分节点失效或者无法进行通讯,集群也可以继续处理命令请求; redis cluster配置重要参数: cluster-enabled yes 打开集群模式; cluster-config-file nodes-6379.conf 设定该节点的配置文件名; cluster-node-timeout 15000 设定节点失联时间,超过该时间(毫秒),集群自动进行主从切换; (查看当前集群情况使用命令:cluster nodes) 一个集群至少要有三个主节点 选项 --cluster-replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。 分配原则尽量保证每个主数据库运行在不用的ip地址,每个从库和主库不在一个ip地址上; slot 一个Redis集群包含16384个插槽(hash slot),数据库中每个键都属于这16384个插槽中的一个,集群使用公式 crc16(key)%16384来计算key属于哪个槽,集群中每个节点负责处理一部分插槽。如果一个主机挂掉,则从机升为主机,之前的主机恢复后变为从机; 如果某一段插槽的主从节点都宕掉,redis服务是否还能继续? 若:cluster-require-full-coverage : yes 那么整个集群都挂掉; 若为 No, 那么该插槽数据全都不能使用,也无法存储; redis集群的好处: 1、实现扩容 2、分摊压力 3、无中心配置相对简单 不足: 1、多键操作不被支持(需将多键分为一个组); 2、多键的Redis事务是不被支持的,lua脚本不被支持; 3、由于集群方案出现较晚,很多公司已经采用了其他集群方案,而代理或者客户端分片的方案想要迁移至redis cluster, 需要整体迁移而不是逐步过渡,复杂度较大;
|