sheepdog集群节点加入时,视图变化过程分析
来源:互联网 发布:mac os x10.10.5 编辑:程序博客网 时间:2024/06/04 23:25
以下按照节点加入流程一起分析视图变化,仅仅涉及视图相关,略去了其他流程:
一、基本数据结构与变量:
struct zk_event {
uint64_t id;
enum zk_event_typetype;
struct zk_node sender;
size_t msg_len;
size_t nr_nodes;
size_t buf_len;
uint8_tbuf[ZK_MAX_BUF_SIZE];
};
struct zk_event ev;
二、新节点new_node加入:
1、读取本地epoch文件初始化cluster info结构sys->cinfo;
2、节点加入流程将sys->cinfo放入ev->buf中,推送给zk server,放在/queue/event_id里面;接口调用关系
zk_join()ß send_join_request()ßadd_join_event()ß zk_queue_push()
三、master节点的处理:
其收到join事件后:
1、在master本身和新节点推送的cluster info两者之间选择一个最新的放入ev->buf中;
zk_handle_join()ß sd_join_handler() ß cluster_wait_check()
2、将本地的sd_node_root放在ev->buf的偏移sizeof(cinfo)处,并推送到zkserver。
zk_handle_join()ß push_join_response()
这样ev->buf中就包含了两个视图:一个是sys->cinfo中的,另一个是sd_node_root;若master的cluster info最新,则此时两者一样,否则不同;两个视图是为了对比节点加入前后视图是否变更,以判断是否需要recovery。
四、各个节点处理accept事件:
1、新加入的节点:用ev->buf中的sd_node_root来初始化本地sd_node_root(即从buf的偏移sizeof(cinfo)处取获取;
zk_handle_accept()ß init_node_list()
2、所有节点(包含新加入节点):
1)将new_node加入到本地节点列表sd_node_root;
zk_handle_accept()ß zk_tree_add()
2)拷贝ev->buf中的cluster info到本地sys->cinfo(此时sys->cinfo与sd_node_root视图不一致);
zk_handle_accept()ß sd_accept_handler()
3)比较sys->cinfo与sd_node_root,判断视图是否变更;
update_cluster_info()ß membership_changed()
4)用sd_node_root生成新的vinfo,并用vinfo重新初始化sys->cinfo(此时sys->cinfo与sd_node_root视图再次一致);
update_cluster_info()ß inc_and_log_epoch()
- sheepdog集群节点加入时,视图变化过程分析
- sheepdog+zookeeper存储集群搭建:4个节点安装sheepdog(其中有3个为zookeeper节点)
- sheepdog集群快照
- Redis集群节点变化如何处理?
- Hadoop/Spark集群中新增加节点
- 大话Sheepdog 1 – 智能节点管理
- 大话Sheepdog 1 – 智能节点管理
- 函数栈变化过程分析
- KVM+Sheepdog+NFS构建KVM集群
- gpexpand扩展集群节点过程及问题解决
- redis 集群-新增加节点并数据迁移
- 分布式系统sheepdog整体框架分析
- Mongodb集群节点故障恢复场景分析
- Mongodb集群节点故障恢复场景分析
- Mongodb集群节点故障恢复场景分析
- Spark集群启动过程分析
- 函数调用过程内存堆栈变化分析
- <深入浅出>函数调用过程堆栈变化分析
- 接受月份值,返回季度名称
- Android Studio——修改代码主题
- (XAMPP)80端口被NT kernel & System 占用pid 4
- 关闭selinux
- Ember旅程系列(五) -- 安装插件
- sheepdog集群节点加入时,视图变化过程分析
- C 的字符串处理函数 strcpy() 与 c++的copy() 函数的不同之处
- 摄氏温度转华氏温度
- 树状数组维护区间最大值
- iptables
- python使用socket实现多线程端口扫描
- LeetCode 37. Sudoku Solver
- http协议:http协议理解
- CSDN博客添加自定义栏目