InkScope是一套Ceph管理和监控的可视化平台,InkScope基于Ceph提供的API来访问Ceph集群,InkScope还使用mongoDB来保存实时和历史数据。

InkScope架构图如下图所示:

其中:

ceph-rest-api:Ceph提供的restfulAPI接口,inkscope通过ceph-rest-api接口访问和操作Ceph集群;

cePHProbe:用于获取Ceph集群的相关信息;

sysprobe:用于获取Ceph运行的物理节点的相关信息,如:cpu、内存、网络以及磁盘使用量等相关信息;

mongoDB:用于保存又cePHProbe和sysprobe获取的实时和历史数据集合,该数据集合由inkscope web界面展示部分读取调用;

inkscope-admviz:inkscope对外提供web服务。用户通过web浏览器向inkscope-admviz发送restfulAPI格式的读写请求,之后inkscope-admviz通过访问mongoDB数据库或访问ceph-rest-api接口来完成用户的读写请求,之后将读写请求的结果返回给客户浏览器;

InkScope环境搭建。

硬件环境:

物理设备采用两台华为服务器,其中每台服务器的cpu是Intel Xeon E5-2650 v2,内存128GB,硬盘4块600GB(其中一块硬盘用于做系统,另外三块硬盘用作存储);

软件环境:

操作系统采用ubuntu14.04.3 Server edition;

Ceph集群采用Infernalis V9.2.0,其中采用1个monitor节点和6个OSD节点;

InkScope采用最新的V1.3版本。由于硬件环境有限,因此将InkScope的inkscop-admviz/mongoDB/ceph-rest-api/cePHProbe/sysprobe都安装在monitor所在的节点上,另外一个节点只安装sysprobe;

InkScope环境搭建步骤如下:

  1. 安装mongoDB。

  2. 添加InkScope的Debian软件源,即:在/etc/apt/sources.list.d/目录中添加inkscope.list文件,该文件的内容是:

deb https://raw.githubusercontent.com/inkscope/inkscope-packaging/master/DEBS ./

之后更新ubuntu14.04软件源,即:#apt-get update;

  1. 在monitor所在的节点上安装InkScope服务,即:

#apt-get install inkscope-admviz inkscope-cephrestapi

  1. 配置InkScope服务。

1)更新InkScope配置文件,即:更新/opt/inkscope/etc/inkscope.conf文件。在该文件中填写mongoDB/ceph-rest-api/radosgw相关内容;

2)配置ceph-rest-api服务。ceph-rest-api的配置文件位于/etc/apache2/sites-available/inkScope.conf。

3)配置ceph-rest-api为Wsgi应用。

A)创建一个ceph用户,即:#ceph auth get-or-create client.restapi mds 'allow' osd 'allow *' mon 'allow *' > /etc/ceph/ceph.client.restapi.keyring

B)将创建的用户添加到ceph配置文件中,即:将如下内容添加到/etc/ceph/ceph.conf文件中。

[client.restapi]

log_file = /dev/null

keyring = /etc/ceph/ceph.client.restapi.keyring

  1. 配置apache。

1)增加apache监听端口8080,即:将如下内容添加到/etc/apache/ports.conf文件中。

Listen 8080

2)使能apache相关模块。

#a2enmod rewrite

3)使用Python pip安装flask和json,即:

#pip install flask-login simple-json

4)使能inkscope。

#a2ensite inkScope

5)重新启动Apache服务。

#service apache2 restart

  1. 安装sysprobe。

1)安装sysprobe。

#apt-get install inkscope-sysprobe

2)安装其他工具。

#apt-get install lshw sysstat

3)安装python模块psutil。

#pip install psutil==2.1.3

4)启动sysprobe。

#/etc/init.d/sysprobe start

  1. 安装cePHProbe。

1)安装cePHProbe。

#apt-get install inkscope-cePHProbe

2)安装python模块psutil。

#pip install psutil==2.1.3

3)启动cePHProbe。

#/etc/init.d/cePHProbe start

此时使用浏览器访问http://<monitor_ip>:8080/就能看到inkScope的首页了。

InkScope的优点。

  1. 架构清晰明了,易于扩展和定制化;

  2. 与Ceph集群的接口简单明了,即:直接通过访问ceph-rest-api接口来访问ceph集群。方便接口的扩展和定制化;

  3. InkScope前端采用Angular JS,后端采用Python,层次化清晰明了;

  4. InkScope完全开源且采用Apache V2开源许可证;

InkScope目前的问题。

  1. InkScope访问blockdevices时出现Internal Error 500的错误信息,原因有可能是我在配置ceph-rest-api时有某些地方配置不正确导致的;

  2. InkScope无法正常显示OSD节点磁盘的使用量信息,通过restfulAPI能够获取到json格式的磁盘使用量信息,但是无法在web页面上显示,原因有可能是读取到的数据没有正确的写入到mongoDB;

InkScope总结。

  1. 后续我会持续跟踪上述两个问题并找到解决方案;

  2. InkScope整体架构及其接口设计合理并且易于扩展和定制化,非常适合企业级产品的原型;

InkScope介绍的更多相关文章

  1. 保护MY REST API仅用于MY IOS APP

    我在Laravel中设计一个RESTAPI,用于我的ios应用程序.目前我被困在以下几点:如何保护我的RESTAPI只允许访问我的ios应用程序?听起来我需要通过向我的IOSAPP授予一个私钥来将类似于HMAC方法的内容合并到我的IOSAPP代码中.当从iosapp中运行请求时,我传递带有私钥和其他数据的哈希,然后当在服务器上收到请求时,我通过重新计算哈希来检测请求是否来自应用程序内的用户.我不知道这是否安全&我会认为不是吗?

  2. REST API iOS开发

    我将RestKitAPI设置到我的应用程序有很多麻烦.我想知道有没有其他好的API来制作RESTful应用程序?

  3. Ceph vs Swift - 架构剖析

    Ceph和Swift,哪种更好?当工程师们讨论存储,谈到Ceph和Swift时,他们通常都一致认为其中一个非常棒,另外一个却很糟糕。另一个原因,也是很多人认为Ceph更好的原因,是Swift不支持块存储和文件存储。Ceph的另一个短板是安全性。一个原因是Ceph只能同步写入,并且要求写入节点达到quorum数才能成功返回。比如,可以使用Ceph作为本地高性能存储,而Swift则作为多地域Glance后台,这时复制很重要而速度并不关键。

  4. Swift 如何访问 MongoDB

    Perfect开源项目参与Perfect开发Slack在线协同MongoDBMongoDB库函数是在mongo-c语言库的基础上封装而成,能够为Swift轻松访问MongoDB服务器提供便利。请确保安装并激活了最新版本的Swift3.0toolchain。注意每次向项目追加依存关系时,必须要打开Swift软件包管理器重新创建一个新的Xcode项目文件。在您的项目中声明MongoDB请在您的Perfect项目源程序开头声明并导入MongoDB函数库:创建一个MongoDB数据库连接创建到MongoDB服务器

  5. Ceph部署二RGW搭建

    背景CephRGW简介CephRGW基于librados,是为应用提供RESTful类型的对象存储接口。环境规划如上篇文章《Ceph部署(一)集群搭建》所述:4台服务器:1台作为Monitor,1台作为OSDRGW,还有两台作为OSD。部署CephRGW进入上文所述的my-cluster目录。该脚本会连接RGW,创建一个bucket并列出所有的bucket。正常的输出应该为:小结通过ceph-deploy命令,已经大大地简化了对Ceph集群和RGW的安装和配置。但如果想挑战下自己,或者想让自己了解更多,试

  6. 泛型 – Swift相当于MIN和MAX宏

    在C/Objective-C中,可以使用MIN和MAX宏找到两个数字之间的最小值和最大值。Swift不支持宏,似乎在语言/基础库中没有等价物。应该有一个定制的解决方案,也许基于类似这样的one?min和max已经在Swift中定义:看到这个伟大的写在documented&undocumentedbuilt-infunctionsinSwift。

  7. 在Swift中调用REST API

    我试图使用Swift对RESTAPI进行GET调用,并试图遵循许多教程,但不能弄清楚。或者是因为我不知道如何将所有的Obj-C翻译成Swift,或者因为一半的方法n’都被弃用。有谁知道如何进行调用,并解析返回的JSON数据?

  8. android – 如何仅限授权客户端访问我的REST API?

    题我设计的RESTAPI将用于iOS和Android应用程序,以及将来可能用于Web和其他移动客户端.如何将我的整个API仅限制为我想要访问的客户端?我想阻止第三方访问我的API以注册用户,甚至无需通过授权应用程序登录.目前的想法我可以为每个客户端提供我想要授权的密钥,但是如何防止从我的应用程序的源代码中提取此密钥?

  9. 在Android上同步SQL数据库与REST远程服务器的最佳实践

    编辑:例如,采用方法2,重写的ContentProvider#bulkInsert使用数据库事务可以大大加快批量插入操作:见thisquestion.解决方法最佳选择需要适当的API实现–何时应存储一些db_version.并且在更新服务器期间响应数据和操作类型–添加,更新,删除.

  10. 如何在Android上托管REST webservices?

    有没有人知道一个用Java编写的能够在Android上托管REST服务的开源Web服务器?

随机推荐

  1. Angular2 innerHtml删除样式

    我正在使用innerHtml并在我的cms中设置html,响应似乎没问题,如果我这样打印:{{poi.content}}它给了我正确的内容:``但是当我使用[innerHtml]=“poi.content”时,它会给我这个html:当我使用[innerHtml]时,有谁知道为什么它会剥离我的样式Angular2清理动态添加的HTML,样式,……

  2. 为Angular根组件/模块指定@Input()参数

    我有3个根组件,由根AppModule引导.你如何为其中一个组件指定@input()参数?也不由AppModalComponent获取:它是未定义的.据我所知,你不能将@input()传递给bootstraped组件.但您可以使用其他方法来做到这一点–将值作为属性传递.index.html:app.component.ts:

  3. angular-ui-bootstrap – 如何为angular ui-bootstrap tabs指令指定href参数

    我正在使用角度ui-bootstrap库,但我不知道如何为每个选项卡指定自定义href.在角度ui-bootstrap文档中,指定了一个可选参数select(),但我不知道如何使用它来自定义每个选项卡的链接另一种重新定义问题的方法是如何使用带有角度ui-bootstrap选项卡的路由我希望现在还不算太晚,但我今天遇到了同样的问题.你可以通过以下方式实现:1)在控制器中定义选项卡href:2)声明一个函数来改变控制器中的散列:3)使用以下标记:我不确定这是否是最好的方法,我很乐意听取别人的意见.

  4. 离子框架 – 标签内部的ng-click不起作用

    >为什么标签标签内的按钮不起作用?>但是标签外的按钮(登陆)工作正常,为什么?>请帮我解决这个问题.我需要在点击时做出回复按钮workingdemo解决方案就是不要为物品使用标签.而只是使用divHTML

  5. Angular 2:将值传递给路由数据解析

    我正在尝试编写一个DataResolver服务,允许Angular2路由器在初始化组件之前预加载数据.解析器需要调用不同的API端点来获取适合于正在加载的路由的数据.我正在构建一个通用解析器,而不是为我的许多组件中的每个组件设置一个解析器.因此,我想在路由定义中传递指向正确端点的自定义输入.例如,考虑以下路线:app.routes.ts在第一个实例中,解析器需要调用/path/to/resourc

  6. angularjs – 解释ngModel管道,解析器,格式化程序,viewChangeListeners和$watchers的顺序

    换句话说:如果在模型更新之前触发了“ng-change”,我可以理解,但是我很难理解在更新模型之后以及在完成填充更改之前触发函数绑定属性.如果您读到这里:祝贺并感谢您的耐心等待!

  7. 角度5模板形式检测形式有效性状态的变化

    为了拥有一个可以监听其包含的表单的有效性状态的变化的组件并执行某些组件的方法,是reactiveforms的方法吗?

  8. Angular 2 CSV文件下载

    我在springboot应用程序中有我的后端,从那里我返回一个.csv文件WheniamhittingtheURLinbrowsercsvfileisgettingdownloaded.现在我试图从我的角度2应用程序中点击此URL,代码是这样的:零件:服务:我正在下载文件,但它像ActuallyitshouldbeBook.csv请指导我缺少的东西.有一种解决方法,但您需要创建一个页面上的元

  9. angularjs – Angular UI-Grid:过滤后如何获取总项数

    提前致谢:)你应该避免使用jQuery并与API进行交互.首先需要在网格创建事件中保存对API的引用.您应该已经知道总行数.您可以使用以下命令获取可见/已过滤行数:要么您可以使用以下命令获取所选行的数量:

  10. angularjs – 迁移gulp进程以包含typescript

    或者我应该使用tsc作为我的主要构建工具,让它解决依赖关系,创建映射文件并制作捆绑包?

返回
顶部