玩转Docker Ceph集群及对象存储

2015/07/10 12:04
阅读数 562

【编者按】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

ea529580458e302ba7cea670c4e83bf7

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

8266b97e50d7e9908113559bb2df978b

配置必要的参数

9f09c8192c6e307380765b1827caa19b

等待运行成功

11d45d9f4fd4a298dac083ab9f5a700a

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

3feb2fc27ca218ddc4a4ec0a073ed888

自带webshell功能

a5bea48fdd155cbc8227543bcb76b182

登录方式如下

26fc090b56763d79a354c91e84d65697

创建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集群及对象存储

展开阅读全文
打赏
0
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部