• 简介
    • Ceph 基本组件
  • 准备节点
  • 预备工作
    • 配置 root 登录
    • 修改 hosts 文件
    • 配置 SSH 免密登录
  • 开始安装
    • 安装 Ceph 和 ceph-deploy
    • 创建文件夹
    • 初始化 ceph
    • 修改 Ceph 配置文件
    • 激活 Mon 节点
    • 创建 OSD 节点
    • 拷贝配置
  • 验证安装结果
  • 使用 ceph 服务
    • 分区格式化
  • 释放资源

    简介

    Ceph 是一个分布式存储系统,本指南将介绍如何在 Ubuntu 系统部署一个节点数为 2 的 Ceph (v10.2.10) 存储服务端集群。本指南仅供测试 KubeSphere 存储服务端的搭建,正式环境搭建 Ceph 集群请参考 Ceph 官方文档。

    Ceph 基本组件

    Ceph 主要有三个基本进程:

    • OSD 用于集群中所有数据与对象的存储,处理集群数据的复制、恢复、回填、再均衡,并向其他osd守护进程发送心跳,然后向 Monitor 提供一些监控信息。

    • Monitor 监控整个集群的状态,维护集群的 cluster MAP 二进制表,保证集群数据的一致性。

    • MDS (可选) 为 Ceph 文件系统提供元数据计算、缓存与同步。MDS 进程并不是必须的进程,只有需要使用 CephFS 时,才需要配置 MDS 节点。

    准备节点

    主机规格

    Hostname IP OS CPU RAM Device
    ceph1 172.20.1.7 Ubuntu 16.04.4 4 Core 4 GB /dev/vda 100 GiB
    ceph2 172.20.1.8 Ubuntu 16.04.4 4 Core 4 GB /dev/vda 100 GiB

    集群架构

    1. +--------------+ +--------------+
    2. | | | |
    3. | ceph1 |_______________| ceph2 |
    4. | MONITOR,OSD | | OSD |
    5. | | | |
    6. +--------------+ +--------------+

    注:

    • ceph1 作为集群的管理主机,用来执行安装任务。
    • 如需创建更大容量的 Ceph 存储服务端,可创建更大容量主机磁盘或挂载大容量磁盘至主机并挂载至 ceph1 的 /osd1 和 ceph2 的 /osd2 文件夹。
    • 两个节点的 Hostname 需要与主机规格的列表中一致,因为后续步骤的命令行中有匹配到 Hostname,若与以上列表不一致请注意在后续的命令中对应修改成实际的 Hostname。

    预备工作

    配置 root 登录

    1、参考如下步骤分别为 ceph1 和 ceph2 配置 root 用户登录:

    • 1.1. ubuntu 账户登录主机后切换 root 用户:
    1. ubuntu@ceph1:~$ sudo -i
    2. [sudo] password for ubuntu:
    3. root@ceph1:~#
    • 1.2. 设置 root 用户登录密钥:
    1. root@ceph1:~# passwd
    • 同上,在 ceph2 修改 root 密码。

    修改 hosts 文件

    2、参考如下步骤修改 ceph1 和 ceph2 的 hosts 文件:

    1. root@ceph1:~# vim /etc/hosts
    2. 127.0.0.1 localhost
    3. # The following lines are desirable for IPv6 capable hosts
    4. ::1 localhost ip6-localhost ip6-loopback
    5. ff02::1 ip6-allnodes
    6. ff02::2 ip6-allrouters
    7. # hostname loopback address
    8. 172.20.1.7 ceph1
    9. 172.20.1.8 ceph2
    • 同上,在 ceph2 执行以上命令并修改 hosts。

    配置 SSH 免密登录

    3、以下为 ceph1 的 root 用户配置无密码登录至 ceph1 与 ceph2。

    • 3.1. 创建密钥,提示 “Enter passphrase” 时,直接回车,口令即为空:
    1. root@ceph1:~# ssh-keygen
    • 3.2. 拷贝密钥到两个个 Ceph 节点,按照提示输入密钥:
    1. root@ceph1:~# ssh-copy-id root@ceph1
    2. ...
    3. root@ceph1:~# ssh-copy-id root@ceph2
    4. ...
    • 3.3. 验证免密登录,即 ceph1 的 root 用户无需输入密码可以登录 ceph1 和 ceph2:
    1. root@ceph1:~# ssh root@ceph1
    2. root@ceph1:~# ssh root@ceph2

    开始安装

    安装 Ceph 和 ceph-deploy

    4、Ceph 官方推出了一个用 python 写的工具 cpeh-deploy,可以很大程度地简化 Ceph 集群的配置过程,参考如下步骤为 ceph1 和 ceph2 安装 Ceph 和 ceph-deploy:

    1. root@ceph1:~# apt-get update
    2. root@ceph1:~# apt-get install -y ceph ceph-deploy
    • 同上,在 ceph2 执行以上命令。

    创建文件夹

    5、参考如下步骤为 ceph1 和 ceph2 创建文件夹。

    • 5.1. 在 ceph1 创建文件夹存放初始化配置:
    1. root@ceph1:~# mkdir -p /root/cluster
    2. root@ceph1:~# rm -f /root/cluster/*
    • 5.2. 分别在 ceph1 和 ceph2 存放 ceph 数据:
    1. root@ceph1:~# mkdir -p /osd1 & rm -rf /osd1/*
    2. root@ceph1:~# chown ceph:ceph /osd1
    1. root@ceph2:~# mkdir -p /osd2 & rm -rf /osd2/*
    2. root@ceph2:~# chown ceph:ceph /osd2
    • 5.3. 在 ceph1 创建 ceph 文件夹:
    1. root@ceph1:~# mkdir -p /var/run/ceph/
    2. root@ceph1:~# chown ceph:ceph /var/run/ceph/
    • 同上,在 ceph2 执行以上命令创建 ceph 文件夹。

    初始化 ceph

    6、执行以下命令在 ceph1 节点初始化 ceph:

    1. root@ceph1:~# cd /root/cluster
    2. root@ceph1:~/cluster# ceph-deploy new ceph1
    • 查看各文件夹内容:
    1. root@ceph1:~/cluster# ls
    2. ceph-deploy-ceph.log ceph.conf ceph.mon.keyring
    3. root@ceph1:~/cluster# ls /etc/ceph/
    4. rbdmap
    5. root@ceph1:~/cluster# ls /var/run/ceph/

    修改 Ceph 配置文件

    7、在 ceph1 配置 ceph.conf,添加以下参数:

    1. root@ceph1:~/cluster# vim ceph.conf
    2. [global]
    3. ···
    4. ···
    5. osd pool default size = 2
    6. osd crush chooseleaf type = 0
    7. osd max object name len = 256
    8. osd journal size = 128

    激活 Mon 节点

    8、Mon 节点监控着整个 Ceph 集群的状态信息,监听于 TCP 的 6789 端口。每一个 Ceph 集群中至少要有一个 Mon 节点,如下在 ceph1 激活 Monitor:

    1. root@ceph1:~/cluster# ceph-deploy mon create-initial
    2. ...
    3. [ceph_deploy.gatherkeys][DEBUG ] Got ceph.bootstrap-rgw.keyring key from ceph1.

    创建 OSD 节点

    9、OSD 是强一致性的分布式存储,用于集群中所有数据与对象的存储,如下在 ceph1 为集群中两个节点创建 OSD:

    1. root@ceph1:~/cluster# ceph-deploy osd prepare ceph1:/osd1 ceph2:/osd2
    2. ...
    3. [ceph_deploy.osd][DEBUG ] Host ceph1 is now ready for osd use.
    4. ...
    5. [ceph_deploy.osd][DEBUG ] Host ceph2 is now ready for osd use.
    • 启动 OSD 节点:
    1. root@ceph1:~/cluster# ceph-deploy osd activate ceph1:/osd1 ceph2:/osd2

    拷贝配置

    10、拷贝配置到 ceph1 和 ceph2:

    1. root@ceph1:~/cluster# ceph-deploy admin ceph1 ceph2
    1. root@ceph1:~/cluster# chmod +r /etc/ceph/ceph.client.admin.keyring
    2. root@ceph2:~/cluster# chmod +r /etc/ceph/ceph.client.admin.keyring

    验证安装结果

    11、至此,一个简单的 Ceph 存储服务集群搭建就完成了,接下来查看安装的 Ceph 版本和状态信息。

    • 11.1. 查看 Ceph 版本:
    1. root@ceph1:~/cluster# ceph -v
    2. ceph version 10.2.10 (5dc1e4c05cb68dbf62ae6fce3f0700e4654fdbbe)
    • 11.2. 在两个节点检查 ceph 状态,可以使用 ceph –s 查看,如果是 health 显示 HEALTH_OK 状态说明配置成功。

    使用 ceph 服务

    12、首先,需要创建 rbd image,image 是 Ceph 块设备中的磁盘映像文件,可使用 rbd create ... 命令创建指定大小的映像。

    • 12.1. 此处在 ceph1 以创建 foo 为例:
    1. root@ceph1:~/cluster# rbd create foo --size 4096 --pool rbd --image-format=1
    2. rbd: image format 1 is deprecated
    • 12.2. 检查 rbd image:
    1. root@ceph1:~/cluster# rbd ls
    2. foo
    • 12.3. 在 ceph1 把 foo image 映射到内核:
    1. root@ceph1:~/cluster# rbd map foo
    2. /dev/rbd0
    • 12.4. 检查挂载状态:
    1. root@ceph1:~/cluster# fdisk -l
    2. ...
    3. Disk /dev/rbd0: 4 GiB, 4294967296 bytes, 8388608 sectors
    4. Units: sectors of 1 * 512 = 512 bytes
    5. Sector size (logical/physical): 512 bytes / 512 bytes
    6. I/O size (minimum/optimal): 4194304 bytes / 4194304 bytes

    分区格式化

    13、将 foo image 格式化为 ext4 格式的文件系统:

    1. root@ceph1:~/cluster# mkfs.ext4 /dev/rbd0
    • 13.1. 创建文件夹,然后挂载至目标文件夹:
    1. root@ceph1:~/cluster# mkdir -p /mnt/rbd
    2. root@ceph1:~/cluster# mount /dev/rbd0 /mnt/rbd
    • 13.2 在 ceph1 检查挂载结果:
    1. root@ceph1:~/cluster# df -ah
    2. ...
    3. /dev/rbd0 3.9G 8.0M 3.6G 1% /mnt/rbd
    1. root@ceph1:~/cluster# ls /mnt/rbd/
    2. lost+found

    释放资源

    14、注意,在使用完毕之后,可参考如下步骤卸载和删除不需要的资源。

    • 14.1. 参考如下将文件系统从文件中卸载:
    1. root@ceph1:~/cluster# umount /mnt/rbd
    • 14.2. 检查卸载结果:
    1. root@ceph1:~/cluster# df -ah
    2. ...
    • 14.3. 卸载 rbd image:
    1. root@ceph1:~/cluster# rbd unmap foo
    • 14.4. 检查卸载结果:
    1. root@ceph1:~/cluster# fdisk -l
    2. Disk /dev/vda: 100 GiB, 107374182400 bytes, 209715200 sectors
    3. Units: sectors of 1 * 512 = 512 bytes
    4. Sector size (logical/physical): 512 bytes / 512 bytes
    5. I/O size (minimum/optimal): 512 bytes / 512 bytes
    6. Disklabel type: dos
    7. Disk identifier: 0x5735896b
    8. Device Boot Start End Sectors Size Id Type
    9. /dev/vda1 * 2048 209713247 209711200 100G 83 Linux
    10. Disk /dev/vdb: 2 GiB, 2147483648 bytes, 4194304 sectors
    11. Units: sectors of 1 * 512 = 512 bytes
    12. Sector size (logical/physical): 512 bytes / 512 bytes
    13. I/O size (minimum/optimal): 512 bytes / 512 bytes
    • 14.5. 删除 rbd image:
    1. root@ceph1:~/cluster# rbd remove foo
    2. Removing image: 100% complete...done.