【无标题】

redis多机数据库

一、主从同步

第一次同步:

1:收到 psync?-1命令,bgsave生成RDB发送到从库
2:复制积压缓冲区数据进行同步
3:命令传播

后续同步

1:收到 psync runid offset,runid是用来判断之前的主库是不是目前的库,offset是为了确定复制偏移量是否在主库的复制积压缓冲区(是一个先入先出的队列)中,如果符合条件,直接将复制积压缓冲区的数据同步过去,然后进行命令传播,否则进行全量备份

在这里插入图片描述

从库对主库还有一个心跳机制

在这里插入图片描述

二、哨兵机制

哨兵状态的维持

代码如下(示例):

struct sentiealState{
	dict*masters;//被监视的主库,sentialRedisInstance类型
};

struct sentialRedisInstance{
	int seconds;//主官下线的时间
	int nums;//客观下线的数目
	dict*salves;//复制主库的从库
	dict*sentials;//监视主库的哨兵
}

哨兵每隔一段时间向主库发送info消息,主库用从库的信息进行回应,哨兵更新自己的状态。哨兵并与主库建立命令连接以及订阅连接。

哨兵同时也会向从库发送info消息,获取从库目前复制偏移量等信息。哨兵并与主库建立命令连接以及订阅连接。

哨兵通过订阅链接获取其他哨兵信息,并与其他哨兵建立命令连接。

2.故障转移

2.1主官下线

在这里插入图片描述

2.2客观下线

在这里插入图片描述

2.3选取哨兵leader

在这里插入图片描述

2.4 选取从库

在这里插入图片描述

2.5.修改复制目标

2.6.旧主库复活后升级为从库

三、集群

3.1 集群状态维持

struct clustersatate{
	clusterNode*myself;
	dict*node;//全部节点
	clusterNode*nodes[16384];//槽节点指派
	zskiplist*slots_to_keys;//由key获得slots;
	//针对于槽的搬移
	clusterNode*importing_slot_from;
	clusterNode*importing_slot_to;
};

clusterNode{
	//一些节点信息
	int slots[16384/4];//槽节点指派
	clusterlink*node;
	clusterNode*salve;
	fail_reports;//用来判断是否下线
}

在这里插入图片描述

3.2 move与ask错误

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

3.3 故障转移

1:错误链表超过1/2;
2:广播下线信息
3:从库广播竞争
4:从库代替主库pong消息告知

3.3 节点如何进行信息交互

ping,pong,meet:在发送当前节点信息的同时还会附带其他两个节点(gossip协议)

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

fail:广播下线信息(gossip协议比较慢)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值