oplog 分布式mysql代码学习


问题:

1、数据通过proxy集中分发和组装?还是客户端从master处获知mysql server状态后,自行分发和组装?

2、是否有mysql自动备份?table是否有冗余机制?

3、如何进行分发的规则判定?

4、某台mysql宕机后是否会自动做数据恢复?

5、数据如何做切分?按天?按小时?按数据量?子表表名如何定?各个server如何对切分的数据进行聚合?


核心思想: 通过master service监控各个mysql的情况,client首先向master获取可用的mysql列表和table名称,然后链接各个mysql实例进行数据操作。


系统构架:

master serivce: 监控mysql、table server的状态,管理mysql、tableserver、table、database信息,将信息存储于主mysql实例的表中,启动时加载数据到内存。负责table、database信息的生成、分发、查找,负责通过jobid、数据时间、operateID、logType生成或定位tableName,databaseID。负责根据mysql使用情况,数据量大小进行数据存储的分发定位。

master service 中有后台线程负责扫描panggu文件系统,并生成新的job,分配mysql和table server,并提交给table server执行oplog的入库操作。

master serivice 中有后台线程扫描各个table表状态,发现需要进行备份的,master会计算空余的mysql和disk作为一个replicate job提交到源table server,由其联系目标table server进行数据拷贝。

table server:负责具体的数据操作。从pangu中读取oplog数据,组织成sql语句,并按照master返回的mysql列表,将数据插入mysql中。

table server会定期发送状态更新请求给master service,master service定期扫描table serivice的状态信息,发现有宕机的,则安排删除对应的meta信息,包括table server所在的mysql实例、disk、table信息。然后通过后台线程发现并重新进行数据冗余备份。

proxy:apache 模块,处理http请求,根据请求的参数(开始时间、结束时间),rpc call master serivce. searchTable 定位到具体的table列表,然后根据table对应的mysql实例,将请求分发到各个mysql中执行,组后归并数据,完成分布式查询。


master serivice 管理的meta信息都存储在主mysql中,包括 table、disk、 mysql instance、tabel serivce清单,以及之间的关系。

master service 1 <=> * table service (key in host) 1 <=> * mysql instance (key in id + host) 1 <=> * disk server ( key in id) 1<=> * databases

table * <=> * disk service ( table.diskService[ diskId] = diskService, diskService[databaseId] [tableID] = table ) 一个table有多个disk备份


日志数据以天为单位生成表,当数据量超过一定大小时,也会按照数量自动分表。数据表通过master service的后台进程自动备份到多个disk。在查询时,选择其中一个disk进行查询,然后对多表数据进行聚合。

你可能感兴趣的:(mysql)