製作DSpace的鏡像伺服器(Mirror Server)
當一台伺服器出問題掛點的時候,為了避免服務中斷,我們總是會準備另一台鏡像的伺服器來接手,好讓網路服務能夠持續不斷地進行。
儘管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鏡像程式:SkyDriver空間下載,http://0rz.tw/swNWn
請先把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預設設定裡面:
- 執行鏡像同步的帳號:root
- DSpace系統安裝檔位置:/dspace
- 具備自動備份的功能,請參考我另一篇「談DSpace 1.5.1備份機制」來建置吧。
- 資料庫的備份檔案位置:/opt/backup/dspace-database
- 伺服器所需要的軟體位置:/software
- 軟體包括jdk-6u12-linux-i586.rpm、apache-maven-2.0.9-bin.tar.gz、apache-ant-1.7.1-bin.tar.gz、apache-tomcat-6.0.13.tar.gz
- JDK下載網頁:http://java.sun.com/javase/downloads/index.jsp
- jdk-6u12-linux-i586-rpm.bin備份(SkyDrive空間):下載1(http://0rz.tw/Rscvz)、下載2(http://0rz.tw/ODwVZ) (zip分割檔,建議用7-zip解壓縮)
- Maven下載網頁:http://maven.apache.org/download.html
- apache-maven-2.0.9-bin.tar.gz備份:SkyDrive空間下載 (http://0rz.tw/AIGxd)
- Ant下載網頁:http://ant.apache.org/bindownload.cgi
- apache-ant-1.7.1-bin.tar.gz備份:SkyDrive空間下載
- Tomcat下載頁面:http://tomcat.apache.org/download-60.cgi
- apache-tomcat-6.0.13.tar.gz備份:SkyDrive下載。
最後,把上述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伺服器環境
概念如上圖,我們從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
接著一樣在Slave Server本機端中執行這支程式:
[root@dspace2 ~]# php /root/rsync/rsync-master2slave.php
程式就會自動從Master Server取得資料,然後再將部份設定檔修改成Slave Server所在的網路設定,以讓他可以順利運作。
這隻程式在Step4的時候就被設定成為自動執行,預設是每週日早上5點進行鏡像,如需要調整請修改config.php。
Step6. Master Server與Slave Server網路身份交換
透過「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
在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蓬勃發展,大家加油吧。