开源实践分享:Ceph bluestore部署实践

Ceph bluestore部署

首先为大家分享Ceph bluestore具体该如何部署,使用环境如下
? 单节点
? CentOS 7.4
? 使用 ceph-deploy 进行部署
准备 centos 7.4 系统的机器,并配置好 ssh 的无密码登录。

安装 ceph-deploy
yum install?https://download.ceph.com/rpm-luminous/el7/noarch/ceph-deploy-2.0.0-0.noarch.rpm
数据 ceph 安装包
mkdir ceph-install
cd ceph-install
ceph-deploy new node1
把如下内容加入到 ceph.conf 里面,把默认的副本数据调成1。
[global]
osd pool default size = 1
osd pool default min size = 1
安装 ceph 包
ceph-deploy install --release luminous node2
初始化 mon
ceph-deploy mon create-initial
ceph-deploy admin node1
这时 ceph 已经可以访问了
$ ceph -s
? cluster:
? ? id: ? ? 5b2f0020-fc24-44de-a6c9-a88efdc5074f
? health: HEALTH_OK
? services:
? ? mon: 1 daemons, quorum node1
? ? mgr: no daemons active
? ? osd: 0 osds: 0 up, 0 in
? data:
? ? pools: ? 0 pools, 0 pgs
? ? objects: 0 objects, 0 bytes
? ? usage: ? 0 kB used, 0 kB / 0 kB avail
? ? pgs:

接下来要部署 ceph mgr, 这个组件在 Luminous 里面是必装组件
ceph-deploy ?mgr create node1

接下来部署 ceph osd, 现在推荐使用 ceph-volume lvm 来管理磁盘。所有安装的时候 ,就需要准备一个 lv 出来。为了测试 bluestore 的 block.db 和 block.wal, 我们来做三个lv 分别用于单 osd 。

$ pv create /dev/sdb
? Physical volume "/dev/sdb" successfully created.
$ vgcreate ?ceph-pool /dev/sdb
? Volume group "ceph-pool" successfully created
$ lvcreate -n osd0.wal -L 1G ceph-pool
? Logical volume "osd0.wal" created.
$ lvcreate -n osd0.db -L 1G ceph-pool
? Logical volume "osd0.db" created.
$ lvcreate -n osd0 -l 100%FREE ceph-pool
? Logical volume "osd0" created.

接下来,就可以创建 OSD 了。
ceph-deploy ?osd create \
? ? --data ceph-pool/osd0 \
? ? --block-db ceph-pool/osd0.db \
? ? --block-wal ceph-pool/osd0.wal \
? ? --bluestore node1

这样,一个最小的集群就建好了
$ ceph -s
? cluster:
? ? id: ? ? 5b2f0020-fc24-44de-a6c9-a88efdc5074f
? ? health: HEALTH_OK
? services:
? ? mon: 1 daemons, quorum node1
? ? mgr: node2(active)
? ? osd: 1 osds: 1 up, 1 in
? data:
? ? pools: ? 0 pools, 0 pgs
? ? objects: 0 objects, 0 bytes
? usage: ? 2048 MB used, 37883 MB / 39931 MB avail
? ? pgs:
$ ls -alh /var/lib/ceph/osd/ceph-0/
total 52K
drwxrwxrwt. 2 ceph ceph 340 Apr ?4 16:27 .
drwxr-x---. 3 ceph ceph ?20 Apr ?4 16:27 ..
-rw-r--r--. 1 ceph ceph 183 Apr ?4 16:27 activate.monmap
lrwxrwxrwx. 1 ceph ceph ?19 Apr ?4 16:27 block -> /dev/ceph-pool/osd0
lrwxrwxrwx. 1 root root ?23 Apr ?4 16:27 block.db -> /dev/ceph-pool/osd0.wal
lrwxrwxrwx. 1 root root ?23 Apr ?4 16:27 block.wal -> /dev/ceph-pool/osd0.wa
-rw-r--r--. 1 ceph ceph ? 2 Apr ?4 16:27 bluefs
-rw-r--r--. 1 ceph ceph ?37 Apr ?4 16:27 ceph_fsid
-rw-r--r--. 1 ceph ceph ?37 Apr ?4 16:27 fsid
-rw-------. 1 ceph ceph ?55 Apr ?4 16:27 keyring
-rw-r--r--. 1 ceph ceph ? 8 Apr ?4 16:27 kv_backend
-rw-r--r--. 1 ceph ceph ?21 Apr ?4 16:27 magic
-rw-r--r--. 1 ceph ceph ? 4 Apr ?4 16:27 mkfs_done
-rw-r--r--. 1 ceph ceph ?41 Apr ?4 16:27 osd_key
-rw-r--r--. 1 ceph ceph ?24 Apr ?4 16:27 path_block.db
-rw-r--r--. 1 ceph ceph ? 6 Apr ?4 16:27 ready
-rw-r--r--. 1 ceph ceph ?10 Apr ?4 16:27 type
-rw-r--r--. 1 ceph ceph ? 2 Apr ?4 16:27 whoami

bluestore & rocksdb & ceph-volume

ceph 的组件多采用插件的机制,包括后端存储,KV 数据库,磁盘管理等。各组件之间可以灵活的组合。

基于后端存储包括 filestore, kvstore,memstore 和新的 bluestore。 Ceph Luminous 引用了 bluestore 的存储类型,不依赖文件系统,直接管理物理磁盘,相比filestore, 在 io 写入的时候路径更短,也避免了二次写入的问题,性能会更加好。

KV 存储主要包括 LevelDB, MemDB 和新的 RocksDB。 RocksDB 是 Facebook 基于 LevelDB 开发的 key-value 数据,并对闪存(flash)有更友好的优化。

磁盘管理之前只有个 ceph-disk, 现在新引入了 ceph-volume。基于 lvm 来管理磁盘,并会逐渐废弃掉 ceph-disk。

其中比较有意思的是 RocksDB 的实现,RocksDB 原本只基于文件系统的。但是得益于它本身的灵活性,bluestore 实现了一套 RocksDB 的 Env 接口,还在 BlueStore 上面实现了一套 BlueFS 的接口与 BluestoreEnv 对接。使得 RocksDB 可以存储在 BlueStore 上面。

wal & db 的大小问题

在 ceph bluestore 的情况下,wal 是 RocksDB 的 write-ahead log, 相当于之前的 journal 数据,db 是 RocksDB 的 metadata 信息。在磁盘选择原则是 block.wal > block.db > block。当然所有的数据也可以放到同一块盘上。

默认情况下, wal 和 db 的大小分别是 512 MB 和 1GB, 包括 Sage Weil 的 PPT 里面也是这样标明的【注释1请添加链接描述】。现在没有一个好的理论值,好像和 ceph 本身承载的数据类型有关系。更多讨论可以参看【注释2请添加链接描述】。

值得注意的是,如果所有的数据都在单块盘上,那是没有必要指定 wal & db 的大小的。如果 wal & db 是在不同的盘上,由于 wal/db 一般都会分的比较小,是有满的可能性的。如果满了,这些数据会迁移到下一个快的盘上(wal - db - main)。所以最少不会因为数据满了,而造成无法写入【注释3请添加链接描述】。

使用 bluestore 时的 osd 分区

如果是使用的 ceph-disk 管理磁盘,他会建立一个 100MB 的分区,来存放 keyring / whoami 这些信息,这和之前的逻辑是一样的。

如果使用 ceph-volume 管理磁盘,/var/lib/ceph/osd/ceph-0 分区会从 tmpfs 挂载过来(也就是内存)

$ mount | grep osd
tmpfs on /var/lib/ceph/osd/ceph-0 type tmpfs (rw,relatime,seclabel)
$ ls -Alh /var/lib/ceph/osd/ceph-0
lrwxrwxrwx. 1 ceph ceph 19 Apr ?7 21:36 block -> /dev/ceph-pool/osd0
lrwxrwxrwx. 1 root root 22 Apr ?7 21:36 block.db -> /dev/ceph-pool/osd0.db
lrwxrwxrwx. 1 root root 23 Apr ?7 21:36 block.wal -> /dev/ceph-pool/osd0.wal
-rw-------. 1 ceph ceph 37 Apr ?7 21:36 ceph_fsid
-rw-------. 1 ceph ceph 37 Apr ?7 21:36 fsid
-rw-------. 1 ceph ceph 55 Apr ?7 21:36 keyring
-rw-------. 1 ceph ceph ?6 Apr ?7 21:36 ready
-rw-------. 1 ceph ceph 10 Apr ?7 21:36 type
-rw-------. 1 ceph ceph ?2 Apr ?7 21:36 whoami

至于目录中的这些文件则是从 bluestore 盘一开始的BDEV_LABEL_BLOCK_SIZE=4096位置读取过来的。通过以下命令,可以把所有的 label 打印出来:
$ ceph-bluestore-tool ?show-label --path /var/lib/ceph/osd/ceph-0
{
? ? "/var/lib/ceph/osd/ceph-0/block": {
? ? ? ? "osd_uuid": "c349b2ba-690f-4a36-b6f6-2cc0d0839f29",
? ? ? ? "size": 2147483648,
? ? ? ? "btime": "2018-04-04 10:22:25.216117",
? ? ? ? "description": "main",
? ? ? ? "bluefs": "1",
? ? ? ? "ceph_fsid": "14941be9-c327-4a17-8b86-be50ee2f962e",
? ? ? ? "kv_backend": "rocksdb",
? ? ? ? "magic": "ceph osd volume v026",
? ? ? ? "mkfs_done": "yes",
? ? ? ? "osd_key": "AQDgNsRaVtsRIBAA6pmOf7y2GBufyE83nHwVvg==",
? ? ? ? "ready": "ready",
? ? ? ? "whoami": "0"
? ? }
}

相关代码参看
? ceph-volume activate
? ceph-bluestore-tool prime-osd-dir

使用ceph-volume, 不管 store 使用的是 filestore 还是 bluestore, 都会把一些 tag 存在 lvm 上面, 可以使用以下命令查看(做了格式化处理)

$lvs -o lv_tags /dev/mapper/ceph--pool-osd
LV Tags
ceph.block_device=/dev/ceph-pool/osd
ceph.block_uuid=dRW0FO-KiVS-vBjB-PE42-RnSd-mL04-FRQmAz
ceph.cephx_lockbox_secret=
ceph.cluster_fsid=14941be9-c327-4a17-8b86-be50ee2f962e
ceph.cluster_name=ceph
ceph.crush_device_class=None
ceph.encrypted=0
ceph.osd_fsid=c349b2ba-690f-4a36-b6f6-2cc0d0839f29
ceph.osd_id=0
ceph.type=block

osd 的盘是如何挂载的

ceph 依赖 systemd 来管理挂载,不需要配置 /etc/fstab 文件。在初始化 osd 的时候, ceph 会 enable 一个 [email protected] 服务,其中 x 的格式如 {lvm|simple}-{osd id}-{osd uuid}, 这个服务会在系统的local-fs.target 组里面,当系统挂载本地盘的时候,会自动挂载上。

这个 [email protected] 定义如下:

$systemctl cat [email protected]
# /usr/lib/systemd/system/[email protected]
[Unit]
Description=Ceph Volume activation: %i
After=local-fs.target
Wants=local-fs.target
[Service]
Type=oneshot
KillMode=none
Environment=CEPH_VOLUME_TIMEOUT=10000
ExecStart=/bin/sh -c ‘timeout $CEPH_VOLUME_TIMEOUT /usr/sbin/ceph-volume-systemd %i‘
TimeoutSec=0
[Install]
WantedBy=multi-user.target

可以看到, 他是把参数传递给了 ceph-volume-systemd 命令, 而这个命令又把参数解析后,传给了 ceph-volume 命令,最后执行的命令是:
ceph-volume lvm trigger {osd id} {osd uuid]

需要ceph-volume-systemd 这个命令的原因应该是systemd只能传一个参数。

这个 trigger 会调用 ceph-volume lvm activate 命令,去准备相对应挂载及里面的数据初始化。

最后, ceph-volume lvm activate 会调用 ceph-bluestore-tool pirme-osd-dir 命令来初始化里面的数据。

其他

ceph osd purge
ceph Limunous 新加了一个 ceph osd purge 命令,很好用,可以一个命令,把某个 osd 相关的信息都清除掉。包括
? osd
? crush rule
? auth key

ceph-disk lvm
ceph-disk 应试不支持 lvm , 参见 :
http://tracker.ceph.com/issues/5461
不过 kolla 是否支持,可以验证下, 因为 kolla 的脚本里面不依赖 ceph-disk

参考链接
http://www.sysnote.org/2016/08/19/ceph-bluestore/
https://ceph.com/community/new-luminous-bluestore/
http://liyichao.github.io/posts/ceph-bluestore-%E5%9F%BA%E6%9C%AC%E5%8E%9F%E7%90%86.html

关于九州云99Cloud

九州云(99Cloud.Inc)成立于2012年,是中国第一家从事OpenStack和相关开源服务的专业公司。公司成立六年,秉承“开源 · 赋能变革”的理念,已经从单一的OpenStack产品提供商,发展成为涵盖云核心、云运营、云运维和云安全等多个领域的开源软件和服务提供商。九州云已支持了国家电网、×××、中国银联、中国移动、中国电信、中国联通、中国资源卫星、中航信(航旅纵横)、eBay、国际陆港集团、中国人寿、万达信息、东风汽车、诺基亚等重量级客户。在2018年最新的Queen发行版排名中,九州云在核心模块贡献跃居全球第四,中国第二,其中在容器部署Kolla项目、NFV编排Tacker项目等重量级项目上贡献全球第一。

原文地址:http://blog.51cto.com/99cloud/2119884

时间: 2024-10-02 07:33:18

开源实践分享:Ceph bluestore部署实践的相关文章

京东、宅急送的微服务实践分享(下)| 架构师小组交流会

架构师小组交流会是由国内知名公司技术专家参与的技术交流会,每期选择一个时下最热门的技术话题进行实践经验分享. 第一期:来自沪江.滴滴.蘑菇街.扇贝架构师的 Docker 实践分享 第二期:来自滴滴.微博.唯品会.魅族.点评关于高可用架构的实践分享 第三期:京东.宅急送的微服务实践分享(上)第三期小组交流会邀请到了国内电商领头羊京东.宅急送技术负责人,在上篇京东.宅急送的微服务实践分享(上)中他们介绍了各自产品的微服务实践,本次他们就 API 网关的设计.服务的 Docker 化.服务测试.持续集

WOT干货大放送:大数据架构发展趋势及探索实践分享

WOT大数据处理技术分会场,PingCAP CTO黄东旭.易观智库CTO郭炜.Mob开发者服务平台技术副总监林荣波.宜信技术研发中心高级架构师王东及商助科技(99Click)顾问总监郑泉五位讲师,分别针对时下热门的HTAP数据库TiDB.去ETL化的IOTA架构.数据工厂架构.实时敏捷大数据理念实践.基于场景的大数据营销等话题,展开实践分享. 作者:查士加来源:51CTO 2018年5月18-19日,由51CTO主办的全球软件与运维技术峰会在北京召开.来自全球企业的技术精英汇聚北京,畅谈软件技术

宜信敏捷数据中台建设实践|分享实录

内容来源:宜信技术学院第2期技术沙龙-线上直播|宜信敏捷数据中台建设实践 分享嘉宾:宜信数据中台平台团队负责人 卢山巍 导读:宜信于2017年推出了一系列大数据开源工具,包括大家熟悉的DBus.Wormhole.Moonbox.Davinci等,在技术社区内得到了广泛关注和好评.这些工具是如何在宜信内部应用的?它们和宜信数据中台是怎样的关系?又是如何驱动各种日常数据业务场景的? 本次分享对这些问题进行了回答,同时重点分享了宜信敏捷数据中台的设计.架构以及应用场景,提出一种敏捷数据中台的建设思路,

数据中台:宜信敏捷数据中台建设实践|分享实录

内容来源:宜信技术学院第2期技术沙龙-线上直播|宜信敏捷数据中台建设实践 分享嘉宾:宜信数据中台平台团队负责人 卢山巍 导读:宜信于2017年推出了一系列大数据开源工具,包括大家熟悉的DBus.Wormhole.Moonbox.Davinci等,在技术社区内得到了广泛关注和好评.这些工具是如何在宜信内部应用的?它们和宜信数据中台是怎样的关系?又是如何驱动各种日常数据业务场景的? 本次分享对这些问题进行了回答,同时重点分享了宜信敏捷数据中台的设计.架构以及应用场景,提出一种敏捷数据中台的建设思路,

唯品会、滴滴、沪江架构师,关于微服务粒度、高可用、持续交互的实践分享交流(下)

架构师小组交流会:每期选择一个时下最热门的技术话题进行实践经验分享. 本期小组交流会邀请到了沪江黄凯.唯品会郑明华.滴滴赵伟.七牛云肖勤,对微服务粒度.高可用.持续交互展开了交流. 本期接着上期唯品会.滴滴.沪江架构师,关于微服务粒度.高可用.持续交互的实践分享交流(上)进行了交流. 第一轮:话题交流 滴滴赵伟:在整个服务,从单体服务到微服务的演进过程当中,如何去影响业务的这种正常发展? 唯品会郑明华:从单体服务到微服务的改造,有两种方式,一种是小打小闹,每次稍微改一点,这个时间会非常长,有时候

打造云上代码交付链_CodePipeline实践分享

原文链接 摘要: 在2017在线技术峰会--首届阿里巴巴研发效能嘉年华上,来自阿里云飞天研发部的工程师莫源分享了<打造云上代码交付链,CodePipeline实践分享>.他在云计算和云平台.持续集成流程.DevOps的基础上,详细分享了Alibaba Cloud CodePipeline优于Jenkins的性能和实践. 在2017在线技术峰会--首届阿里巴巴研发效能嘉年华上,来自阿里云飞天研发部的工程师莫源分享了<打造云上代码交付链,CodePipeline实践分享>.他在云计算和

微信后台异步消息队列的优化升级实践分享

1.引言 MQ 异步消息队列是微信后台自研的重要组件,广泛应用在各种业务场景中,为业务提供解耦.缓冲.异步化等能力.本文分享了该组件2.0版本的功能特点及优化实践,希望能为类似业务(比如移动端IM系统等)的消息队列设计提供一定的参考. 2.关于分享者 廖文鑫,2013年加入腾讯,从事微信后台基础功能及架构的开发和运营,先后参与了消息通知推送系统.任务队列组件.春晚摇红包活动等项目,在海量分布式高性能系统方面有丰富的经验. 3.背景介绍 微信后台给件 MQ 1.0 发布之初,基本满足了一般业务场景

Spring Boot Tomcat 容器化部署实践与总结

在平时的工作和学习中经常会构建简单的web应用程序.如果只是HelloWorld级别的程序,使用传统的Spring+SpringMVC框架搭建得话会将大部分的时间花费在搭建框架本身上面,比如引入SpringMVC,配置DispatcheherServlet等.并且这些配置文件都差不多,重复这些劳动似乎意义不大.所以使用Springboot框架来搭建简单的应用程序显得十分的便捷和高效. 前两天在工作中需要一个用于测试文件下载的简单web程序,条件是使用Tomcat Docker Image作为载体

DCOS实践分享(3):基于Mesos 和 Docker 企业级移动应用实践分享

2016年1月24日 8:00—19:00 北京万豪酒店(东城区建国门南大街7号) @Container大会是由国内容器社区DockOne组织的专为一线开发者和运维工程师设计的顶级容器技术会议,会议强调实践和交流,话题设置围绕容器.运维.云计算等技术领域,力求全方位.多角度为参会者解读容器技术. 在容器技术大会上,我分享了<基于Mesos 和 Docker 企业级移动应用实践分享> 下载链接 http://download.csdn.net/detail/popsuper1982/954493