Redis-主从复制/集群

目录

一、主从复制

1.1 概念

1.2 特点

1.3 原理

二、集群

2.1 概念

2.2 slots

2.3 特点

2.4 优缺点


一、主从复制

1.1 概念

        主从复制,简单来说就是主机数据更新后根据配置策略自动同步从机master/slaver机制Master以为主,Slave以为主。

        可以实现读写分离、性能扩展、容灾快速恢复

1.2 特点

        1.可以在主机,在从机取数据,但在从机数据会被拒绝

        2.主机挂掉,重启就行;从机重启需重设(我附庸于谁?)

        3.假如从机是后来加入的,它将从头复制数据,而不是从切入点复制。

        4.若master挂掉,后面slave可以顶替master的位置,其后面slave不用做任何修改。以前的master恢复后只能做slave了(反客为主)。

        但这需要手动设置,想要自动设置要开启哨兵模式(反客为主的自动版),能够在后台监控主机是否故障。如果故障了根据投票数(优先级别)自动将从库转换为主库。这需要单独配置一个sentinel.conf,因为哨兵是一个单独服务器

 

优先级 - 在redis.conf中默认:slave-priority 100,值越小优先级越高

偏移量 - 是指获得原主机数据最全的

rinid - 每个redis实例启动后都会随机生成一个40位的runid

        5.上一个Slave可以是下一个slaveMasterSlave同样可以接收其他 slaves连接同步请求,那么该slave作为了链条中下一个的master, 可以有效减轻master写压力,去中心化降低风险(薪火相传)。

1.3 原理

  1. Slave启动成功连接到master后会发送一个sync命令
  2. Master接到命令启动后台的存盘进程(RDB),同时收集所有接收到的用于修改数据集的命令, 在后台进程执行完毕之后,master将传送整个数据文件(RDB)slave,以完成一次完全同步
  3. 全量复制slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
  4. 增量复制Master继续将新的所有收集到的修改命令依次传给slave,完成同步
  5. 重新连接master,会自动执行一次完全同步全量复制)
  6. 每次主服务器进行写操作后,都会和从服务器进行数据同步增量复制

二、集群

        传统的主从复制模式可能存在容量不足、并发写的问题,另外,若主机宕机,会导致ip地址发生变化,应用程序中配置需要修改对应的主机地址端口等信息。之前通过代理主机来解决,但是redis3.0中提供了解决方案。就是无中心化集群配置。

 

2.1 概念

        Redis 集群实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据1/N

        Redis 集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求

2.2 slots

        假设一个 Redis 集群包含 16384 个插槽(hash slot), 数据库中的每个都属于这 16384 个插槽其中一个

        集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽, 其中 CRC16(key) 语句用于计算键 key 的 CRC16 校验和 。

        集群中的每个节点负责处理一部分插槽。 举个例子, 如果一个集群可以有主节点, 其中:

        节点 A 负责处理 0 号至 5460 号插槽。

        节点 B 负责处理 5461 号至 10922 号插槽。

        节点 C 负责处理 10923 号至 16383 号插槽。

        其实就是很像hash算法,将数据分散存在多个区域中。

2.3 特点

        1.在redis-cli每次录入、查询键值,redis都会计算出该key应该送往的插槽,如果不是该客户端对应服务器的插槽,redis会报错,并告知应前往的redis实例地址端口

        2.redis-cli客户端提供了 c 参数实现自动重定向

                如 redis-cli  -c p 6379 登入后,再录入查询键值对可以自动重定向

        3.即使连接的不是主机,集群会自动切换主机存储。主机,从机

        4.无论从哪台主机写的数据,其他主机上都能读到数据

        5.不在一个slot下的键值,是不能使用mget,mset多键操。可以通过{ }来定义的概念,从而使key中{ }内相同内容的键值对放到一个slot中去。

        6.如果主节点下线,从节点自动升为主节点主节点恢复后,回来变成从机

        7.如果所有某一段插槽主从节点掉,根据配置文件的不同设置,整个集群挂掉或者插槽数据全都不能使用,也无法存储

2.4 优缺点

优点

        1.实现扩容

        2.分摊压力

        3.无中心配置相对简单

不足

        1.多键操作是不被支持的

        2.多键的Redis事务是不被支持的。lua脚本不被支持

        3.由于集群方案出现较晚,很多公司已经采用了其他的集群方案,而代理或者客户端分片的方案想要迁移至redis cluster,需要整体迁移而不是逐步过渡,复杂度较大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值