Ceph 是一个开源软件存储平台,它在统一存储集群中提供对象、块和文件系统存储。 我第一次使用 Ceph 是在我 integrat将它与 OpenStack 集成时。 起初,我很困惑为什么要使用 Ceph,因为存储设备随处可见。 但在使用了三年多之后,该平台的稳定性和完整性一次又一次地证明了它的价值。
本文将向您展示如何使用 ceph-ansible (Ceph 的官方支持的 Ansible playbook) 安装 Ceph,并在 Raspberry Pi 集群中部署它。
所需材料
- 四台 Raspberry Pi 4B 4GB 型号
- 四张 32GB microSD 卡(启动操作系统)
- 四个带风扇和散热片的 Raspberry Pi 外壳(非常重要)
- 四个 Raspberry Pi 充电器
- 六个 32GB USB 闪存驱动器(用于 Ceph OSD 节点)
架构

(Aaron John Canlas, CC BY-SA 4.0)
关于配置
- 前端和后端网络都在同一个子网中
- 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 分钟后,您应该会看到此结果

(Aaron John Canlas, CC BY-SA 4.0)
后续步骤
之前,我 手动部署 了另一个 Raspberry Pi 集群中的 OpenStack 集群。 我希望将它与这个集群集成。 我也在研究使用 TripleO 进行部署。
Raspberry Pi、Ansible 和 OpenStack 的可能性是无穷无尽的。 开始您自己的实验,并在评论中告诉我进展情况。
评论已关闭。