背景

Ceph RGW简介

Ceph RGW基于librados,是为应用提供RESTful类型的对象存储接口。RGW提供两种类型的接口:
  1) S3:兼容Amazon S3RESTful API;
  2) Swift:兼容OpenStack Swift API。
  
  S3和Swift API共享同一个命名空间,所以可以使用两种API访问相同的数据。

环境规划

如上篇文章《Ceph部署(一)集群搭建》所述:4台服务器:1台作为Monitor,1台作为OSD RGW,还有两台作为OSD。ps:我们不搭建CephFS。
所有服务器都安装Ubuntu 16.04。

部署Ceph RGW

进入上文所述的my-cluster目录。

$ cd my-cluster

修改默认端口(可选的)

  RGW默认使用Civetweb作为其Web Sevice,而Civetweb默认使用端口7480提供服务,如果想修改端口(如80端口),就需要修改Ceph的配置文件。在配置文件中增加一个section[client.rgw.],其中需要修改为RGW的hostname。如下:

[client.rgw.node4]
rgw_frontends = "civetweb port=80"

  然后再将配置文件推送到RGW节点。

$ ceph-deploy --overwrite-conf config push node4

安装CEPH OBJECT GATEWAY

  格式为:

$ ceph-deploy install --rgw <gateway-node1> [<gateway-node2> ...]

  由于我们环境中只有一个RGW,所以执行命令:

$ ceph-deploy install –-rgw node4

管理RGW节点

Ceph CLI工具需要在管理员模式下运行,因此需要执行以下命令:

$ ceph-deploy admin node4

安装RGW实例

执行命令:

$ ceph-deploy rgw create node4

  一旦RGW开始运行,我们就可以通过端口7480(如果没有修改的话)来访问。如:

http://node4:7480

  如果RGW运行正常,它应该返回类似的信息:

<ListAllMyBucketsResult>
  <Owner>
    <ID>anonymous</ID>
    <displayName/>
  </Owner>
  <Buckets/>
</ListAllMyBucketsResult>

  注意:剩下的创建用户的步骤都应该在RGW节点上运行。

创建S3用户

  想正常的访问RGW,需要创建相应的RGW用户,并赋予相应的权限,radosgw-admin命令实现了这些功能。
  执行下面命令,来创建一个名为testuser的用户:

$ radosgw-admin user create --uid="testuser" --display-name="First User"

  命令的输出大致如下:

{
    "user_id": "testuser","display_name": "First User","email": "","suspended": 0,"max_buckets": 1000,"auid": 0,"subusers": [],"keys": [{ "user": "testuser","access_key": "I0PJDPCIYZ665MW88W9R","secret_key": "dxaXZ8U90SXydYzyS5ivamEP20hkLSUViiaR+ZDA" }],"swift_keys": [],"caps": [],"op_mask": "read,write,delete","default_placement": "","placement_tags": [],"bucket_quota": { "enabled": false,"max_size_kb": -1,"max_objects": -1 },"user_quota": { "enabled": false,"temp_url_keys": [] }

  注意:需要记住返回结果中keys->access_key和keys->secret_key的值,用于S3接口访问确认。
  

创建Swift用户

  Swift用户是作为子用户subuser被创建的,执行以下命令:

$ radosgw-admin subuser create --uid=testuser --subuser=testuser:swift --access=full

  输出结果大致如下:

"user_id": "testuser","display_name": "First User","email": "","suspended": 0,"max_buckets": 1000,"auid": 0,"subusers": [{
        "id": "testuser:swift","permissions": "full-control"
    }],"keys": [{
        "user": "testuser:swift","access_key": "3Y1LNW4Q6X0Y53A52DET","secret_key": ""
    },{
        "user": "testuser","access_key": "I0PJDPCIYZ665MW88W9R","secret_key": "dxaXZ8U90SXydYzyS5ivamEP20hkLSUViiaR+ZDA"
    }],"swift_keys": [{
        "user": "testuser:swift","secret_key": "244+fz2gSqoHwR3lYtSbIyomyPHf3i7rgSJrF\/IA"
    }],"caps": [],"op_mask": "read,delete","default_placement": "","placement_tags": [],"bucket_quota": {
        "enabled": false,"max_size_kb": -1,"max_objects": -1
    },"user_quota": {
        "enabled": false,"temp_url_keys": []

  注意:需要记住返回结果中swift_keys->secret_key的值,用于Swift接口访问确认。

测试S3接口

  需要创建一个Python测试脚本来测试S3访问。该脚本会连接RGW,创建一个bucket并列出所有的bucket。其中,变量access_key和secret_access的值,来自于创建S3用户命令时,radosgw-admin命令返回的keys->access_key和keys->secret_key。
  执行以下步骤,首先安装python-boto库,该库用于连接S3:

$ apt-get install python-boto

  创建并编辑Python脚本:

$ vi s3test.py

import boto.s3.connection

access_key = 'I0PJDPCIYZ665MW88W9R'
secret_key = 'dxaXZ8U90SXydYzyS5ivamEP20hkLSUViiaR+ZDA'
conn = boto.connect_s3(
        aws_access_key_id=access_key,aws_secret_access_key=secret_key,host='{hostname}',port={port},is_secure=False,calling_format=boto.s3.connection.OrdinaryCallingFormat(),)

bucket = conn.create_bucket('my-new-bucket')
for bucket in conn.get_all_buckets():
    print "{name} {created}".format(
        name=bucket.name,created=bucket.creation_date,)

  替换{hostname}、{port}为真实环境的hostname(或者ip)和RGW的端口。执行命令进行测试:

$ python s3test.py

  输出应该类似如下:

my-new-bucket-2 2017-02-19T04:34:17.530Z

5.4.8 测试Swift接口

  Swfit的访问可以通过命令行。首先安装相关软件包:

$ apt-get install python-setuptools
$ apt-get install python-swiftclient

  执行下列命令,范文Swift接口:

$ swift -A http://{IP ADDRESS}:{port}/auth/1.0 -U testuser:swift -K '{swift_secret_key}' list

  替换{IP ADDRESS}、{port}、{swift_secret_key}等相关参数,其中{swift_secret_key}为创建Swift用户时,radosgw-admin命令返回的swift_keys->secret_key的值。正常的输出应该为:

my-new-bucket

小结

  通过ceph-deploy命令,已经大大地简化了对Ceph集群和RGW的安装和配置。但如果想挑战下自己,或者想让自己了解更多,试试完全的手动部署Ceph吧Ceph手动部署。

Ceph部署二RGW搭建的更多相关文章

  1. Ceph vs Swift - 架构剖析

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

  2. Swift设计模式之命令模式

    转自Swift设计模式原文Design-Patterns-In-Swift

  3. Ceph部署二RGW搭建

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

  4. swift启动流程

    但因为Xcode本身提供的对于plist文件内容的操作已经非常方便,基本上利用Xode编辑plist还是首选。这些key描述影响着Cocoa和CocoaTouch框架初始化和运行app的运行方式UIKitKeys描述IOSApps的行为,每个IOS应用都依赖于Info.plist的keys来与IOS系统通信。但app可能需要扩展默认的plist来描述更多的信息,如定制app启动后的默认旋转方向,标识app是否支持文件共享等等。Mainstorybarddilebasename--UIMainStorybo

  5. EFColorPicker - 一个纯 Swift 的轻量级 iOS 颜色选择器

    EFColorPicker是一个纯Swift的轻量级iOS颜色选择器,受MSColorPicker启发。或执行以下命令:环境iOS8.0+Xcode9.0+Swift4.0+安装EFColorPicker可以通过CocoaPods进行获取。只需要在你的Podfile中添加如下代码就能实现引入:备注EFColorPicker的第一个版本从MSColorPicker转换而来,在此对MSColorPicker的作者sgl0v表示感谢!作者EyreFree,eyrefree@eyrefree.org协议EFQRC

  6. 使用LLDB调试Swift

    LLDB是个很好的选择。接下来我会探讨一些工作中常用到的一些LLDB调试技巧。LLDB拥有大量有用的调试工具。LLDB的bugreport命令可以生成一份详细的app当前状态的报告。这些命令有针对C++,Objective-C,Swift和RenderScript的。使用LLDB的这些命令可以让调试变得更自动化。process用于控制要调试的进程,可把LLDB依附到特定target或从target上解绑。processstatus用于打印当前进程及断点处的相关信息:使用如下命令可继续执行:这等同于Xcod

  7. android – 来自adb的’grep’命令的问题

    当我用adb写的时候:我得到错误输出:但如果我将它拆分为两个操作符:它工作正常.如果唯一的方法是将它拆分为两个–首先进入adbshell,然后运行Inquire,有一种方法可以从c#中执行此操作吗?

  8. android – 交互式设置屏幕设置

    我想在KitKat中将屏幕锁定模式设置为None,这样我就可以运行CTS了.我正在使用DragonBoardAPQ8074进行Intrinsyc的开发,他们刚刚发布了针对AndroidKitKat4.4.2的BSP.麻烦的是,它不稳定,设置中的安全菜单崩溃了.所以我不能使用adbshell来输入keyevents19,20,21,22,23进行导航.adbshellsettings命令似乎应该适用

  9. android – 自定义一个的外观

    一些第三方键盘在每个键上都有多个字符,例如BetterKeyboard8在每个键上的字母上方都有数字和标点符号:可以使用标签?如果是这样,我不知道如何.如果有人知道如何,我将不胜感激.提前致谢,巴里解决方法我想出来,所以我回答了我自己的问题.它不能在XML中完成,但可以通过覆盖KeyboardView的onDraw()方法在Java中完成.这个无意义的例子在按键由父类绘制之后,在每个键的顶部绘制一个小写字母:

  10. 如何知道android中共享首选项中有多少共享首选项

    我想知道通过编码在文件资源管理器中找到的共享首选项中有多少共享首选项,是否有任何方法可以返回共享首选项的总数?解决方法获取可以使用的条目数要检索先前存储的所有密钥,可以使用keySet(),如以下代码段所示:

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部