calamari-common
结构图
config.py
此文件定义了CalamariConfig类,用于读取calamari的配置文件,默认是"/etc/calamari/calamari.conf"
salt_wrapper.py
定义了SaltEventSource类,此类用于处理salt服务的 MasterEvent类的关闭和重连接
types.py
此文件里包含一些对ceph概念的对象封装,会将ceph的json数据转成python对象
定义了:SyncObject,OsdMap,MdsMap等类
SyncObject:(VersionedSyncObject,OsdMap,MdsMap等类的基类)
ceph集群的一个对象类,calamari server对ceph集群的一个复制
将json序列化数据对象包在python对象里
-用类似id-to-entry字典的东西来装饰
-此类有个通用方式供查看对象的版本
util.py
此文件定义了一个叫memoize的装饰器,在types.py的OsdMap类里用到
calamari-web
结构图
conf
结构图
Cthulhu
结构图
manager
cluster_monitor.py
SyncObjects: 此类作用->版本化对象的数据
ClusterMonitor: 此类作用->远程管理ceph集群,此类会衍生两个线程,一个监听salt事件,另一个监听用户请求
crush_node_request_factory.py
CrushNodeRequestFactory: RequestFactory子类.映射REST API到CLI实现,具体实现增删改操作
crush_request_factory.py
CrushRequestFactory: RequestFactory的子类.实现CRUSH map修改操作,执行osd setcrushmap.
eventer.py
Eventer: gevent.greenlet.Greenlet的子类.监听ClusterMonitor 和 ServerMonitor数据的改变.Manager.py里的Manager类会用到
manager.py
Manager:通过salt服务远程操作ceph命令来管理ceph集群数据.此类是cthulhu组件的主要入口.
osd_request_factory.py
OsdRequestFactory: RequestFactory的子类,对osd进行修改操作
pool_request_factory.py
PoolRequestFactory: RequestFactory的子类.对ceph osd pool进行增删改的操作
request_collection.py
RequestCollection:管理用户请求的集合, 通过salt JID和 request ID索引.
此类包含一个锁
request_factory.py
RequestFactory: 用命令处理UserRequests的C[r]UD 操作,基类. 具体实现在子类处理
rpc.py
RpcInterface: 远程过程调用协议接口类, RpcThread会用到此类
RpcThread: 为用户的请求状态改变提供ZeroRPC API, manager.py里的Manager类会用到
server_monitor.py
ServerMonitor: 此类处理一些server和osd的一些更新的数据,在manager.py里的Manager类会用到
user_request.py
UserRequestBase: ceph管理对象的request基类
UserRequest:继承自UserRequestBase
RadosRequest: 远程操作librados mon命令的用户请求类, 用于调用salt服务里ceph.rados_commands的方法, 继承自UserRequest
osd_request_factory.py里有用到
SaltRequest: UserRequest子类,远程操作命令的用户请求,没有指定ceph命令时使用, rpc.py里有用到
OsdMapModifyingRequest: RadosRequest的子类.将执行RADOS命令后的数据同步成OsdMap对象
PoolCreatingRequest:OsdMapModifyingRequest子类,此类与OsdMapModifyingRequest类相似.只是多了对pool的处理
PgProgress:封装PgCreatingRequest用来创建操作 块时的状态。
PgCreatingRequest: OsdMapModifyingRequest子类.
1.发送一个工作到salt,直到反馈jid,则salt执行任务结束
2.得到反馈的数据后,将数据同步成OsdMap对象
3.OsdMap数据更新后,等待被创建PG的离开状态为'creating'
persistence
persister.py
Persister: gevent.greenlet.Greenlet的子类.异步持久化更新的数据的队列
servers.py
Server: 表结构,主机信息表格的定义
Service:表结构,ceph服务信息表格的定义
sync_objects.py
SyncObject:表结构,定义存储ClusterMonitor信息的表格.
测试:
calamari环境搭建完成的前提下
export CALAMARI_CONFIG="/home/zhennan/calamari.conf"
命令:/opt/calamari/venv/bin/python /usr/bin/nosetests test_manager.py
由于calamari是在独立的虚拟环境下运行,所以python环境要指定虚拟环境的:/opt/calamari/venv/bin/python
来源:oschina
链接:https://my.oschina.net/u/857184/blog/711894