譯者 | 趙青窕
審校 | 孫淑娟
樹莓派是一種可以連接顯示器、鼠標(biāo)、鍵盤,通過圖形界面(GUI)安裝Linux操作系統(tǒng)的微型計(jì)算機(jī)。您還可以在沒有GUI的無頭模式下使用并運(yùn)行樹莓派,例如,數(shù)據(jù)庫服務(wù)器。樹莓派提供很多用途,如從構(gòu)建Minecraft服務(wù)器到智能鏡(smart mirrors),它具有無窮無盡的可能性。
自從我開始接觸MariaDB并了解了數(shù)據(jù)庫集群、分布式SQL和Xpand后,構(gòu)建樹莓派集群的想法就一直在我的腦海中縈繞。這樣的集群是體驗(yàn)分布式系統(tǒng)的一種很好的方式。
在這篇文章中,我將向你展示如何構(gòu)建一個(gè)樹莓派集群:
- 8節(jié)點(diǎn)
- 32核
- 64GB內(nèi)存
- 2TB的存儲(chǔ)空間
1.準(zhǔn)備工作
如果你想建立自己的集群,你不需要購買8臺(tái)樹莓派設(shè)備。即使只有一臺(tái)設(shè)備也足以讓你學(xué)到知識(shí)。即使你只打算配置一個(gè)樹莓派,這篇文章中的指令也是可以使用的。我的建議是,如果你真的想提高你在Linux管理、Ansible、Docker、Kubernetes、數(shù)據(jù)庫集群等方面的技能,那么至少要有三種設(shè)備來構(gòu)建你的集群。
考慮到這一點(diǎn),請(qǐng)用你的數(shù)字代替我下面羅列參數(shù)中的8。如果你有不同的型號(hào),或者不同大小的內(nèi)存或存儲(chǔ)空間,那么請(qǐng)用您的樹莓派設(shè)備規(guī)格參數(shù)來替代下面列出的相應(yīng)參數(shù)。以下是我使用的設(shè)備參數(shù):
- 8 ×樹莓派4模型B (8GB內(nèi)存)
- 1 × Anker 60W臺(tái)式充電器(10端口)
- 8 x短USB C型數(shù)據(jù)線 (5A, 40W, 23cm)
- 8 x MicroSD卡(256GB)
- 2 ×樹莓派集群盒(4層,帶冷卻風(fēng)扇)
您可以根據(jù)您的設(shè)備數(shù)量來適當(dāng)進(jìn)行調(diào)整,如果你的設(shè)備很少(比如1個(gè)或2個(gè)),你可以買一個(gè)或多個(gè)樹莓派電源,或者一個(gè)多口USB充電器。如果你使用多USB充電器,確保每個(gè)端口至少能提供2.4Am (5V)。選擇符合你的目標(biāo)和預(yù)算的microSD卡。我建議使用至少32GB的SD卡。在電纜和外殼方面,選擇適合您的即可。雖然冷卻風(fēng)扇不是必須的,但如果你打算長時(shí)間開著設(shè)備,我建議您使用冷卻風(fēng)扇。
我還建議在開始“烹飪”之前把所有的食材都準(zhǔn)備好,尤其是如果你想使用多個(gè)樹莓派設(shè)備時(shí)。
2.安裝無頭模式的樹莓派操作系統(tǒng)
我們將使用的操作系統(tǒng)是樹莓派操作系統(tǒng)(Raspberry Pi OS),一個(gè)基于Debian進(jìn)行優(yōu)化適配后的操作系統(tǒng)。使用您的計(jì)算機(jī)把樹莓派操作系統(tǒng)安裝在microSD卡上。然后將這些microSD卡連接到樹莓派設(shè)備上并啟動(dòng)它們。
把所有的microSD卡和樹莓派盒子放在你的桌子上。如果你的電腦沒有SD卡插槽,你將需要一個(gè)SD卡適配器(它們通常附帶microSD卡)或一個(gè)讀取SD卡的USB讀卡器。并準(zhǔn)備一個(gè)記號(hào)筆。
下載Raspberry Pi Imager并安裝在您的計(jì)算機(jī)上。取一張microSD卡并連接到你的電腦上,打開Raspberry Pi Imager應(yīng)用程序,點(diǎn)擊CHOOSE OS,在隨后出現(xiàn)的列表中單擊“Raspberry Pi OS (other)”。如果您的樹莓派設(shè)備是64位的,則選擇Raspberry Pi OS Lite (64-bit),否則選擇Raspberry Pi OS Lite (32位)。
點(diǎn)擊CHOOSE STORAGE并選擇microSD卡。再次檢查你選擇了正確的驅(qū)動(dòng)器,然后點(diǎn)擊“齒輪”圖標(biāo)(即高級(jí)選項(xiàng))。主機(jī)名使用rpi01或類似的名稱,依次分別將設(shè)備命名為rpi01、rp02、rp03等。隨后選擇“Enable SSH”和“Use password authentication”選項(xiàng)。設(shè)置用戶名(我將使用默認(rèn)名稱pi)并設(shè)置一個(gè)安全的密碼。查看“Configure wireless LAN“選項(xiàng),并輸入您的WiFi連接的名稱和密碼。注意您也需要對(duì)您的場(chǎng)所進(jìn)行設(shè)置。
因?yàn)槲覀儽仨殞?duì)每張microSD卡進(jìn)行一次這樣的操作,所以請(qǐng)確保將”Image customization”選項(xiàng)字段設(shè)置為:”to always use“。這樣設(shè)置就會(huì)被保存,下一張SD卡的處理過程也會(huì)更加容易:
現(xiàn)在可以單擊“SAVE“,然后單擊”WRITE”來啟動(dòng)燒寫過程。一旦完成,彈出卡,并連接到其中一個(gè)樹莓派設(shè)備,把它放回它的盒子,并在盒子上標(biāo)記數(shù)字01。對(duì)所有設(shè)備重復(fù)此過程。
3.集群組裝
根據(jù)所使用的集群類型,組裝過程可能會(huì)有所不同。按照箱子上的說明,或者在網(wǎng)上搜索照片,就可以清楚地知道這些設(shè)備應(yīng)該如何分層放置。
我建議提前決定先組裝哪些部件。例如,在我挑選的箱子里,我必須先安裝冷卻風(fēng)扇,然后再把樹莓派設(shè)備安裝到各個(gè)層上。
一旦你安裝了樹莓派,用記號(hào)筆在每層上寫下它對(duì)應(yīng)的數(shù)字。這將在您需要設(shè)備硬件層面的修改時(shí)(如您必須拿出microSD卡,并重新配置或做其他的管理任務(wù)),將會(huì)很有幫助的。
安裝好所有設(shè)備后,并將USB線連接到樹莓派設(shè)備和多口USB充電器上。如果你喜歡,你可以選擇使用以太網(wǎng)電源和網(wǎng)絡(luò)交換機(jī)(network switch),而不是USB充電器,但我希望你去探索下。你可以把充電器(或者是網(wǎng)絡(luò)交換機(jī))放在樹莓派架子旁邊,或者連在上面。我用橡皮筋把充電器固定在箱子的一邊。
插上USB線,你就可以啟動(dòng)所有的迷你電腦了!連接充電器并打開電源。根據(jù)你使用的樹莓派模型,它們可能需要一些時(shí)間來啟動(dòng),所以要有耐心。同時(shí),您可以看到有LED燈在閃爍,同時(shí)風(fēng)扇也已啟動(dòng)了。
4.通過SSH連接設(shè)備
如果一切順利,您應(yīng)該能夠通過SSH訪問Raspberry Pi設(shè)備。試著在你的電腦上運(yùn)行以下程序:
ssh pi@rpi01.local
輸入密碼并回答yes,將設(shè)備添加到已知主機(jī)列表中。此時(shí),您的集群已經(jīng)啟動(dòng)。
您可能需要運(yùn)行命令來檢查硬件信息。例如:
- lscpu:CPU架構(gòu)信息
- df -H:文件系統(tǒng)磁盤空間占用率
- sudo fdisk -l:分區(qū)信息
- free -m:使用的數(shù)量,空閑的數(shù)量和總RAM大小
- cat /proc/version:Linux內(nèi)核信息
5.使用raspi-config手動(dòng)配置
如果你有一個(gè)樹莓派,你可以通過上面描述的SSH連接到它,并使用raspi-config來對(duì)樹莓派進(jìn)行配置。您可以修改WiFi連接(S1),更改主機(jī)名(S4)和用戶密碼(S3),擴(kuò)展文件系統(tǒng)(A1),以及其他許多內(nèi)容。
6.使用Ansible實(shí)現(xiàn)自動(dòng)化配置
如果你的集群中有不止一個(gè)樹莓派,你可能想使用Ansible這樣的工具來進(jìn)行自動(dòng)化配置。使用Ansible,你可以在多臺(tái)機(jī)器上運(yùn)行一個(gè)命令,而不必執(zhí)行重復(fù)的工作。例如,假設(shè)我們想要擴(kuò)展每個(gè)Raspberry Pi上的文件系統(tǒng)??梢栽诿钚兄袌?zhí)行下面的命令:
sudo raspi-config --expand-rootfs
如果沒有自動(dòng)化,您將不得不通過上面的命令,使用SSH連接到rpi01.local,然后結(jié)束SSH會(huì)話。對(duì)于rpi02.local和rpi03.local,rpi04.local等設(shè)備,必須重復(fù)所有這些步驟。相反,你可以簡單地告訴Ansible在所有機(jī)器上為你運(yùn)行這個(gè)命令。
具體操作是你必須把Ansible安裝在連接到本地網(wǎng)絡(luò)的控制節(jié)點(diǎn)上。它可以是一個(gè)樹莓派設(shè)備,也可以是您的工作筆記本電腦,或任何其他機(jī)器,只要它運(yùn)行基于Unix的操作系統(tǒng)(如Linux或macOS)即可。我碰巧有一臺(tái)舊的筆記本電腦,我把它重新用作連接到我的網(wǎng)絡(luò)的專用數(shù)據(jù)庫,所以我把它用作控制節(jié)點(diǎn)(我將在以后的文章中展示如何在Raspberry Pi設(shè)備中安裝具有復(fù)制功能的數(shù)據(jù)庫)。我不會(huì)詳細(xì)說明如何安裝Ansible,因?yàn)樵诓煌牟僮飨到y(tǒng)上,安裝過程是不同的。請(qǐng)查看官方文檔,并將其安裝在您的筆記本電腦或任何希望配置為控制節(jié)點(diǎn)的設(shè)備上。
在您開始之前,我建議您生成一個(gè)示例配置文件,稍后您可以根據(jù)自己的意愿進(jìn)行調(diào)整:
sudo su
ansible-config init --disabled -t all > /etc/ansible/ansible.cfg
exit
在本文中,為簡化操作過程而禁用了主機(jī)密鑰檢查,但不要在生產(chǎn)環(huán)境中這樣做!
更改下面一行:
;host_key_checking=True
改成:
host_key_checking=False
接下來,您需要定義一個(gè)清單,這個(gè)清單是你想用Ansible控制的機(jī)器列表。該清單路徑是/etc/ansible/hosts。例如,您可以使用把機(jī)器的IP地址或主機(jī)名添加到下面的列表中:
Properties files
[mymachines]
foo.example.com
bar.example.com
192.0.2.50
192.0.2.51
如果機(jī)器的IP地址或主機(jī)名中有某種模式,您也可以使用范圍的方式來進(jìn)行配置,具體方法是通過編輯/etc/ansible/hosts文件,在文件末尾增加如下內(nèi)容:
Properties files
[rpis]
rpi[01-08].local
更改模式以匹配您的主機(jī)名和數(shù)字。這相當(dāng)于:
Properties files
[rpis]
rpi01.local
rpi02.local
rpi03.local
rpi04.local
rpi05.local
rpi06.local
rpi07.local
rpi08.local
在這個(gè)清單中,rpi是一個(gè)任意的名稱,當(dāng)你使用Ansible在樹莓派設(shè)備上運(yùn)行命令時(shí),你可以使用它指代所有的設(shè)備。
您需要配置SSH用戶名,Ansible將使用該用戶連接到機(jī)器。在/etc/ansible/hosts文件中添加如下內(nèi)容:
Properties files
[rpis:vars]
ansible_user=pi
現(xiàn)在是時(shí)候控制機(jī)器了。我們先使用ping命令來連接一下:
ansible rpis -m ping --ask-pass
輸入SSH密碼。緊接著您應(yīng)該在輸出中看到每個(gè)機(jī)器是如何使用“pong”來回應(yīng)“ping”的(我這里只顯示一個(gè))。
JSON
rpi01.local | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
讓我們回到文件系統(tǒng)擴(kuò)展。要在所有機(jī)器上執(zhí)行此操作,請(qǐng)運(yùn)行:
ansible rpis -m shell -a "raspi-config --expand-rootfs" --become --ask-pass
就這么簡單,所有的樹莓派設(shè)備都有一個(gè)擴(kuò)展的文件系統(tǒng)。這是在所有機(jī)器上更新系統(tǒng)的好時(shí)機(jī):
ansible rpis -m shell -a "apt update -y" --become --ask-pass
ansible rpis -m shell -a "apt upgrade -y" --become --ask-pass
您可以按以下方式重啟所有設(shè)備:
ansible rpis -m shell -a "reboot" --become --ask-pass
一旦你完成了,并希望安全關(guān)閉所有機(jī)器,只需運(yùn)行:
ansible rpis -m shell -a "poweroff" --become --ask-pass
7.下一步操作
這只是開始。你現(xiàn)在有了一個(gè)集群,且可以由Ansible控制。您可以嘗試設(shè)置任何類型的服務(wù)器軟件,包括Web服務(wù)器或數(shù)據(jù)庫。還有很多關(guān)于Ansible的內(nèi)容,我在本文中只使用了ad-hoc命令,但您可以使用Playbooks來部署您的集群來達(dá)到您需要的狀態(tài)。同時(shí)您還可以參考官方文檔來進(jìn)一步的研究。
原文鏈接:https://dzone.com/articles/building-a-24-core-raspberry-pi-cluster-from-scrat
譯者介紹
趙青窕,51CTO社區(qū)編輯,從事多年驅(qū)動(dòng)開發(fā)。研究興趣包含安全OS和網(wǎng)絡(luò)安全領(lǐng)域,發(fā)表過網(wǎng)絡(luò)相關(guān)專利。