使用 ceph-ansible 安装 Ceph 存储,并将其部署在树莓派集群中。
Ceph 是一个开源软件存储平台,它在统一的存储集群中提供对象、块和文件系统存储。我第一次使用 Ceph 是在 OpenStack 中集成它的时候。一开始,我很困惑,既然存储设备广泛存在,为什么要使用 Ceph。但在使用了三年多之后,这个平台的稳定性和完整性一再证明了它的价值。
本文将告诉你如何使用 ceph-ansible(Ceph 官方支持的 Ansible playbook)安装 Ceph,并将其部署在树莓派集群中。
材料:
架构:
Project architecture
关于配置:
使用 Ceph 的 Ansible 仓库可以让部署变得顺畅简单
我在所有的服务器上都有一个名为 cephadmin
的共同用户(在此背景下,每个树莓派都是一台服务器)。cephadmin
用户配置了无密码的 sudo
,以方便工作。
使用 ssh-keygen
生成密钥后,使用 ssh-copy-id
部署所有密钥。
我使用了一个 Bash for
循环,因为我使用的是一致并递增的主机名:
$ for i in {0..3}; \
do ssh-copy-id cephadmin@rpi4b4-$i; \
done
你需要每个接受并输入密码,但你可以用 expect
来自动完成。
安装 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 需要的依赖:
$ 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
现在你可以使用 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(根据这个 bug 工单)。你可以通过编辑角色的第 85 行和第 86 行来减轻这个 bug。
- (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"]
用你的 inventory
文件运行 Ansible 剧本:
$ ansible-playbook -i inventory site.yml
15-20 分钟后,你应该看到这个结果:
Ceph deployment
之前,我在另一个树莓派集群中手动部署了一个 OpenStack 集群。我希望能将其与这个集群整合在一起。我也在研究用 TripleO 部署。
树莓派、Ansible 和 OpenStack 的可能性是无穷的。
使用get遇到的问题: 1.问题一. 缓存:当每次访问的url相同,客户端直接读取本地...
3 月 23 日消息在 Windows 10 预览版中,微软在逐步将控制面板功能转向现代 设置...
fileup.htm html head title 千花飞舞之上传单个文件 /title /head body form en...
在上篇文章给大家介绍了 使用openSpeDiv方法实现Ecshop登录弹窗框效果 ,大家点...
详解Spring mvc ant path的使用方法 概要: 任何一个WEB都需要解决URL与请求处理...
场景: 我们比较常用的父子组件之间的交互方式: 父组件通过props将数据流入到子...
在前端开发中,有一个非常好用的工具,Visual Studio Code,简称VS code。都不用...
快速傅里叶变换简介 F a s t ? F o u r i e r ? T r a n s f o r m Fast \ Fouri...
今天我们来深挖一下mysql的复制机制到底有哪一些,以及binlog和relay-log的结构...
前提 1. Cookie 是脆弱的。cookie 容易被窃取和受到垮站脚本的攻击,我们必须接...