2017-01-22 10:37:28 weixin_34270606 阅读数 59

ceph存储操作

创建用户

(ceph-rgw)[root@ceph-node01 /]# radosgw-admin user create --uid=registry --display-name="registry" 
{
"user_id": "registry",
"display_name": "registry",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"auid": 0,
"subusers": [],
"keys": [
{
"user": "registry",
"access_key": "3JHGH0WDQO5LG2HTF6UX",
"secret_key": "jt8KzI8XUagl2KTX0XkdFTP39mkcD9774ql4ZbDp"
}
],
"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,
"max_size_kb": -1,
"max_objects": -1
},
"temp_url_keys": []
}

创建swift用户

(ceph-rgw)[root@ceph-node01 /]# radosgw-admin subuser create --uid=registry --subuser=registry:swift --access=full 
{
"user_id": "registry",
"display_name": "registry",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"auid": 0,
"subusers": [
{
"id": "registry:swift",
"permissions": "full-control"
}
],
"keys": [
{
"user": "registry",
"access_key": "3JHGH0WDQO5LG2HTF6UX",
"secret_key": "jt8KzI8XUagl2KTX0XkdFTP39mkcD9774ql4ZbDp"
}
],
"swift_keys": [
{
"user": "registry:swift",
"secret_key": "dfRwo00KoOTw3IJJJCrRpFqIinaEFSEvxCuBxXa5"
}
],
"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,
"max_size_kb": -1,
"max_objects": -1
},
"temp_url_keys": []
}

配置registry访问

storage:
    swift: 
       authurl: http://192.168.48.213:6780/auth/v1
       username: registry:swift 
       password: dfRwo00KoOTw3IJJJCrRpFqIinaEFSEvxCuBxXa5
       container: registry
    cache:
       layerinfo: inmemory
    maintenance:
       uploadpurging:
           enabled: false
    delete:
       enable: true
health:
    storagedriver:
        enabled: true
        interval: 10s
        threshold: 3

据java接口可知必要参数为:username,password,authurl

http://docs.ceph.com/docs/master/radosgw/swift/java/

测试验证

[root@gx-yun-084069 ~]# docker push paas/golang:1.6.2
The push refers to a repository [registry.vclound.com/paas/golang]
d966b83f8000: Pushed 
6fe25112314d: Pushed 
4d8ac510a6fe: Pushing [===================> ] 126.2 MB/318.1 MB
5aee74d2e9d0: Pushing [=========================> ] 68.6 MB/134.4 MB
338cb8e0e9ed: Pushing [=========================> ] 67.77 MB/131.2 MB
d1c800db26c7: Pushed 
42755cf4ee95: Pushing [==============================> ] 75.38 MB/125.1 MB

查看ceph是否已上有golang

(ceph-rgw)[root@ceph-node01 /]# rados lspools
rbd
.rgw.root
default.rgw.control
default.rgw.data.root
default.rgw.gc
default.rgw.log
volumes
default.rgw.users.uid
default.rgw.users.keys
default.rgw.meta
default.rgw.users.email
default.rgw.users.swift
default.rgw.buckets.index
default.rgw.buckets.data
 
 
(ceph-rgw)[root@ceph-node01 /]# rados --pool default.rgw.buckets.data ls|grep golang
208d0ff3-767d-4edc-ac3f-fb55689374cb.44103.1_files/docker/registry/v2/repositories/paas/golang/_manifests/tags/1.6.2/current/link
208d0ff3-767d-4edc-ac3f-fb55689374cb.44103.1_files/docker/registry/v2/repositories/paas/golang/_uploads/32bfc9f1-d07f-4def-8fc7-3fd4099e2607/startedat
208d0ff3-767d-4edc-ac3f-fb55689374cb.44103.1_files/docker/registry/v2/repositories/paas/golang/_layers/sha256/0ffc1204e0abead91aa6678abffa44739455c7b95b96b108eefc2f29d6001fdf/link
208d0ff3-767d-4edc-ac3f-fb55689374cb.44103.1_files/docker/registry/v2/repositories/paas/golang/_layers/sha256/a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4/link
208d0ff3-767d-4edc-ac3f-fb55689374cb.44103.1_files/docker/registry/v2/repositories/paas/golang/_layers/sha256/ab30c63719b10dd434ddbe896879bd9b637fe4e16749a94d3dc827450dc2a437/link
208d0ff3-767d-4edc-ac3f-fb55689374cb.44103.1_files/docker/registry/v2/repositories/paas/golang/_uploads/5e016d36-55dc-41c9-945d-85c18399723e/startedat
208d0ff3-767d-4edc-ac3f-fb55689374cb.44103.1_files/docker/registry/v2/repositories/paas/golang/_layers/sha256/d8a921df8ce9d2b00d139bc78f0a2036f1960204281570d5794ad0e0c9f32ceb/link
208d0ff3-767d-4edc-ac3f-fb55689374cb.44103.1_files/docker/registry/v2/repositories/paas/golang/_uploads/377a0560-0beb-4f2d-87c2-2173bfa15e3f/data
208d0ff3-767d-4edc-ac3f-fb55689374cb.44103.1_files/docker/registry/v2/repositories/paas/golang/_layers/sha256/b0850b14d0d144ceecb975d0b296d7630c5c8658054535164c8a5ea55a3fa627/link
208d0ff3-767d-4edc-ac3f-fb55689374cb.44103.1_files/docker/registry/v2/repositories/paas/golang/_manifests/tags/1.6.2/index/sha256/3b746975638c2640b41de2f6669fb4a6d24d5c218c008b359d21148a580b2178/link
208d0ff3-767d-4edc-ac3f-fb55689374cb.44103.1_files/docker/registry/v2/repositories/paas/golang/_uploads/32bfc9f1-d07f-4def-8fc7-3fd4099e2607/data
208d0ff3-767d-4edc-ac3f-fb55689374cb.44103.1_files/docker/registry/v2/repositories/paas/golang/_uploads/5e016d36-55dc-41c9-945d-85c18399723e/data
208d0ff3-767d-4edc-ac3f-fb55689374cb.44103.1_files/docker/registry/v2/repositories/paas/golang/_uploads/d51b6005-d7d2-4981-ad27-284914e21159/startedat
208d0ff3-767d-4edc-ac3f-fb55689374cb.44103.1_files/docker/registry/v2/repositories/paas/golang/_manifests/revisions/sha256/3b746975638c2640b41de2f6669fb4a6d24d5c218c008b359d21148a580b2178/link
208d0ff3-767d-4edc-ac3f-fb55689374cb.44103.1_files/docker/registry/v2/repositories/paas/golang/_uploads/377a0560-0beb-4f2d-87c2-2173bfa15e3f/startedat
208d0ff3-767d-4edc-ac3f-fb55689374cb.44103.1_files/docker/registry/v2/repositories/paas/golang/_layers/sha256/c6072700a24252bd71f6c5d2cabf5978ddf324a959b05bad417d8b3789f8df33/link
208d0ff3-767d-4edc-ac3f-fb55689374cb.44103.1_files/docker/registry/v2/repositories/paas/golang/_layers/sha256/d34bc98c277053d749016539968fbde53f0e095713988ccc780505b9c3d37187/link
208d0ff3-767d-4edc-ac3f-fb55689374cb.44103.1_files/docker/registry/v2/repositories/paas/golang/_manifests/revisions/sha256/3b746975638c2640b41de2f6669fb4a6d24d5c218c008b359d21148a580b2178/signatures/sha256/134a8ac27aa47d9ef953be3968d2c899cb1ed8efd7a3e4ce066abeba2c8a3b98/link
208d0ff3-767d-4edc-ac3f-fb55689374cb.44103.1_files/docker/registry/v2/repositories/paas/golang/_uploads/d51b6005-d7d2-4981-ad27-284914e21159/data
208d0ff3-767d-4edc-ac3f-fb55689374cb.44103.1_files/docker/registry/v2/repositories/paas/golang/_layers/sha256/8ecba0e9bd481f27b172d1a0ff04269981946aa1aaa91da3b2f41380031ed865/link
208d0ff3-767d-4edc-ac3f-fb55689374cb.44103.1_files/docker/registry/v2/repositories/paas/golang/_layers/sha256/5c90d4a2d1a8dfffd05ff2dd659923f0ca2d843b5e45d030e17abbcd06a11b5b/link

pull镜像

[root@gx-yun-084069 ~]# docker pull  paas/golang:1.6.2
Trying to pull repository registry.vclound.com/paas/golang ... 
1.6.2: Pulling from registry.vclound.com/paas/golang
5c90d4a2d1a8: Already exists 
ab30c63719b1: Already exists 
c6072700a242: Already exists 
0ffc1204e0ab: Already exists 
d8a921df8ce9: Already exists 
d34bc98c2770: Already exists 
Digest: sha256:3b746975638c2640b41de2f6669fb4a6d24d5c218c008b359d21148a580b2178
Status: Downloaded newer image for registry.vclound.com/paas/golang:1.6.2


2019-04-12 17:40:47 xx496146653 阅读数 554

创建swift api子用户
[ceph@ceph-admin ~]$ radosgw-admin subuser create --uid=radosgw --subuser=radosgw:swift --access=full
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
{
"user_id": "radosgw",
"display_name": "radosgw",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"auid": 0,
"subusers": [
{
"id": "radosgw:swift",
"permissions": "full-control"
}
],
"keys": [
{
"user": "radosgw",
"access_key": "Y326T07XWSCYAG6LCZ2P",
"secret_key": "toCHP1BlY5Dta5nWqySEBtQGjtZwOmUJM9DOMSsE"
}
],
"swift_keys": [
{
"user": "radosgw:swift",
"secret_key": "eCuvJmL2NbkgCAhGREDvYrtfDXRs064IbjIdwCtk"
}
],
"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,
"max_size_kb": -1,
"max_objects": -1
},
"temp_url_keys": []
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


安装swift api客户端(在node3上执行)
[root@ceph-node3 ~]# yum install python-pip -y
[root@ceph-node3 ~]# pip install --upgrade python-swiftclient

查看
[root@ceph-node3 ~]# swift -A http://10.34.44.93:8899/auth/1.0 -U radosgw:swift -K eCuvJmL2NbkgCAhGREDvYrtfDXRs064IbjIdwCtk list
first-bucket
新增
[root@ceph-node3 ~]# swift -A http://10.34.44.93:8899/auth/1.0 -U radosgw:swift -K eCuvJmL2NbkgCAhGREDvYrtfDXRs064IbjIdwCtk post second-bucket


[root@ceph-node3 ~]# s3cmd ls
2019-04-12 05:43 s3://first-bucket
2019-04-12 08:23 s3://second-bucket

 

书写文档不易,如果你觉得我写得可以打个赏呗

https://www.fageka.com/store/item/s/id/Yx6TZ1m0747.html

2017-07-28 09:15:53 qq_32524177 阅读数 4165

     

  Ceph andSwift: Why we are not fighting

                 
   原文:Ceph andSwift: Why weare not fighting

作者 :ChmouelBoudjnah

  翻译:BBSee[rolltion.zhang@foxmail.com]    

一下()中的内容均为译者加入的

   我刚刚从在香港举行的openstack峰会上回来。和往常一样,这次峰会上我和很多人进行了激烈的交流、听了听展示会,或者和大家一起展望一下彼此都热衷的一些软件的未来。

 
   在和不同的人交流的过程中我发现这样一个常见的问题:人们想知道是不是“ceph比swift更加优秀”。

 
   我从2008年被安排到Swift项目组,之前OpenStack甚至只是一个设想,到现在作为核心开发人员,很明显我的回答是有倾向性的。

 
   我可以理解当有可以作为更优选项的产品出现时,人们转而选择这个产品(的行为)。这是我们科技技术很正常的一种演变。我还记得当时,(让我们)追忆一下,Linux刚刚兴起的时候,我顽固地坚持结合我的Lynx和我的一些工具使用LInux终端,放弃X11系统,因为我真的看不到它的优势何在,现在我很高兴地使用者Mac
OS X系统。

 
  但是ceph和swift事实上并没有相互竞争:它们是两种不同的技术,每一种都有不同的设计目的。虽然这两者之间有一些重叠的特性,但是他们二者有着不同的应用场景并且能在同一次部署中相处的很融洽。

特性比较:

 
   从一个高水平的角度来看,这两种对象存储技术之间最主要的区别在于:

Ceph:

  • 起始于2006年
  • 开发语言:C
  • 强一致性
  • 块存储    
  • 对象存储

Swift:
   

  • 起始于2008年
  • 开发语言:Python
  • 最终一致性
  • 对象存储
  • 真正的大型公用云服务产品中使用 

 
   Ceph做了大量的事情,不仅仅是对象存储。ceph能作为一种开源的块存储(一种提供远程虚拟磁盘的方式)来使用,这正是人们被它所吸引的地方。Ceph在(块存储)这方面做的非常杰出,因此他似乎成为了一项部署OpenStack时非常受欢迎的块存储系统选项,总之,这是OpenStack和开源社区的一次双赢。

 
  Ceph之所以能实现块存储源自它的强一致性,确保在给客户端返回"OK"的响应之前,你要写入的所有数据都被写到了磁盘上。采用C开发使得ceph的性能最优化,与此同时,由于他的设计模式,使得客户端(Clients)能直接和存储服务器(OSDs)交互。

 
  共享文件系统的构建是一项尚未完成的工作,到目前为止(2013年)还没有为生产环境做好准备。但是,一旦它成功了,它将解决过去几十年人们努力尝试解决的困难又复杂的问题。

 
    另一方面,Swift,只做一件事,并且做得非常好。它唯一的追求就是做好对象存储并提供一种REST风格的api来访问它。它是最终一致性的。这意味着,当硬件环境发生故障时(这是一个集群不可避免的),swift会回退以提供高利用率的数据访问。Swift的最终一致性最有可能体现在当硬件出现故障时读取被覆盖写的对象时,以及查询一个在同时创建了很对象的container(swift容器)对象列表时。

 
   这种最终一致性也允许在跨度很广的地理空间上部署Swift集群。这不仅仅是“回放日志”式的复制,它更允许部署者针对不同region的同步或者异步复制进行集群配置。Swift的代理服务器们能够感知当前它们所处的是哪个region,这就允许当有新的数据被写入时部署者可以优化吞吐量或者数据的散布。

    使用python开发Swift对于部署者来说有巨大的优势,不仅仅是因为语言本身,而是因为它与能嵌入WSGI管道的灵活的中间插件更加契合。同时也可以非常轻松地将Swift插入一系列不同的认证系统,允许所有类型的中间件修改它的行为并且结合具体的功能。

 
   和Python相似的是,Swift拥有一个称之为"内置电池"的思想体系,你拥有所有类型的中间件做着不同的事情,使得Swift更可靠地替代S3。

 
   最后一个Swift的优势是它已被证实能在超大规模生产中、在大量不同的公共的云中运行并且运行非常得良好。

 
   另一方面,ceph实现对象存储的方式是通过它的radosgateway(对象网关)而与API无关,ceph拥有健壮的仿真S3的API,它没有全规模的PythonWSGI系统那样强大并且不支持模块化。将它作为网关的问题是必须始终模拟或者遵循Swift的API,但是它的核心API是定义良好的,稳定的并且向后兼容的,当然这不包括所有和Swift一起装配的中间件

使用场景

 
  如何你只能选择其中一种,并且你有块存储需求,你肯定会选择使用ceph。如果你只是对象存储这样的使用场景,那么我建议你使用使用Swift。

 
  话说回来,如果你是两者都想使用的那种应用场景,不过一些开发团队不太希望在不同的系统上管理两个不同的集群。如果你想在一些简单的应用场景使用S3
API或者Swift API,Rdosgw(Rados gateway
对象网关)能是一个非常不错的选择,但是这并不能为你提供一个功能完备的对象存储系统。另外一点值得考虑的是通过radosgw存储的对象无法从块存储系统获取,因为他们有着不同使用方式,他们将在不同的硬件上存放(通过ceph的智能模块化放置技术).

  到了最后,用户希望有选择的余地,同时,感谢RedHatGlusterteam(红帽主存储团队),Swift现在拥有了一个多后端系统,在那里你可以拥有一个不同的、高效支持ceph作为对象存储服务器的存储后端系统。

 
  目前我们还没有完全做到这一点(swift多后端系统嵌入ceph),Swift和Ceph的开发者们曾经一起讨论尝试找出如何嵌入,但是,最后,这将为终端用户提供最小管理的选择。

总结

   
  不要再认为Swift和Ceph是对手了。这两者都是优秀的、各有特定任务的开源项目。主要竞争是专有软件解决方案导致厂商锁定,Swift和Ceph强大的社区和大家热烈的讨论都是都是解决大多数挑战很好的解决方案。

 
   感谢Swiftstack、Rackspace和Inktank上的朋友们(还有我的同事们)查阅我的这次发帖。

     
     
     
                                                                                         

2019-09-06 15:56:22 u014706515 阅读数 555

基本原理科普:

       ceph对象存储组件radosgw原生支持swift接口,对接只是把openstack的权限认证配置到ceph里,创建endpoint时指向ceph rgw地址就可以了。

我们要做两件事儿

第一,安装ceph rgw。

        如果你是使用ceph deploy部署推荐看官方文档:

        https://docs.ceph.com/docs/mimic/install/install-ceph-gateway/

        如果你是手动部署的ceph,请往下看。

第二,安装python2-swiftclient,配置keystone认证,创建endpoint。

        官方文档:https://docs.ceph.com/docs/mimic/radosgw/keystone/

        懒得看英文的也请往下看。

 

笔者环境:openstack rocky aio,IP 192.168.0.1

ceph mimic 3节点,mon,osd均已正常启动,未安装rgw。IP ceph1:192.168.0.2,ceph2:192.168.0.3,ceph3:192.168.0.4

首先安装rgw:

安装rgw ,三个ceph节点上都执行

yum -y install ceph-radosgw

创建rgw需要的pool(根据环境调整pg和pgp数量),在ceph1上执行

pool=".rgw .rgw.root .rgw.control .rgw.gc .rgw.buckets .rgw.buckets.index .rgw.buckets.extra .log .intent-log .usage .users .users.email .users.swift .users.uid default.rgw.control default.rgw.data.root default.rgw.gc default.rgw.log"

PG_NUM=16

PGP_NUM=16

SIZE=3

for i in $pool

        do

        ceph osd pool create $i $PG_NUM

        ceph osd pool set $i size $SIZE

        done

for i in $pool

        do

        ceph osd pool set $i pgp_num $PGP_NUM

        done

在ceph1上创建keying,在ceph1上执行

cd /etc/ceph
sudo ceph-authtool --create-keyring /etc/ceph/ceph.client.radosgw.keyring
sudo chown ceph:ceph /etc/ceph/ceph.client.radosgw.keyring
sudo ceph-authtool /etc/ceph/ceph.client.radosgw.keyring -n client.rgw.ceph1 --gen-key
sudo ceph-authtool /etc/ceph/ceph.client.radosgw.keyring -n client.rgw.ceph2 --gen-key
sudo ceph-authtool /etc/ceph/ceph.client.radosgw.keyring -n client.rgw.ceph3 --gen-key
sudo ceph-authtool -n client.rgw.ceph1 --cap osd 'allow rwx' --cap mon 'allow rwx' /etc/ceph/ceph.client.radosgw.keyring
sudo ceph-authtool -n client.rgw.ceph2 --cap osd 'allow rwx' --cap mon 'allow rwx' /etc/ceph/ceph.client.radosgw.keyring
sudo ceph-authtool -n client.rgw.ceph3 --cap osd 'allow rwx' --cap mon 'allow rwx' /etc/ceph/ceph.client.radosgw.keyring
sudo ceph -k /etc/ceph/ceph.client.admin.keyring auth add client.rgw.ceph1 -i /etc/ceph/ceph.client.radosgw.keyring
sudo ceph -k /etc/ceph/ceph.client.admin.keyring auth add client.rgw.ceph2 -i /etc/ceph/ceph.client.radosgw.keyring
sudo ceph -k /etc/ceph/ceph.client.admin.keyring auth add client.rgw.ceph3 -i /etc/ceph/ceph.client.radosgw.keyring

将创建好的keying拷贝到其它两台ceph节点,在ceph1上执行

scp /etc/ceph/ceph.client.radosgw.keyring root@ceph2:/etc/ceph/ceph.client.radosgw.keyring
scp /etc/ceph/ceph.client.radosgw.keyring root@ceph3:/etc/ceph/ceph.client.radosgw.keyring 

追加ceph的配置项,在所有ceph节点执行

echo "
[client.rgw.ceph1]
host=ceph1
keyring=/etc/ceph/ceph.client.radosgw.keyring
log file=/var/log/radosgw/client.radosgw.gateway.log
rgw_frontends = civetweb port=8081
rgw keystone api version = 3
rgw keystone url = 192.168.0.1:5000   #keystone认证服务的地址
rgw keystone accepted roles = admin
rgw keystone token cache size = 500
rgw keystone revocation interval = 300
rgw keystone implicit tenants = true
rgw s3 auth use keystone = true
rgw keystone admin user = admin
rgw keystone admin password = 123456 #你的admin用户的密码
rgw keystone admin tenant = admin
rgw keystone admin domain = Default


[client.rgw.ceph2]
host=ceph2
keyring=/etc/ceph/ceph.client.radosgw.keyring
log file=/var/log/radosgw/client.radosgw.gateway.log
rgw_frontends = civetweb port=8081
rgw keystone api version = 3
rgw keystone url = 192.168.0.1:5000   #keystone认证服务的地址
rgw keystone accepted roles = admin
rgw keystone token cache size = 500
rgw keystone revocation interval = 300
rgw keystone implicit tenants = true
rgw s3 auth use keystone = true
rgw keystone admin user = admin
rgw keystone admin password = 123456 #你的admin用户的密码
rgw keystone admin tenant = admin
rgw keystone admin domain = Default


[client.rgw.ceph3]
host=ceph3
keyring=/etc/ceph/ceph.client.radosgw.keyring
log file=/var/log/radosgw/client.radosgw.gateway.log
rgw_frontends = civetweb port=8081
rgw keystone api version = 3
rgw keystone url = 192.168.0.1:5000   #keystone认证服务的地址
rgw keystone accepted roles = admin
rgw keystone token cache size = 500
rgw keystone revocation interval = 300
rgw keystone implicit tenants = true
rgw s3 auth use keystone = true
rgw keystone admin user = admin
rgw keystone admin password = 123456 #你的admin用户的密码
rgw keystone admin tenant = admin
rgw keystone admin domain = Default

">> /etc/ceph/ceph.conf

启动radosgw服务,在所有ceph节点执行

hostname=`hostname`
systemctl start ceph-radosgw@rgw.$hostname
systemctl enable ceph-radosgw@rgw.$hostname

检查rgw服务是否成功启动

netstat -ntlp|grep radosgw
tcp        0      0 0.0.0.0:8081            0.0.0.0:*               LISTEN      42166/radosgw     

创建openstack的endpoint,在openstack机器上执行。

openstack service create --name swift --description "OpenStack Object Storage" object-store

#注意,我这写的是ceph1的地址,所有swift请求都会发往ceph1,读者可以通过haproxy等负载均衡工具进行配置,使三个节点变成高可用环境
openstack endpoint create --region RegionOne object-store public "http://192.168.0.2:8081/swift/v1" 

openstack endpoint create --region RegionOne object-store internal "http://192.168.0.2:8081/swift/v1" 

openstack endpoint create --region RegionOne object-store admin "http://192.168.0.2:8081/swift/v1" 

理论上来讲这里就算成功了,测试一下,在openstack机器上执行

#导入环境变量
export OS_USERNAME=admin
export OS_PASSWORD=123456
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://192.168.0.1:5000/v3
export OS_IDENTITY_API_VERSION=3
#上传一个文件测试
swift upload testfile /var/log/messages
#查看上传的文件
swift list

最后,有遇到什么问题或者报错请留言,转载请注明出处,原创不易,谢谢配合。

2018-11-08 09:54:50 weixin_34258838 阅读数 0

在Ceph与Swift之间,存在一些孰优孰劣的争辩。Ceph在访问数据和存储信息方面提供了更大的灵活性,但这并不完全意味着它是一个比Swift更好的对象存储系统。

Swift和Ceph都提供对象存储,将数据分割成二进制对象并将其复制到存储中。使用Ceph和Swift,对象存储都是在Linux文件系统之上创建的。此外,Ceph和Swift都是在考虑可伸缩性的情况下构建的,因此可以很容易地根据需要添加存储节点。两者的不同之处主要在于:

面向不同需求的对象存储系统对比:Ceph与Swift

访问数据

Swift是由Rackspace开发的,目的是为该公司的云提供可扩展存储。因为它是基于云开发的,所以它的主要访问方法是通过RESTful API。应用程序可以直接对Swift寻址(绕过操作系统)并将数据提交给Swift存储。这在纯基于云的环境中非常有用,但它也使访问云外的快速存储变得更加复杂。

至于Ceph,从一开始,其开发人员就致力于使其成为一个比Swift更开放的对象存储系统。Ceph有四种访问方法:

·通过Rados网关访问Amazon S3兼容的RESTful API:这使得Ceph可以与Swift相媲美,也可以与Amazon S3云环境中的任何东西相媲美。

·CephFS:这是一个可移植操作系统接口兼容的文件系统,运行在任何Linux发行版上,所以操作系统可以直接访问Ceph存储。

·Rados Block Device (RBD): RBD是一个Linux内核级的块设备,允许用户像访问其他Linux块设备一样访问Ceph。

·ISCSI 网关:这是SUSE对Ceph项目的补充。它允许管理员在Ceph上运行iSCSI网关,将其转换为任何操作系统都可以访问的SAN文件。

因此在对比评估Ceph与Swift时,请记住,Ceph提供了更多访问对象存储系统的方法。正因如此,它比Swift更实用、更灵活。

访问存储信息

Ceph与Swift截然不同的另一个方面是客户端如何访问对象存储系统。在Swift中,客户端必须联系Swift网关,这会带来一些潜在的单点故障。为了解决这个问题,许多Swift环境为Swift网关实现了高可用性。

Ceph使用一个对象存储设备(OSD),运行在每个存储节点上运行。Ceph可以通过OSD获取关于存储拓扑的信息,以及在哪里收集二进制对象以访问原始数据。访问对象存储所需的另一个组件在客户机上运行,因此Ceph对存储的访问没有一个单独的入口点。这使得它比Swift更灵活。

关于用例

Ceph和Swift的组织方式存在着根本性的差异,但这并不意味着两者孰优孰劣。两者都是非常优秀的开源项目,被世界各地区的用户积极使用——出于不同的原因。Ceph在需要高度一致性的虚拟机、数据库和其他数据类型交互的单站点环境中表现良好,Swift更适合处理大量数据的大型环境,这种差异是两个对象存储系统如何在其复制算法中处理数据一致性的直接结果。

Ceph数据在整个集群中是强一致的,而Swift数据是最终一致的,它通过在软件层面引入一致性散列技术和数据冗余性,牺牲一定程度的数据一致性来达到高可用性和可伸缩性,在跨集群同步数据之前可能会需要一些时间。

所以总的来说,Ceph与Swift这两种对象存储系统,谁都不能说绝对优于另一种,因为它们服务于不同目的。

原文作者:Sander van Vugt 来源:TechTarget