在monitor 选举leader和peon的时候,rank这个值很关键,之前讲过这个值和ip地址有关,这个值和ip地址的关系如下
在monitor.cc 中的bootstrap这个函数中可以看到
void Monitor::bootstrap()
{
// note my rank
#可以看到是通过get_rank 这个函数得到rank的,这个函数的形参就是ip地址
int newrank = monmap->get_rank(messenger->get_myaddr());
if (newrank < 0 && rank >= 0) {
// was i ever part of the quorum?
if (has_ever_joined) {
dout(0) << " removed from monmap, suicide." << dendl;
exit(0);
}
}
// singleton monitor?
#从这可以看出,rank也是决定
if (monmap->size() == 1 && rank == 0) {
win_standalone_election();
return;
}
}
我们这里重点看看get_rank函数
int get_rank(const string& n) {
for (unsigned i = 0; i < ranks.size(); i++)
if (ranks[i] == n)
return i;
return -1;
}
从这里可以知道rank 和形参表示的ip地址是数组中下标和值的关系
rank和ip 地址的关系
最新推荐文章于 2024-04-17 09:47:11 发布
本文深入探讨了Ceph Monitor中rank值的确定方法及其与IP地址的关系,rank值是选举Leader和Peon的重要依据,文章详细介绍了rank值是如何通过ip地址在Monitor Map中映射为数组下标。
摘要由CSDN通过智能技术生成