在樹莓派集群中部署Ceph
使用 ceph-ansible 安裝 Ceph 存儲(chǔ),并將其部署在樹莓派集群中。
Ceph 是一個(gè)開源軟件存儲(chǔ)平臺(tái),它在統(tǒng)一的存儲(chǔ)集群中提供對(duì)象、塊和文件系統(tǒng)存儲(chǔ)。我第一次使用 Ceph 是在 OpenStack 中集成它的時(shí)候。一開始,我很困惑,既然存儲(chǔ)設(shè)備廣泛存在,為什么要使用 Ceph。但在使用了三年多之后,這個(gè)平臺(tái)的穩(wěn)定性和完整性一再證明了它的價(jià)值。
本文將告訴你如何使用 ceph-ansible(Ceph 官方支持的 Ansible playbook)安裝 Ceph,并將其部署在樹莓派集群中。
材料:
- 樹莓派 4B 4GB 型號(hào)四臺(tái)。
- 四張 32GB 的 microSD 卡(用于啟動(dòng)操作系統(tǒng))
- 四個(gè)樹莓派外殼,帶風(fēng)扇和散熱片(非常重要)
- 四個(gè)樹莓派充電器
- 6 個(gè) 32GB U 盤(用于 Ceph OSD 節(jié)點(diǎn))
架構(gòu):
Project architecture
關(guān)于配置:
- 前端和后端網(wǎng)絡(luò)都在同一個(gè)子網(wǎng)中
- Ceph Monitor 軟件使用 4GB 內(nèi)存的樹莓派 4B。
- Ceph OSD 節(jié)點(diǎn)使用相同的樹莓派型號(hào),但有兩個(gè) U 盤用于 OSD 磁盤
使用 ceph-ansible 部署 Ceph
使用 Ceph 的 Ansible 倉(cāng)庫(kù)可以讓部署變得順暢簡(jiǎn)單
1、復(fù)制 ssh 密鑰到所有服務(wù)器
我在所有的服務(wù)器上都有一個(gè)名為 cephadmin 的共同用戶(在此背景下,每個(gè)樹莓派都是一臺(tái)服務(wù)器)。cephadmin 用戶配置了無(wú)密碼的 sudo,以方便工作。
使用 ssh-keygen 生成密鑰后,使用 ssh-copy-id 部署所有密鑰。
我使用了一個(gè) Bash for 循環(huán),因?yàn)槲沂褂玫氖且恢虏⑦f增的主機(jī)名:
$ for i in {0..3}; \do ssh-copy-id cephadmin@rpi4b4-$i; \done
你需要每個(gè)接受并輸入密碼,但你可以用 expect 來(lái)自動(dòng)完成。
2、克隆 ceph-ansible 并安裝依賴
安裝 Git 來(lái)克隆倉(cāng)庫(kù):
$ sudo yum install git -y
克隆 ceph-ansible 倉(cāng)庫(kù):
$ git clone https://github.com/ceph/ceph-ansible.git$ cd ceph-ansible/
我使用的是 CentOS 7 的 AArch64 構(gòu)建,所以在繼續(xù)之前,我必須安裝一些所需的包。
首先安裝 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
我收到了這個(gè)錯(cuò)誤:
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. Forthis version only you can also set the environment variableCRYPTOGRAPHY_ALLOW_OPENSSL_102 to allow OpenSSL 1.0.2.
這可能與架構(gòu)有關(guān),因?yàn)槲覠o(wú)法在 CentOS 7 虛擬機(jī)中復(fù)現(xiàn)該錯(cuò)誤。
部署時(shí),將 CRYPTOGRAPHY_ALLOW_OPENSSL_102 導(dǎo)出為 True,這樣 Ansible 就可以運(yùn)行了。
$ export CRYPTOGRAPHY_ALLOW_OPENSSL_102=True
3、配置 ceph-ansible 進(jìn)行部署
現(xiàn)在你可以使用 ceph-ansible 部署 Ceph 了。
復(fù)制 site.yml.sample 到 site.yml:
$ mv site.yml.sample site.yml
在 group_vars 目錄下創(chuàng)建 all.yml:
$ cat << EOF >> group_vars/all.ymlceph_origin: repositoryceph_repository: communityceph_repository_type: cdnceph_stable_release: nautilusmonitor_interface: wlan0public_network: "192.168.100.0/24"cluster_network: "192.168.100.0/24"dashboard_enabled: falseconfigure_firewall: falseEOF
在 group_vars 目錄下創(chuàng)建 osds.yml:
$ cat << EOF >> group_vars/all.ymlosd_scenario: collocateddevices:- /dev/sda- /dev/sdbEOF
創(chuàng)建一個(gè) inventory 文件:
$ cat << EOF >> inventory[mons]rpi4b4-0[osds]rpi4b4-1rpi4b4-2rpi4b4-3EOF
在寫這篇文章的時(shí)候,ceph-ansible 倉(cāng)庫(kù)里有一個(gè) bug(根據(jù)這個(gè) bug 工單)。你可以通過(guò)編輯角色的第 85 行和第 86 行來(lái)減輕這個(gè) 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"]
4、部署 Ceph
用你的 inventory 文件運(yùn)行 Ansible 劇本:
$ ansible-playbook -i inventory site.yml
15-20 分鐘后,你應(yīng)該看到這個(gè)結(jié)果:
Ceph deployment
下面的步驟
之前,我在另一個(gè)樹莓派集群中手動(dòng)部署了一個(gè) OpenStack 集群。我希望能將其與這個(gè)集群整合在一起。我也在研究用 TripleO 部署。
樹莓派、Ansible 和 OpenStack 的可能性是無(wú)窮的。




























