about ceph monitor's consistency

    ceph 的mon节点维护了整个ceph 存储集群的map状态.

    因为mon节点是多个的, 所以要求所有mon节点的map状态一致, mon使用paxos算法(分布式一致性算法)来修改map的状态, 确保所有mon节点的map数据一致.

    因此mon节点并不是通过集群配置文件如ceph.conf来保持map一致的, 而是map文件.

    每次map文件变更前, 需要多数monitor节点同意, 确保多数或所有(quorum)节点的map文件一致, 并且map文件是增量更新的, 每次更新产生一个新的version, 所以当mon节点离线再加入时, 需要同步增量部分的信息. 

    monitor相互之间是如何发现的呢? 

    同样是通过map文件, 而不是静态的集群配置文件如ceph.conf.

    我们来dump一个map文件的信息看看 ?

[root@mon5 ~]# ceph mon getmap -o /tmp/monmap
got monmap epoch 8

打印map文件内容

[root@mon5 ~]# monmaptool --print /tmp/monmap
monmaptool: monmap file /tmp/monmap
epoch 8
fsid f649b128-963c-4802-ae17-5a76f36c4c76
last_changed 2014-12-10 11:52:43.961159
created 2014-12-09 15:24:33.339570
0: 172.17.0.2:6789/0 mon.mon1
1: 172.17.0.3:6789/0 mon.mon2
2: 172.17.0.4:6789/0 mon.mon3
3: 172.17.0.9:6789/0 mon.mon4
4: 172.17.0.10:6789/0 mon.mon5

所有mon节点的信息应该是一致的.

[参考]
1. http://docs.ceph.com/docs/master/rados/operations/add-or-rm-mons/

Monitors are critical components of a Ceph cluster, and they need to maintain a quorum for the whole system to work properly. To establish a quorum, the monitors need to discover each other. Ceph has strict requirements for discovering monitors.

Ceph clients and other Ceph daemons use ceph.conf to discover monitors. However, monitors discover each other using the monitor map, not ceph.conf. For example, if you refer to Adding a Monitor (Manual) you will see that you need to obtain the current monmap for the cluster when creating a new monitor, as it is one of the required arguments of ceph-mon -i {mon-id} --mkfs. The following sections explain the consistency requirements for Ceph monitors, and a few safe ways to change a monitor’s IP address.

CONSISTENCY REQUIREMENTS

A monitor always refers to the local copy of the monmap when discovering other monitors in the cluster. Using the monmap instead of ceph.conf avoids errors that could break the cluster (e.g., typos in ceph.conf when specifying a monitor address or port). Since monitors use monmaps for discovery and they share monmaps with clients and other Ceph daemons, the monmap provides monitors with a strict guarantee that their consensus is valid.

Strict consistency also applies to updates to the monmap. As with any other updates on the monitor, changes to the monmap always run through a distributed consensus algorithm called Paxos. The monitors must agree on each update to the monmap, such as adding or removing a monitor, to ensure that each monitor in the quorum has the same version of the monmap. Updates to the monmap are incremental so that monitors have the latest agreed upon version, and a set of previous versions, allowing a monitor that has an older version of the monmap to catch up with the current state of the cluster.

If monitors discovered each other through the Ceph configuration file instead of through the monmap, it would introduce additional risks because the Ceph configuration files aren’t updated and distributed automatically. Monitors might inadvertently use an older ceph.conf file, fail to recognize a monitor, fall out of a quorum, or develop a situation where Paxos isn’t able to determine the current state of the system accurately. Consequently, making changes to an existing monitor’s IP address must be done with great care.
时间: 2024-12-30 21:59:33

about ceph monitor's consistency的相关文章

ceph monitor功能的兼容性管理

软件需要兼容旧版本 ceph是在一个不断进化的软件,会增加功能也会取消旧的功能,如何在ceph monitor的不同版本间保持兼容或者防止不兼容而产生错误,是需要认真思考的问题.而我们阅读代码时往往忽略了兼容性管理的代码,而重点关心它的业务代码,所以这里特别写一篇文章谈谈兼容性的管理. ceph monitor兼容主要包括两方面: 通讯时检查对方的兼容性 代码访问本机数据时的兼容性 Messenger的创建和功能位features的设置 ceph使用原生的Messenger的方式来通讯,在通讯开

ceph monitor paxos的实现(一)

ceph monitor的一个主要功能是使用paxos分布式式协议维护一个key/value数据库的一致性.所使用的数据库引擎一般是leveldb. 数据库接口抽象 为了适应不同的数据库引擎, ceph定义一个MonitorDBStore类来抽象对k/v数据库的操作.对后端数据库要求是支持事务或者原子性的key/value批量更新.它定义个一 Transaction类来说明一个事务包含的所有操作,并且这个类是可以序列化和反序列化的,以便在服务器之间传送: struct Op { uint8_t

openstack 与 ceph (monitor初始化)

Monitor 节点初始化 执行下面步骤 操作系统初始化 当前环境中, ceph 存储集群统一部署 centos 7.1 操作系统, 并在 /etc/hosts 中登记集群中的服务器主机名, 并完成时间同步 主机名验证 [root@hh-yun-ceph-cinder015-128055 ~]# hostname hh-yun-ceph-cinder015-128055.vclound.com [root@hh-yun-ceph-cinder017-128057 ~]# hostname hh-

Ceph分布式存储学习指南2.3 纵向扩展Ceph集群—添加monitor和OSD

2.3 纵向扩展Ceph集群-添加monitor和OSD 现在,我们有了一个单节点的Ceph集群.我们应该扩展它,让它成为一个分布式的.可靠的存储集群.要纵向扩展这个Ceph集群,我们应该添加更多的monitor节点和OSD.根据前面的计划,我们将把ceph-node2和ceph-node3机器同时作为monitor和OSD节点加入到集群中. 2.3.1 添加Ceph monitor Ceph存储集群需要最少一个monitor处于运行状态.要提供高可用性,则需要大于1的奇数个monitor,例如

ceph GLOSSARY

ceph文档里术语较多, 为了方便理解, 最好先了解一下ceph的术语. 以下摘自ceph doc, 少了PG. PG placement group      PG, 存储 object 的逻辑组. PG存储在OSD中. OSD包含journal和data. 写完journal后返回ack确认数据安全性.      一般journal使用SSD来存储, 需要高的响应速度(类型postgresql xlog)      Ceph stores a client's data as objects

Ceph分布式存储实战.

云计算与虚拟化技术丛书 Ceph分布式存储实战 Ceph中国社区 著 图书在版编目(CIP)数据 Ceph分布式存储实战/Ceph中国社区著. -北京:机械工业出版社,2016.11 (云计算与虚拟化技术丛书) ISBN 978-7-111-55358-8 I. C- II. C- III. 分布式文件系统 IV. TP316 中国版本图书馆CIP数据核字(2016)第274895号 Ceph分布式存储实战 出版发行:机械工业出版社(北京市西城区百万庄大街22号 邮政编码:100037) 责任编

如何在Ubuntu 16.04中安装Ceph存储集群

Ceph 是一个高性能.可靠.可扩展的开源存储平台.它是一个自由的分布式存储系统,提供了对象.块和文件级存储的接口,并可以不受单点故障的影响而运行. 在这个教程中,我将指导你在 Ubuntu 16.04 服务器上安装建立一个 Ceph 集群.Ceph 集群包括这些组件: Ceph OSD (ceph-osd) - 控制数据存储,数据复制和恢复.Ceph 集群需要至少两个 Ceph OSD 服务器.这次安装中我们将使用三个 Ubuntu 16.04 服务器. Ceph Monitor (ceph-

如何在 Ubuntu 16.04 中安装 Ceph 存储集群

Ceph 是一个高性能.可靠.可扩展的开源存储平台.它是一个自由的分布式存储系统,提供了对象.块和文件级存储的接口,并可以不受单点故障的影响而运行. 在这个教程中,我将指导你在 Ubuntu 16.04 服务器上安装建立一个 Ceph 集群.Ceph 集群包括这些组件: Ceph OSD (ceph-osd) - 控制数据存储,数据复制和恢复.Ceph 集群需要至少两个 Ceph OSD 服务器.这次安装中我们将使用三个 Ubuntu 16.04 服务器. Ceph Monitor (ceph-

Ceph分布式存储实2.2 RADOS架构

2.2 RADOS架构 RADOS系统主要由两个部分组成,如图2-2所示. 1)OSD:由数目可变的大规模OSD(Object Storage Devices)组成的集群,负责存储所有的Objects数据. 2)Monitor:由少量Monitors组成的强耦合.小规模集群,负责管理Cluster Map.其中,Cluster Map是整个RADOS系统的关键数据结构,管理集群中的所有成员.关系和属性等信息以及数据的分发.   图2-2 RADOS系统架构图示 对于RADOS系统,节点组织管理和