:::

製作DSpace的鏡像伺服器(Mirror Server)

3月 31, 2009 0 Comments Edit Copy Download

當一台伺服器出問題掛點的時候,為了避免服務中斷,我們總是會準備另一台鏡像的伺服器來接手,好讓網路服務能夠持續不斷地進行。

儘管DSpace這種機構典藏系統通常不會需要這麼完全不中斷的高等級服務,不過對於我們這種全國性的教育部計畫來說,總是想要越做越好。因此終於把DSpace的鏡像伺服器功能完成了!

鏡像伺服器說明

鏡像的目的在於建立出另一台一模一樣的伺服器環境、一模一樣的資料,但是卻是獨立運作的個別伺服器。我把主要提供服務的伺服器稱為「Master Server」,而備用作為鏡像的伺服器稱為「Slave Server」。以下不論是在圖解說明還是在程式設定裡面,提到Master(或簡稱M)、Slave(或簡稱S)都是在指這兩種伺服器。

Master Server與Slave Server所提供的服務基本上必須相同,也就是同樣的DSpace系統。但他們之間有兩個差別:

  • 網路設定不一樣:例如Master Server的IP可能是192.168.1.21,而Slave Server則可能是192.168.1.22。當然,現在的網路環境中不可能有兩個同時一樣的IP,但是他們都必需要有固定的IP位置才能進行檔案資料的傳送。
  • 排程功能不一樣:Master Server負責程式的備份,Slave Server則負責把資料從Master Server抓過來,然後利用備份的資料來作還原成Master Server的資料環境。

值得一提的是,因為執行鏡像同步之後,原本被同步的伺服器資料將會消失。例如將Master Server的資料鏡像同步到Slave Server的時候,Slave Server原有的DSpace系統、PostgreSQL資料庫中的資料將會被覆蓋。因此Slave Server將會是很好的測試環境!

鏡像功能說明

鏡像功能當中有7支程式(下載http://0rz.tw/swNWn),其中最後5支是控制鏡像動作的各個功能。程式功能概述如下:

  • config.php:設定檔,主要需要設定Master Server跟Slave Server的網路設定。
  • function.php:執行函式庫,大部分的動作都在這個函式庫當中執行。
  • initiate-slave.php:建置Slave Server的環境。
  • rsync-slave2master.php:檔案鏡像同步,從slave到master。
  • rsync-master2slave.php:檔案鏡像同步,從master到slave。
  • network-master2slave.php:修改網路設定,從master到slave。
  • network-slave2master.php:修改網路設定,從slave到master。

後面五支程式可以用「php rsync-master2slave.php」這樣的指令來執行。接下來我們一邊建置鏡像伺服器的環境,一邊說明這些程式的功用吧。

Step1. 設定config.php

請先把DSpace鏡像程式下載到本機端,然後修改設定檔config.php,以便之後的步驟中可以上傳到伺服器裡。

設定檔內容很多,大部分我都有撰寫註解以說明。最重要的是要設定Master Server與Slave Server的網路設定,而這些參數就在檔案開頭,如下:

//鏡像主要伺服器與備份伺服器
$rsyncConfig["serverMaster"]="192.168.1.21";	//Master Server的IP
$rsyncConfig["serverMasterDN"]=$rsyncConfig["serverMaster"];	//Master Server的Domain Name
$rsyncConfig["serverSlave"]="192.168.1.22";	//Slave Server的IP
$rsyncConfig["serverSlaveDN"]=$rsyncConfig["serverSlave"];	//Slave Server的Domain Name

請依照Master Server與Slave Server實際的網路位置去做設定吧。

Step2. 配置Master Server

在config.php預設設定裡面:

最後,把上述7支鏡像功能程式上傳到「/root/rsync」吧。

請完成以上工作之後,才能開始準備進行鏡像。如果你系統安裝位置與上述路徑不同,則請修改config.php檔案,程式內皆有註解說明,應該很好懂才是。

Step3. 安裝Slave Server

請安裝與Master Server同樣的作業系統,如果你跟著我之前寫的「DSpace 1.5.1安裝法」來作的話,那麼你需要注意以下幾點:

  • 作業系統是CentOS 5.2。
  • 需要額外安裝PostgreSQL跟Apache PHP環境。
  • 需要額外開啟8080 port。
  • 需要額外建立名為「dspace」的帳號。

安裝完成之後,一樣把上述7支鏡像功能程式上傳到「/root/rsync」吧。接下來DSpace的伺服器環境、資料,都交由鏡像程式來幫你執行!

Step4. 配置Slave Server伺服器環境

image

概念如上圖,我們從Master取得伺服器環境所的軟體,並執行安裝。所使用的程式是「initiate-slave.php」。你需要在Slave Server中執行這支程式(為了避免網路放置過久斷線,強烈建議在Slave Server本機端執行):

[root@dspace2 ~]# php /root/rsync/initiate-slave.php

第一次執行,程式會提示你製作並安裝SSH公鑰與私鑰,你需要依照程式的提示到Master Server去安裝可以登入的公鑰(詳細可以參考鳥哥的說明)。只有安裝SSH公鑰與私鑰之後,Slave Server才能順利從Master Server取得資料,而不需要每次都詢問密碼。要注意的是,當Master Server要像Slave Server取得資料的時候,依然需要詢問密碼的,除非你手動新增了公鑰。

第二次執行,程式會開始安裝各個DSpace所需要的軟體,並且修改設定成為適合運作DSpace的環境,同時安裝自動鏡像的排程。如果順利安裝完成的話,接著就可以來作鏡像取得資料了。

Step5. 手動從Master Server取得資料到Slave Server

image

接著一樣在Slave Server本機端中執行這支程式:

[root@dspace2 ~]# php /root/rsync/rsync-master2slave.php

程式就會自動從Master Server取得資料,然後再將部份設定檔修改成Slave Server所在的網路設定,以讓他可以順利運作。

這隻程式在Step4的時候就被設定成為自動執行,預設是每週日早上5點進行鏡像,如需要調整請修改config.php。

Step6. Master Server與Slave Server網路身份交換

image

透過「network-master2slave.php」與「network-slave2master.php」,可以快速地將伺服器的網路狀態切換,同時修改設定檔。這在Master Server出問題而需要Slave Server馬上接替他的工作時派得上用場。

作法是先在Master Server上執行「network-master2slave.php」:

[root@dspace ~]# php /root/rsync/network-master2slave.php

然後在Master Server上執行「network-slave2master.php」:

[root@dspace2 ~]# php /root/rsync/network-slave2master.php

那麼他們的網路狀態就會交換過來,用原本Master Server的IP就可以連到運作正常的Slave Server上。

相反地執行以上功能,就可以讓兩者的網路設定恢復原樣。

Step7. 手動從Slave Server取得資料到Master Server

image

 

在Master Server上執行「rsync-slave2master.php」就可以把Slave Server上的資料抓過來:

[root@dspace ~]# php /root/rsync/rsync-slave2master.php

當Slave Server資料比Master Server還要新的時候,則可以執行這個指令。

結語

用PHP來控制Linux系統有很多好處,像是陣列控制自由、字串搜尋、寫入、取代等功能方便易懂,不用像Bash Shell Script寫起來寫到快吐血都還過不了,而PHP也是我比較熟悉的語言。

DSpace鏡像功能能夠給伺服器更完整的一個備份機制,但是相對的你也得付出一台相同伺服器、佔掉一個網路位置的成本,如何考量就看你們怎麼使用了。

希望DSpace蓬勃發展,大家加油吧。