https://github.com/baidu/braft/blob/master/docs/cn/cli.md
braft提供了一系列API用来控制复制主或者具体节点, 可以选择在程序了调用API或者使用braft_cli来给节点发远程控制命令
// 将一个新的peer节点添加到由| conf |组成的复制组中。
// 成功返回OK,否则返回错误信息。
butil::Status add_peer(const GroupId& group_id, const Configuration& conf,
const PeerId& peer_id, const CliOptions& options);
// 将一个peer节点从由| conf |组成的复制组中移除。
// 成功返回OK,否则返回错误信息。
butil::Status remove_peer(const GroupId& group_id, const Configuration& conf,
const PeerId& peer_id, const CliOptions& options);
// 优雅地更改复制组的peers节点
butil::Status change_peers(const GroupId& group_id, const Configuration& conf,
const Configuration& new_peers,
const CliOptions& options);
// 将该复制组的leader转移到目标peer节点
butil::Status transfer_leader(const GroupId& group_id, const Configuration& conf,
const PeerId& peer, const CliOptions& options);
// 将目标peer节点的peer set重置
butil::Status reset_peer(const GroupId& group_id, const PeerId& peer_id,
const Configuration& new_conf,
const CliOptions& options);
// 要求peer立即转储快照
butil::Status snapshot(const GroupId& group_id, const PeerId& peer_id,
const CliOptions& options);
braft_cli: Usage: braft_cli [Command] [OPTIONS...]
Command:
add_peer --group=$group_id --peer=$adding_peer --conf=$current_conf
remove_peer --group=$group_id --peer=$removing_peer --conf=$current_conf
change_peers --group=$group_id --conf=$current_conf --new_peers=$new_peers
reset_peer --group=$group_id --peer==$target_peer --new_peers=$new_peers
snapshot --group=$group_id --peer=$target_peer
transfer_leader --group=$group_id --peer=$target_leader --conf=$current_conf
https://github.com/baidu/braft/blob/master/docs/cn/client.md
client side code of Counter
要访问braft的主节点,需要做这么一些事情:
braft提供了RouteTable功能,命名空间在braft::rtb, 可以帮助你的进程记录和追踪某个节点的主节点位置, 包含以下功能
// 更新路由表中组的配置
int update_configuration(const GroupId& group, const Configuration& conf);
int update_configuration(const GroupId& group, const std::string& conf_str);
// 得到该组leader
// 返回:
// 0 : 成功
// 1 : 不确定leader是谁
// -1: 其他情况
int select_leader(const GroupId& group, PeerId* leader);
// 更新leader
int update_leader(const GroupId& group, const PeerId& leader);
int update_leader(const GroupId& group, const std::string& leader_str);
// 阻塞线程,直到query_leader完成
butil::Status refresh_leader(const GroupId& group, int timeout_ms);
// 从路由表中删除该组
int remove_group(const GroupId& group);