::: motto 鲁迅
怯者愤怒,却抽刃向更弱者。
:::
本文介绍如何搭建 Ceph 分布式存储集群。如果对于 Ceph 基本架构还不了解的同学,请移步 Ceph 简介。
::: tip 测试环境说明:
- 存储节点: 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 时间同步工具:
Note: 以下所有的命令都是在 root 用户下执行的。
1 | apt-get install -y openssh-server ntpdate python |
Note: 这里之所以要安装
python
是因为在安装 ceph 的时候需要依赖python
。
(2)编辑 hosts 文件,vim /etc/hosts
,添加以下 host 配置:
1 | 192.168.2.201 ceph1 |
说明: 这里的
192.168.2.0
是我当前路由器设置的网段,你需要根据你自己的网络环境改成自己的网段。
(3)修改 apt 源,vim /etc/apt/sources.list
,这里采用网易的源:
1 | deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse |
跟新软件源信息
1 | apt-get update |
(4)将当前虚拟机克隆 3 个,分别作为 ceph1, ceph2, ceph3 存储节点,而当前虚拟机则作为 client(客户端)。
(5)修改各个节点的 hostname,vim /etc/hostname
,分别修改为 ceph1, ceph2, ceph3, client
(这个非常重要,请仔细核对是否正确,否则在部署的时候会有很多莫名其妙的错误!!!)。
然后分别修改各个节点的 ip 分别为 201, 202, 203, 220。
(6)使用时间同步工具同步时间,这里使用阿里云的时间服务器更新
1 | ntpdate ntp1.aliyun.com |
所有节点都要执行,确保时间同步(这一点非常重要)
2. 安装 ceph-deploy(admin 节点)
根据我们上面的配置,选择 ceph1 节点作为 admin 节点,所以 ceph-deploy
需要安装在 ceph1 节点。
首先配置 key
1 | wget -q -O- 'http://mirrors.163.com/ceph/keys/release.asc' | sudo apt-key add - |
Note: 上面的 luminous 是指你要安装的 ceph 发行版本,我们这里是选择的是 luminous,如果你需要更改其他版本,把 luminous 替换成其他版本就行了。
安装 ceph-deploy
1 | apt-get install -y ceph-deploy |
ceph-deploy 是 ceph 官方提供的部署工具,有了它我们就可以通过 admin 节点让部署命令在所有节点同步执行,不用 ssh 登录每个节点去安装
ceph 组件了。所以如无特殊说明,后面我们所有的操作都是在 admin 节点也就是 ceph1 节点执行。
3. 创建可信连接(admin 节点)
为了使得 ceph-deploy
工具能够正常工作,我们需要创建 admin 节点到各个集群节点之间的可信连接,也就是免密码登录。
- 生成公钥,这个很简单,
ssh-keygen
+ 一路回车。 - 拷贝公钥到各个节点。
1
2
3
4ssh-copy-id root@ceph1(hostname)
ssh-copy-id root@ceph2
ssh-copy-id root@ceph3
ssh-copy-id root@client
4. 部署集群(admin节点)
(1)首先创建文件夹,以后生成的配置文件默认保存在此。
1 | mkdir /etc/ceph |
(2)创建一个新的集群
1 | ceph-deploy new ceph1 |
创建新的集群默认会生成三个文件,其中比较重要的是 ceph.conf
,这里我们需要在 [global]
段加上集群的 public_network
配置
1 | public_network = 192.168.2.0/24 |
192.168.2.0
为当前集群所在网段,这里必须修改成你自己的。当然你也可以添加其他配置,这里我们只是测试,所以使用默认配置。
(3)给所有的节点安装 ceph
1 | ceph-deploy install ceph1 ceph2 ceph3 |
执行过程中我们可以看到类似如下日志:
1 | Reading package lists... |
通过 ceph-deploy 给各个节点把 ceph 相关的组件都安装上去了。相当于在各个节点上执行了:
1 | apt-get install ceph ceph-osd ceph-mds ceph-mon radosgw |
但是这些组件并不都是必需的。如果你要做对象存储,则需要安装 radosgw
,
如果要使用 CephFS 则需要 ceph-mds
, 如果你的系统内核不支持直接挂载 ceph 文件系统的话,你还需要安装 ceph-fuse
组件。
(4)部署 MON 监控节点,在当前部署节点初始化:
1 | ceph-deploy mon create-initial |
或者直接部署到指定的节点,比如节点 ceph1
1 | ceph-deploy mon create ceph1 |
我们这里选择 ceph1 作为监控节点,当然你可以安装多个监控节点(如果你的节点数较多的话)。
到此,集群搭建完成,我们可以看下集群的状态:
1 | root@ceph1:/etc/ceph# ceph -s |
我们可以到,集群虽然已经正常运行,但是没有任何 OSD,此时还不能存储任何数据,下一步我们就可以添加 OSD 节点了。
5. 添加 OSD 节点(admin节点)
集群默认可以添加无数个 OSD 节点(10000个),OSD 可以是磁盘也可以是分区,因为是虚拟机,所以直接添加裸盘。
这里我事先就为 ceph1,ceph2,ceph3 虚拟机节点各自添加了一个额外的磁盘设备。如果你没有添加的话,请自行添加。
添加 OSD 之前我们需要把磁盘先格式化:
1 | ceph-deploy disk zap ceph1:/dev/sdb ceph3:/dev/sdb ceph3:/dev/sdb |
然后创建 OSD 节点:
1 | ceph-deploy osd create ceph1:/dev/sdb ceph2:/dev/sdb ceph3:/dev/sdb |
6. 配置mgr(监控)服务
此时我们再运行 ceph -s
看下集群的状态:
1 | root@ceph1:/etc/ceph# ceph -s |
可以看到,虽然集群的状态是 HEALTH_OK
, 但是下面有个 no active mgr
警告,而且 data 中的 usage
容量也是 0。
这是因为在 luminous 版本中,ceph 默认需要安装 mgr 服务才能正常工作。
配置 mgr 服务,这里我还是配置在 ceph1 节点。
1 | ceph-deploy mgr create ceph1 |
或者直接在 ceph1 节点上直接安装 ceph-mgr
1 | apt-get install ceph-mgr |
启动之后再执行 ceph -s
看看:
1 | root@ceph1:/etc/ceph# ceph -s |
现在集群的状态才是真的正常了,我一共创建了 3 个 OSD,每个 10GB。
我们顺便设置 admin 节点,并同步配置到各个节点,以备下次使用:
1 | ceph-deploy admin ceph1 ceph2 ceph3 |
下一篇我文章我们开始使用 ceph 来创建块设备,提供给客户端使用。