樹莓派使用執行個體之:2 Pi R

來源:互聯網
上載者:User

很多人都對樹莓派的硬體 hack 功能(譯註:就是使用者可以自己發揮想像力,把樹莓派設計成自己想要的機器)感興趣,而我看中的一點是樹莓派的低耗電功能,我可以用它來代替現在在用的 Linux 伺服器。在以前的文章中我已經介紹過如何用樹莓派代替這些伺服器來管理我的啤酒冰箱,以及我在澳大利亞託管的一台樹莓派。託管樹莓派之後,我開始思考我正在使用的伺服器的單點故障問題,並且考慮著手解決它。當你看到文章標題裡的“2 Pi R”,你也許會想到圓周長計算公式(C = 2PiR,Pi 為圓周率,R 為半徑),但在本文中,“R”的意思是“冗餘(redundancy)”。當然,一塊樹莓派並不能實現冗餘,至少需要兩塊。下面我將介紹如何用兩塊樹莓派實現冗餘。

本文將建立一個底層架構,為倆樹莓派實現冗餘提供基礎服務,首先我要用 GlusterFS 建立一個叢集網路檔案系統。在之後的文章中,我還會介紹如何利用共用儲存來建立其他冗餘服務。注意,雖然本文使用的是樹莓派,但下面的配置操作同樣適用於其他硬體。

配置倆樹莓派

首先從樹莓派官網下載最新的 Linux 發行版,並安裝到兩塊 SD 記憶卡中。將樹莓派接到電視機上,然後按照文檔提示選擇核心鏡像並啟動系統,確認一下 SSH 服務有沒有啟動(預設情況下 SSH 應該是開機啟動的)。你可以使用 raspi-config 命令來增加根分區空間,以便能充分利用 SD 記憶卡的容量。確認系統正常工作、SSH 正常啟動後,我可以過程訪問它了。我將樹莓派與電視機斷開,並連到交換器上,重啟系統,沒有顯示介面。

預設情況下,Raspbian 會通過 DHCP 擷取自己的網路資訊,但是在設定冗餘服務時,我們希望樹莓派每次開機都使用同一個 IP 位址。在我的環境中,我設定了我的 DHCP 伺服器,它會在樹莓派啟動時為它們分配固定的 IP 位址。而你可以編輯 /etc/network/interfaces 檔案:

iface eth0 inet dhcp

修改成:

auto eth0
iface eth0 inet static
  address 192.168.0.121
  netmask 255.255.255.0
  gateway 192.168.0.1

當然,要將上面的參數修改成你自己的參數,確保每個樹莓派使用不同的 IP 位址。我把兩個樹莓派的主機名稱都改了,便於在(通過 SSH)登入的時候區分它們。怎麼改主機名稱呢?以 root 許可權編輯 /etc/hostname 檔案。最後重啟系統,確認樹莓派使用了正確的網路設定和主機名稱。

配置 GlusterFS 伺服器

GlusterFS 是一個使用者態的叢集檔案系統,我選擇它,是因為它配置共用網路檔案系統很方便。首先選一個樹莓派作為主裝置(master)。在主裝置上你需要做一些初始化操作,完成後,它們會自動執行容錯移轉。下面是我架設的環境:

Master hostname: pi1
Master IP: 192.168.0.121
Master brick path: /srv/gv0
Secondary hostname: pi2
Secondary IP: 192.168.0.122
Secondary brick path: /srv/gv0

在開始之前,登入這兩個樹莓派,然後安裝 glusterfs-server 軟體包:

$ sudo apt-get install glusterfs-server

GlusterFS 將資料儲存在一些被稱為“塊”的裝置中。一個“塊”是一個系統路徑,由你指定給 gluster 使用。GlusterFS 會將所有“塊”組合成一個儲存卷,給用戶端使用。GlusterFS 會將檔案的資料分割成多份,儲存在不同的“塊”中。所以雖然一個“塊”看起來就是一個普通的路徑,你最好不要在樹莓派中直接操作它,而應該通過用戶端訪問 GlusterFS 服務,讓 GlusterFS 操作。本文中我在兩個樹莓派中都建立一個 /srv/gv0 目錄作為 GlusterFS 的“塊”:

$ sudo mkdir /srv/gv0

在我的環境中,我將 SD 記憶卡上的根檔案系統共用出來,而你可能需要共用更大的儲存空間。如果是這樣的話,在兩塊樹莓派上都接上 USB 硬碟,格式化後掛載到 /srv/gv0 上。編輯下 /etc/fstab 檔案,確保系統每次啟動時都會把你的 USB 硬碟掛載上去。兩個樹莓派上的“塊”不一定需要有相同的名字或者相同的路徑名稱,但是把它們設定為相同的值也沒什麼壞處。

配置好“塊”的路徑,安裝好 glusterfs-server 軟體包,確認兩個樹莓派都正常工作,然後登入被你設為主裝置的樹莓派,輸入“gluster peer probe”命令,將次裝置加入到叢集中。在我的環境中,我用 IP 位址表示第二個節點,如果你比較有個性,並且有設定過 DNS,你也可以用主機名稱表示這個節點。

pi@pi1 ~ $ sudo gluster peer probe 192.168.0.122
Probe successful

目前為止,我的 pi1 (192.168.0.121) 信任 pi2 (192.168.0.122),我可以建立一個儲存卷,名字都想好了:gv0。在主裝置端運行命令“gluster volume create”:

pi@pi1 ~ $ sudo gluster volume create gv0 replica 2 192.168.0.121:/srv/gv0 192.168.0.122:/srv/gv0
Creation of volume gv0 has been successful. Please start
the volume to access data.

這裡稍微解釋一下命令的意思。“gluster volume create”就是建立一個卷;“gv0”是卷名,這個名稱將會在用戶端被用到;“replica 2”表示這個卷的資料會在兩個“塊”之間作冗餘,而不是將資料分割成兩份分別存於兩個“塊”。這個命令保證了卷內的資料會被複製成兩份分別儲存在兩個“塊”中。最後我定義兩個獨立的“塊”,作為卷的儲存空間:192.168.0.121 上的 /srv/gv0 和 192.168.0.122 上的 /srv/gv0。

現在,卷被成功建立,我只需啟動它:

pi@pi1 ~ $ sudo gluster volume start gv0
Starting volume gv0 has been successful

然後我可以在任何一個樹莓派上使用“volume info”命令來查看狀態:

$ sudo gluster volume info

Volume Name: gv0
Type: Replicate
Status: Started
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: 192.168.0.121:/srv/gv0
Brick2: 192.168.0.122:/srv/gv0

配置 GlusterFS 用戶端

卷已啟動,現在我可以在一個支援 GlusterFS 的用戶端上,將它作為一個 GlusterFS 類型的檔案系統掛載起來。首先我想在這兩個樹莓派上掛載這個卷,於是我在兩個樹莓派上都建立了掛載點,並下面的命令把這個卷掛載上去:

$ sudo mkdir -p /mnt/gluster1
$ sudo mount -t glusterfs 192.168.0.121:/gv0 /mnt/gluster1
$ df
Filesystem        1K-blocks    Used Available Use% Mounted on
rootfs              1804128 1496464    216016  88% /
/dev/root            1804128 1496464    216016  88% /
devtmpfs              86184      0    86184  0% /dev
tmpfs                  18888    216    18672  2% /run
tmpfs                  5120      0      5120  0% /run/lock
tmpfs                  37760      0    37760  0% /run/shm
/dev/mmcblk0p1        57288  18960    38328  34% /boot
192.168.0.121:/gv0  1804032 1496448    215936  88% /mnt/gluster1

如果你是一個喜歡鑽研的讀者,你可能會問了:“如果我指定了一個 IP 位址,如果192.168.0.121當機了,怎麼辦?”。別擔心,這個 IP 位址僅僅是為了指定使用哪個卷,當我們訪問這個卷的時候,卷內的兩個“塊”都會被訪問到。

當你掛載好這個檔案系統後,試試在裡面建立檔案,然後查看一下“塊”對應的路徑:/srv/gv0。你應該可以看到你在 /mngt/gluster1 裡建立的檔案,在兩個樹莓派的 /srv/gv0 上都出現了(重申一遍,不要往 /srv/gv0 裡寫資料):

你可以在 /etc/fstab 上添加下面一段,就可以在系統啟動的時候自動把 GlusterFS 的卷掛載上來:

192.168.0.121:/gv0  /mnt/gluster1  glusterfs  defaults,_netdev  0  0

注意:如果你想通過其他用戶端訪問到這個 GlusterFS 卷,只需要安裝一個 GlusterFS 用戶端(在基於 Debian 的發行版裡,這個用戶端叫 glusterfs-client),然後接我上面介紹的,建立掛載點,將卷掛載上去。

冗餘測試

現在我們就來測試一下這個冗餘檔案系統。我們的目標是,當其中一個節點當掉,我們還能訪問 GlusterFS 卷裡面的檔案。首先我配置一個獨立的用戶端用於掛載 GlusterFS 卷,然後建立一個簡單的指令檔放在卷中,檔案名稱為“glustertest”:

#!/bin/bash

while [ 1 ]
do
  date > /mnt/gluster1/test1
  cat /mnt/gluster1/test1
  sleep 1
done

這個指令碼運行無限迴圈並每隔1秒列印出系統時間。當我運行這個指令碼時,我可以看到下面的資訊:

# chmod a+x /mnt/gluster1/glustertest
root@moses:~# /mnt/gluster1/glustertest
Sat Mar  9 13:19:02 PST 2013
Sat Mar  9 13:19:04 PST 2013
Sat Mar  9 13:19:05 PST 2013
Sat Mar  9 13:19:06 PST 2013
Sat Mar  9 13:19:07 PST 2013
Sat Mar  9 13:19:08 PST 2013

我發現這個指令碼偶爾會跳過1秒,可能是 date 這個命令並不是很精確地每隔1秒鐘列印一次,所以偶爾會出現輸出時間不連慣的現象。

當我執行這個指令碼後,我登入一個樹莓派並輸入“sudo reboot”重啟這個裝置。這個指令碼一直在運行,如果出現輸出時間不連慣現象,我不知道還是不是上面說的偶然現象。當第一個樹莓派啟動後,我重啟第二個樹莓派,確認下這個系統有一個節點丟失後,我的程式仍然能正常工作。這個冗餘系統配置起來只需要幾個命令,如果你需要一個冗餘系統,這是個不錯的選擇。

現在你已經實現了 2 Pi R 組成的冗餘檔案系統,在我的下篇文章中,我將會加入新的冗餘服務,將這個共用儲存系統好好利用起來。

推薦閱讀:

Raspberry Pi 樹莓派搭LAMP伺服器

在樹莓派Raspberry Pi上安裝遊戲模擬器

Raspberry Pi 樹莓派上安裝Weston

用於Raspberry Pi 的Linux 作業系統已經可用

Raspberry Pi(樹莓派)試用小記

Raspberry Pi(樹莓派)的安裝、配置IP及軟體源等入門

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.