人是一种以特殊方式特殊的动物。
怯者愤怒,却抽刃向更弱者。-- 鲁迅

本文介绍如何搭建 Ceph 分布式存储集群。如果对于 Ceph 基本架构还不了解的同学,请移步 Ceph 简介

测试环境说明:

存储节点: 3个节点,ceph1,ceph2,ceph3 ,挂载 3 块硬盘部署 3 个 OSD 节点
以 ceph1 节点充当部署(admin)节点,同时部署 ceph1 为 MON 节点
操作系统:Ubuntu server 18.04 LTS
Ceph 版本: 12.2.12 luminous (stable)
虚拟机工具: VirtualBox 6.2

1. 准备环境

首先安装好 VirtualBox 6.2,下载好 Ubuntu server 18.04 LTS

下载地址: https://ubuntu.com/download/server

(1)新建虚拟机,装好系统之后安装好 openssh-server 和 ntp 时间同步工具:

注意:以下所有的命令都是在 root 用户下执行的。
apt-get install -y openssh-server ntpdate python

Note: 这里之所以要安装 python 是因为在安装 ceph 的时候需要依赖 python

(2)编辑 hosts 文件,vim /etc/hosts,添加以下 host 配置:

192.168.2.201 ceph1
192.168.2.202 ceph2
192.168.2.203 ceph3
192.168.2.220 client

说明: 这里的 192.168.2.0 是我当前路由器设置的网段,你需要根据你自己的网络环境改成自己的网段。

(3)修改 apt 源,vim /etc/apt/sources.list,这里采用网易的源:

deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse

跟新软件源信息

apt-get update

(4)将当前虚拟机克隆 3 个,分别作为 ceph1, ceph2, ceph3 存储节点,而当前虚拟机则作为 client(客户端)。

(5)修改各个节点的 hostname,vim /etc/hostname,分别修改为 ceph1, ceph2, ceph3, client (这个非常重要,请仔细核对是否正确,否则在部署的时候会有很多莫名其妙的错误!!!)。 然后分别修改各个节点的 ip 分别为 201, 202, 203, 220。

(6)使用时间同步工具同步时间,这里使用阿里云的时间服务器更新

ntpdate ntp1.aliyun.com

所有节点都要执行,确保时间同步(这一点非常重要)

2. 安装 ceph-deploy(admin 节点)

根据我们上面的配置,选择 ceph1 节点作为 admin 节点,所以 ceph-deploy 需要安装在 ceph1 节点。

首先配置 key

wget -q -O- 'http://mirrors.163.com/ceph/keys/release.asc' | sudo apt-key add -
echo deb http://mirrors.163.com/ceph/debian-luminous/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
注意:上面的 luminous 是指你要安装的 ceph 发行版本,我们这里是选择的是 luminous,如果你需要更改其他版本,把 luminous 替换成其他版本就行了。

安装 ceph-deploy

apt-get install -y ceph-deploy

ceph-deploy 是 ceph 官方提供的部署工具,有了它我们就可以通过 admin 节点让部署命令在所有节点同步执行,不用 ssh 登录每个节点去安装 ceph 组件了。所以如无特殊说明,后面我们所有的操作都是在 admin 节点也就是 ceph1 节点执行

3. 创建可信连接(admin 节点)

为了使得 ceph-deploy 工具能够正常工作,我们需要创建 admin 节点到各个集群节点之间的可信连接,也就是免密码登录。

  1. 生成公钥,这个很简单,ssh-keygen + 一路回车。
  2. 拷贝公钥到各个节点。
    ssh-copy-id root@ceph1(hostname)
    ssh-copy-id root@ceph2
    ssh-copy-id root@ceph3
    ssh-copy-id root@client
    

4. 部署集群(admin节点)

(1)首先创建文件夹,以后生成的配置文件默认保存在此。

mkdir /etc/ceph 
cd /etc/ceph

(2)创建一个新的集群

ceph-deploy new ceph1

创建新的集群默认会生成三个文件,其中比较重要的是 ceph.conf,这里我们需要在 [global] 段加上集群的 public_network 配置

public_network = 192.168.2.0/24

192.168.2.0 为当前集群所在网段,这里必须修改成你自己的。当然你也可以添加其他配置,这里我们只是测试,所以使用默认配置。

(3)给所有的节点安装 ceph

ceph-deploy install ceph1 ceph2 ceph3

执行过程中我们可以看到类似如下日志:

Reading package lists...
[ceph2][INFO  ] Running command: env DEBIAN_FRONTEND=noninteractive DEBIAN_PRIORITY=critical apt-get --assume-yes -q --no-install-recommends install ceph ceph-osd ceph-mds ceph-mon radosgw
[ceph2][DEBUG ] Reading package lists...

通过 ceph-deploy 给各个节点把 ceph 相关的组件都安装上去了。相当于在各个节点上执行了:

apt-get install ceph ceph-osd ceph-mds ceph-mon radosgw

但是这些组件并不都是必需的。如果你要做对象存储,则需要安装 radosgw, 如果要使用 CephFS 则需要 ceph-mds, 如果你的系统内核不支持直接挂载 ceph 文件系统的话,你还需要安装 ceph-fuse 组件。

(4)部署 MON 监控节点,在当前部署节点初始化:

ceph-deploy mon create-initial

或者直接部署到指定的节点,比如节点 ceph1

ceph-deploy mon create ceph1

我们这里选择 ceph1 作为监控节点,当然你可以安装多个监控节点(如果你的节点数较多的话)。

到此,集群搭建完成,我们可以看下集群的状态:

root@ceph1:/etc/ceph# ceph -s
  cluster:
    id:     9e50ebd2-8abc-4609-a4f5-47949b5e777c
    health: HEALTH_OK
 
  services:
    mon: 1 daemons, quorum ceph1
    mgr: no daemons active
    osd: 0 osds: 0 up, 0 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   0 B used, 0 GiB avail
    pgs:    

我们可以到,集群虽然已经正常运行,但是没有任何 OSD,此时还不能存储任何数据,下一步我们就可以添加 OSD 节点了。

5. 添加 OSD 节点(admin节点)

集群默认可以添加无数个 OSD 节点(10000个),OSD 可以是磁盘也可以是分区,因为是虚拟机,所以直接添加裸盘。 这里我事先就为 ceph1,ceph2,ceph3 虚拟机节点各自添加了一个额外的磁盘设备。如果你没有添加的话,请自行添加。

添加 OSD 之前我们需要把磁盘先格式化:

ceph-deploy disk zap ceph1:/dev/sdb ceph3:/dev/sdb ceph3:/dev/sdb

然后创建 OSD 节点:

ceph-deploy osd create ceph1:/dev/sdb ceph2:/dev/sdb ceph3:/dev/sdb

6. 配置mgr(监控)服务

此时我们再运行 ceph -s 看下集群的状态:

root@ceph1:/etc/ceph# ceph -s
  cluster:
    id:     9e50ebd2-8abc-4609-a4f5-47949b5e777c
    health: HEALTH_OK
	        no active mgr
 
  services:
    mon: 1 daemons, quorum ceph1
    mgr: no daemons active
    osd: 3 osds: 3 up, 3 in
  
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   0 B used, 0 GiB avail
    pgs:    

可以看到,虽然集群的状态是 HEALTH_OK, 但是下面有个 no active mgr 警告,而且 data 中的 usage 容量也是 0。

这是因为在 luminous 版本中,ceph 默认需要安装 mgr 服务才能正常工作。

配置 mgr 服务,这里我还是配置在 ceph1 节点。

ceph-deploy mgr create ceph1

或者直接在 ceph1 节点上直接安装 ceph-mgr

apt-get install ceph-mgr
service ceph-mgr@ceph1 start

启动之后再执行 ceph -s 看看:

root@ceph1:/etc/ceph# ceph -s
  cluster:
    id:     9e50ebd2-8abc-4609-a4f5-47949b5e777c
    health: HEALTH_OK
 
  services:
    mon: 1 daemons, quorum ceph1
    mgr: no daemons active
    osd: 3 osds: 3 up, 3 in
  
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   3.0 GiB used, 26.7 GiB / 29.7 GiB  avail
    pgs:    

现在集群的状态才是真的正常了,我一共创建了 3 个 OSD,每个 10GB。

我们顺便设置 admin 节点,并同步配置到各个节点,以备下次使用:

ceph-deploy admin ceph1 ceph2 ceph3

下一篇我文章我们开始使用 ceph 来创建块设备,提供给客户端使用。