一、核心工作原理
二、主要流程解析
2.1获取从集群rs列表流程
初始化从集群zk连接: 只会在RS启动的时候初始化或者新增peer的时候一次,后续不再初始化,所以不从集群扩容后不能被主集群识别到
将从集群的zk连接传递给ReplicationEndpoint:在ReplicationSourceManager初始化ReplicationEndpoint的时候
获取从集群的rs列表
在ReplicationSource初始化后第一次发送replication的时候会去连接peer然后将从集群的rs列表缓存
每次进行replication的时候会判断从集群的rs列表是否有变化,如果有则会重新连接从集群的zk获取从集群的列表,如果获取新列表失败则继续使用缓存的老列表
QA:
1.replication怎么获取的需要同步的任务?
有三个地方:rs初始化的时候、同集群内其它的rs宕机的时候、wal发生滚动的时候
2.目标集群扩容/缩容之后源集群怎么知道新节点加入了?
每次需要进行同步新的wal的时候,都会连接在启动的时候记录的从集群的zk,从而获取到从集群的rs列表
3.不同rsgroup的regionserver可以进行failover吗?
可以,从transferQueues的逻辑上来看,并没有区分出不在同一个分组就不能接管其它分组的RS的replication
4.source将wal写入到从集群随机指定的rs后,从集群的指定rs还需要再将数据重新转发到region所在的rs吗?
当数据同步到从集群之后,在从集群rs的ReplicationSink充当客户端,通过Table接口将数据发给同集群内的目标rs