您的位置:首页 > 运维架构 > Docker

玩转Docker Ceph集群及对象存储

2015-07-10 12:04 633 查看
【编者按】Ceph是一种集高性能、高可靠性和高可扩展性为一体的统一的、分布式的存储系统。“统一的”意味着Ceph可以一套存储系统同时提供对象存储、块存储和文件系统存储三种功能,以便在满足不同应用需求的前提下简化部署和运维。而“分布式的”在Ceph系统中则意味着真正的无中心结构和没有理论上限的系统规模可扩展性。在实践当中,Ceph可以被部署于上千台服务器上。截至2013年3月初,Ceph在生产环境下部署的最大规模系统为Dreamhost公司的对象存储业务集群,其管理的物理存储容量为3PB。

本文将教你如何用Docker搭建Ceph集群,以及如何在灵雀云更快速的构建一个对象存储节点。通过Docker搭建Ceph集群,不仅省去了***的麻烦,而且方便了Ceph的版本升级。作者吴健,来自上海Hypers 国内顶尖的大数据分析公司,参加过“Docker巨好玩”镜像构建赛,并获得一等奖。以下为原文:

因为有人提出了这个想法,我之前已经成功实践过这些实验,自己也就把百度和Google不到的私房菜贡献出来,只有一个要求,希望大家互相帮助,不要自吹自擂就行,多多分享。

希望大家互相扶持,互相帮助,与DockOne&OSchina还有所有的开源社区一起推动国内的Docker商用和技术能力。

用Docker搭建Ceph非常简单,只需要几条命令就可以搞定,甚至比Ceph出的ceph-deploy还方便,也无需***获得软件包。

首先是Ceph集群的搭建:
这里首先介绍下Ceph的架构,Ceph的底层是RADOS,它的意思是“A reliable, autonomous, distributed object storage”。 RADOS由两个组件组成:

OSD: Object Storage Device,提供存储资源。


Monitor:维护整个Ceph集群的全局状态。



我分别将这两个组件做成了Docker镜像:osd和mon。
我的部署环境是
Disk free > 30G
Ceph 0.94.1 hammer
OS Ubuntu 14.04.2
Kernel 4.0.5
Filesystem overlayfs
eth0 IPADDR=192.168.1.100


下载镜像mon和osd

灵雀云提供了Docker镜像的存储服务,可以方便、快速地下载镜像。
[root@ubuntu ~]# docker pull index.alauda.cn/georce/mon:hammer[root@ubuntu ~]# docker pull index.alauda.cn/georce/osd:hammer


一条命令搭建mon

[root@ubuntu ~]# docker run -itd --name=mon --net=host -e MON_NAME=mymon -e MON_IP=192.168.1.100 -v /etc/ceph:/etc/ceph index.alauda.cn/georce/mon:hammer


查看mon运行日志

[root@ubuntu ~]# docker logs -f mon2015-06-15 13:48:38.414494 7fd43f5db700 1 mon.mymon@0(leader).osd e1 e1: 0 osds: 0 up, 0 in
2015-06-15 13:48:38.416236 7fd43f5db700 0 mon.mymon@0(leader).osd e1 crush map has features 1107558400, adjusting msgr requires
2015-06-15 13:48:38.416306 7fd43f5db700 0 mon.mymon@0(leader).osd e1 crush map has features 1107558400, adjusting msgr requires
2015-06-15 13:48:38.416391 7fd43f5db700 0 mon.mymon@0(leader).osd e1 crush map has features 1107558400, adjusting msgr requires
2015-06-15 13:48:38.416479 7fd43f5db700 0 mon.mymon@0(leader).osd e1 crush map has features 1107558400, adjusting msgr requires
2015-06-15 13:48:38.416712 7fd43f5db700 1 mon.mymon@0(leader).paxosservice(auth 1..1) refresh upgraded, format 0 -> 1
2015-06-15 13:48:38.418924 7fd43f5db700 0 log_channel(cluster) log [INF] : mdsmap e1: 0/0/0 up
2015-06-15 13:48:38.423753 7fd43f5db700 0 log_channel(cluster) log [INF] : osdmap e1: 0 osds: 0 up, 0 in
2015-06-15 13:48:38.428045 7fd43f5db700 0 log_channel(cluster) log [INF] : pgmap v2: 64 pgs: 64 creating; 0 bytes data, 0 kB used, 0 kB / 0 kB avail


查看mon生成的集群配置文件

[root@ubuntu ~]# ls /etc/ceph[root@ubuntu ~]# ceph.client.admin.keyring ceph.conf ceph.mon.keyring monmap


更改集群配置文件

[root@ubuntu ~]# vi ceph.conf[global]
fsid = 4efc5ee7-8982-4bf4-808b-15372862fb78 #这个要看你生成的 别抄我的
mon initial members = mymon
mon host = 192.168.1.100
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
osd crush chooseleaf type = 0
osd journal size = 100
osd pool default pg num = 8
osd pool default pgp num = 8
osd pool default size = 1
public network = 192.168.1.0/24
cluster network = 192.168.1.0/24

[root@ubuntu ~]# docker restart mon

两条命令创建osd

[root@ubuntu ~]# docker exec mon ceph osd create0

如果不知道上面的0是什么,我解释下 ceph osd 0 /var/lib/ceph/osd/ceph-0

创建osd0

[root@ubuntu ~]# docker run -itd --name=osd0 --net=host -e CLUSTER=ceph -e WEIGHT=1.0 -e MON_NAME=mymon -e MON_IP=192.168.1.100 -v /etc/ceph:/etc/ceph -v /opt/osd/0:/var/lib/ceph/osd/ceph-0 index.alauda.cn/georce/osd:hammer

查看ceph群集状态

[root@ubuntu ~]# docker exec -it mon ceph -scluster 4efc5ee7-8982-4bf4-808b-15372862fb78
health HEALTH_OK
monmap e1: 1 mons at {mymon=192.168.1.100:6789/0}
election epoch 2, quorum 0 mymon
osdmap e5: 1 osds: 1 up, 1 in
pgmap v7: 64 pgs, 1 pools, 0 bytes data, 0 objects
3584 MB used, 42028 MB / 48077 MB avail
64 active+clean

下文将为大家介绍如何在灵雀云,快速搭建一个对象存储系统,其中ceph-demo是我做的一个Ceph镜像。

注册并登录灵雀云,浏览镜像—》搜索 ceph-demo






选择georce/ceph-demo,创建服务






配置必要的参数






等待运行成功





服务的URL则为对象存储的API地址




自带webshell功能




登录方式如下




创建S3用户

root@426debfd7cb7:/opt# 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": "MBFIV44FH7FIV96UM124",
"secret_key": "idSCzjsrHNDXPZdLK2cgOpE2UkM6Jx5lhdMM9DvY"
}
],
"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": []
}

创建对象存储桶

root@426debfd7cb7:/opt# sed -i s@archive.ubuntu.com@mirrors.aliyun.com@g /etc/apt/sources.listroot@426debfd7cb7:/opt# apt-get updateroot@426debfd7cb7:/opt# apt-get install vim -yroot@426debfd7cb7:/opt# apt-get install python-pip -yroot@426debfd7cb7:/opt# pip install botoroot@426debfd7cb7:/opt# vim s3.pyimport boto
import boto.s3.connection
access_key = 'MBFIV44FH7FIV96UM124'
secret_key = 'idSCzjsrHNDXPZdLK2cgOpE2UkM6Jx5lhdMM9DvY'
conn = boto.connect_s3(
aws_access_key_id = access_key,
aws_secret_access_key = secret_key,
host = 'ceph-smoak.myalauda.cn',
is_secure=False,
calling_format = boto.s3.connection.OrdinaryCallingFormat(),
)
bucket = conn.create_bucket('georce')
for bucket in conn.get_all_buckets():
    print "{name}\t{created}".format(
            name = bucket.name,
            created = bucket.creation_date,
)

root@426debfd7cb7:/opt# chmod 755 s3.pyroot@426debfd7cb7:/opt# python s3.pygeorce  2015-06-21T16:56:07.000Z

测试成功


原文链接:在灵雀云玩转Docker Ceph集群及对象存储
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: