在 Raspberry Pi 集群中部署 Ceph

使用 ceph-ansible 安装 Ceph 存储,并在 Raspberry Pi 集群中部署它。
114 位读者喜欢这篇文章。
Vector, generic Raspberry Pi board

Ceph 是一个开源软件存储平台,它在统一存储集群中提供对象、块和文件系统存储。 我第一次使用 Ceph 是在我 integrat将它与 OpenStack 集成时。 起初,我很困惑为什么要使用 Ceph,因为存储设备随处可见。 但在使用了三年多之后,该平台的稳定性和完整性一次又一次地证明了它的价值。

本文将向您展示如何使用 ceph-ansible (Ceph 的官方支持的 Ansible playbook) 安装 Ceph,并在 Raspberry Pi 集群中部署它。

所需材料

  1. 四台 Raspberry Pi 4B 4GB 型号
  2. 四张 32GB microSD 卡(启动操作系统)
  3. 四个带风扇和散热片的 Raspberry Pi 外壳(非常重要)
  4. 四个 Raspberry Pi 充电器
  5. 六个 32GB USB 闪存驱动器(用于 Ceph OSD 节点)

架构

关于配置

  • 前端和后端网络都在同一个子网中
  • Ceph Monitor 软件使用具有 4GB RAM 的 Raspberry Pi 4B
  • Ceph OSD 节点使用相同的 Raspberry Pi 型号,但带有两个用于 OSD 磁盘的 USB 闪存驱动器

使用 ceph-ansible 部署 Ceph

使用 Ceph 的 Ansible 仓库可以使部署过程顺利而简单。

1. 将 SSH 密钥复制到所有服务器

我在所有服务器上都有一个名为 cephadmin 的通用用户(在这种情况下,每个 Raspberry Pi 都是一个服务器)。 cephadmin 用户配置了无密码 sudo 以简化操作。

使用 ssh-keygen 生成密钥后,使用 ssh-copy-id 部署所有密钥。

我使用 Bash for 循环,因为我使用一致且递增的主机名

$ for i in {0..3}; \
  do ssh-copy-id cephadmin@rpi4b4-$i; \
done

您需要在每个服务器上接受并输入您的密码,但您可以使用 expect 自动化此过程。

2. 克隆 ceph-ansible 并安装所需组件

安装 Git 以克隆仓库

$ sudo yum install git -y

克隆 ceph-ansible 仓库

$ git clone https://github.com/ceph/ceph-ansible.git
$ cd ceph-ansible/

我正在使用 CentOS 7 的 AArch64 构建,因此在继续之前必须安装一些必需的软件包。

首先,Python pip

$ sudo yum install python3-pip -y

然后是 ceph-ansible 需要的软件包

$ sudo yum install python3-devel libffi-devel openssl-devel -y

最后,是 ceph-ansible 需要的 requirements

$ pip3 install -r requirements.txt --user

我收到了这个错误

You are linking against OpenSSL 1.0.2, which is no longer supported by the OpenSSL project. 
To use this version of cryptography you need to upgrade to a newer version of OpenSSL. For 
this version only you can also set the environment variable 
CRYPTOGRAPHY_ALLOW_OPENSSL_102 to allow OpenSSL 1.0.2.

这可能与体系结构有关,因为我无法在 CentOS 7 虚拟机中重现该错误。

对于部署,将 CRYPTOGRAPHY_ALLOW_OPENSSL_102 导出为 True,以便 Ansible 可以运行

$ export CRYPTOGRAPHY_ALLOW_OPENSSL_102=True

3. 配置 ceph-ansible 以进行部署

现在您可以使用 ceph-ansible 部署 Ceph 了。

site.yml.sample 复制到 site.yml

$ mv site.yml.sample site.yml

group_vars 目录中创建 all.yml

$ cat << EOF >> group_vars/all.yml
ceph_origin: repository
ceph_repository: community
ceph_repository_type: cdn
ceph_stable_release: nautilus
monitor_interface: wlan0
public_network: "192.168.100.0/24"
cluster_network: "192.168.100.0/24"
dashboard_enabled: false
configure_firewall: false
EOF

group_vars 目录中创建 osds.yml

$ cat << EOF >> group_vars/all.yml
osd_scenario: collocated
devices:
  - /dev/sda
- /dev/sdb
EOF

创建一个 inventory 文件

$ cat << EOF >> inventory
[mons]
rpi4b4-0

[osds]
rpi4b4-1
rpi4b4-2
rpi4b4-3
EOF

在撰写本文时,ceph-ansible 仓库中存在一个错误(根据此 bug ticket)。 您可以通过编辑角色中的第 85 行和 86 行来缓解此错误

    - (wait_for_all_osds_up.stdout | from_json)["osdmap"]["num_osds"] | int > 0
    - (wait_for_all_osds_up.stdout | from_json)["osdmap"]["num_osds"] == (wait_for_all_osds_up.stdout | from_json)["osdmap"]["num_up_osds"]

4. 部署 Ceph

使用您的 inventory 文件运行 Ansible playbook

$ ansible-playbook -i inventory site.yml

经过 15-20 分钟后,您应该会看到此结果

后续步骤

之前,我 手动部署 了另一个 Raspberry Pi 集群中的 OpenStack 集群。 我希望将它与这个集群集成。 我也在研究使用 TripleO 进行部署。

Raspberry Pi、Ansible 和 OpenStack 的可能性是无穷无尽的。 开始您自己的实验,并在评论中告诉我进展情况。

接下来要读什么
标签
AJ Canlas
AJ Canlas 是 Micro-D International 菲律宾分公司的高级解决方案咨询经理,负责公共和私有云基础设施和计划。 他的主要优势在于 Linux、OpenStack、Ansible 自动化和容器化。

评论已关闭。

Creative Commons License本作品采用 Creative Commons Attribution-Share Alike 4.0 International License 授权。
© . All rights reserved.