初识开源分布式存储Ceph

数据存储是信息化建设和数字化企业的基石之一。随着软件技术的发展,高可靠 和高性能的存储不再意味着昂贵和专有系统。Ceph就是这样一款优秀的开源分布式 存储方案。

本文针对阅读了Ceph的一些文档资料,对Ceph有概念性的认识,希望通过简易的本地环境来动手尝试的同学。如果还没有了解Ceph的基本概念,请先通读一下参考资料的前两项。

安装

基本上按照Ceph官方的快速安装手册,手册地址为:

http://docs.ceph.com/docs/master/start/

上述手册对多种Linux环境提供了关键说明。本文的特点是更加具体、直观、可以一步一步 参照完成整个过程。

安装前的准备

首先,我们需要多台Linux服务器。在本文中,我使用的是本地电脑上安装的虚拟机。

我的桌面电脑是Windows,有16G内存,安装了虚拟机软件VMware或者VirtualBox后, 就可以安装Linux虚拟机,我使用的Linux版本是Ubuntu 16.04.1 LTS。如果你的电脑 内存不足,可以在云平台(比如阿里云等)上同一个VPC内创建最小规格的Linux虚拟机。

先安装第一台虚拟机, 虚拟机参数设定如下:

  1. 命名为node1.027yunwei.com。
  2. 添加一块数据盘, 用作osd磁盘。
  3. 使用统一的操作用户名称,比如我常用的名称是wanggan。
  4. 不要使用dhcp,使用固定的IP地址,避免IP地址变化带来的混乱。
  5. 将操作系统的源换成国内的源,以加速安装包的下载。
  6. 安装 openssh-server以便于远程ssh访问。
  7. 安装 python (Python2)。因为ceph deploy工具默认Linux上都有python2。 但Ubuntu 16.04.1上默认是Python3。

接下来克隆该虚拟机,创建另外四台虚拟机,并相应地更新其名称和IP地址:

  1. ceph-deploy.027yunwei.com,
  2. node1.027yunwei.com,
  3. node2.027yunwei.com,
  4. node3.027yunwei.com,
  5. test.027yunwei.com.

我们将在ceph-deploy节点上来远程访问和安装相应的chef包到节点node1, node2, node3. 并在test节点上执行一些客户端测试命令。

安装 ceph storage cluster

安装ceph-deploy

我们使用网易的镜像来安装jewel版本的Ceph。

echo deb http://mirrors.163.com/ceph/debian-jewel xenial main | sudo tee /etc/apt/sources.list.d/ceph.list

sudo apt update && sudo apt install ceph-deploy

创建 cluster

在安装的过程中会生成配置文件,因此最好新建一个目录,免得混淆。

mkdir my-cluster
cd my-cluster
ceph-deploy new node1 node2 node3
ceph-deploy install ceph-deploy node1 node2 node3

上述命令会创建一个名称为ceph的cluster,并在 ceph-deploy, node1, node2, node3上安装ceph软件包,但并不会启动服务。

mon节点作为cluster信息存放节点,需要先创建:

ceph-deploy mon create-initial

接下来,我们准备osd节点。osd节点上需要有磁盘可用,也可以使用目录, 但我们这里使用磁盘。

# Node1
ceph-deploy osd prepare node1:/dev/sdb
ceph-deploy osd activate node1:/dev/sdb
# Node2
ceph-deploy osd prepare node2:/dev/sdb
ceph-deploy osd activate node2:/dev/sdb
# Node3
ceph-deploy osd prepare node3:/dev/sdb
ceph-deploy osd activate node3:/dev/sdb

至此,一个最简单的ceph集群搭建完成。

验证cluster

为了验证cluster,我们可以查看cluster的状态,然后简单使用cluster。

查看cluster状态的命令为 ceph status

ceph status

上述命令的输出结果中应该为health,active+clean

客户端操作

Ceph提供的ceph命令属于cluster管理命令行客户端,rados是对象存储命令行客户端,rbd是 块设备命令行客户端。通过这些客户端,我们可以快速尝试与Ceph集群的交互。

rados 对象操作

先创建pool, 然后创建对象,再存、取对象

$ rados mkpool sample1
$ echo "Hello data" > file1.txt
$ rados -p sample1 create file1
$ rados -p sample1 put file1 ./file1.txt
$ rados -p sample1 get file1 /tmp/get-file1.txt && cat /tmp/get-file1.txt

上面的操作中,我们首先创建了名为sample1的pool,再准备了一个测试文件file1.txt, 接下来 创建了名为file1的对象,并将文件file1.txt存放到该对象中, 最后我们从对象file1中取出内容,写入到另外一个文件/tmp/get-file1.txt中, 并查看其内容。

更多使用方式请通过查看man rados

rbd命令

rbd可以用于创建和管理磁盘块设备。创建了块设备以后,就可以像普通的磁盘一样使用。

$ rbd create -s 10240 --image-format 1 disk1
$ sudo rbd map disk1
$ rbd showmapped
id pool image snap device
0  rbd  disk1  -    /dev/rbd0
$ sudo mkfs.ext4 /dev/rbd0
$ mkdir test_disk
$ sudo mount /dev/rbd0 test_disk
$ sudo echo "hello" > test_disk/hello.txt

rbd create

创建一个块设备image,需要指定其大小 -s, image-format 可以为 1 或者 2. 2的feature更多,但需要内核版本支持才行。在我的测试环境中,需要使用旧的格式1.

rbd map

将快设备映射为本地的设备. 该命令执行成功后会显示出所映射的本地设备名称, 也可以通过 rbd showmapped 来查看.

一旦映射成为本地磁盘设备以后,就可以像操作普通磁盘那样去格式化、加载、写入文件了。