author:sufei
版本:mysql shell 8.0.19
本文是接续上一篇《set_primary_instance安全切换实现逻辑》。
主要讲解mysqlsh实现安全切换逻辑,即force_primary_instance的内部实现逻辑。
一、force_primary_instance处理逻辑
执行整个强制切换的入口函数为Replica_set_impl::force_primary_instance,
void Replica_set_impl::force_primary_instance(const std::string &instance_def,
uint32_t timeout,
bool invalidate_error_instances,
bool dry_run)
其中参数:
instance_def 表示切换到的新主;
timeout 表示gtid同步超时时间
invalidate_error_instances 表示是否忽略存在错误的从库
dry_run 如果为true则表示并不进行真正的切换操作,只进行相关检测
下面是其主要处理逻辑框图
force_primary_instance逻辑
二、步骤详解
获取集群信息
topology::Server_global_topology *srv_topology = nullptr;
auto topology = setup_topology_manager(&srv_topology);
在这其中会获取每个实例的复制信息,具体调用栈如下:
setup_topology_manager
|--->scan_global_topology
|------>load_cluster //获取集群所有实例元数据信息
|------>check_servers
|--------->check_server
|------------>load_instance_state // 获取实例状态信息具体内容如下:
instance->server_id = *conn->