:::
針對查詢「dspace」依日期排序顯示文章。依關聯性排序 顯示所有文章

閒聊Blogger範本程式碼的管理 / How do I maintain Blogger's Template Code

布丁布丁吃布丁

閒聊Blogger範本程式碼的管理 / How do I maintain Blogger's Template Code

有人發現到最近「布丁布丁吃什麼?」的網站有些微的改變嗎?應該沒什麼人會注意到吧,因爲主要的改變都是在後端:Blogger範本程式碼的管理。這篇就些微的改變嗎?應該沒什麼人會注意到吧,因爲主要的改變都是在後端:Blogger範本程式碼的管理。這篇就來聊聊我管理「布丁布丁吃什麼?」範本程式碼的一些歷程吧。必須先說明的是,這只是我個人的做法,應該不適合大部分的使用者喔。

(more...)

Zotero Standalone安裝布丁版中英APA引用樣式 / Install Pulipuli Chinese & English APA Style in Zotero Standalone

布丁布丁吃布丁

Zotero Standalone安裝布丁版中英APA引用樣式 / Install Pulipuli Chinese & English APA Style in Zotero Standalone

簡報1

在中英文文獻夾雜的論文中使用Zotero插入文獻時,我推薦大家使用布丁版中英APA引用樣式,而不是Zotero內建的American Psychological Association 6th edition。我在2014年時寫過Firefox擴充套件版本Zotero安裝引用樣式的做法,這篇則是教大家在Zotero Standalone版本下安裝布丁版中文APA引用樣式。

(more...)

EMF圖檔怎麼用?微軟專用向量圖EMF轉開放向量圖SVG教學 / How to convert EMF to SVG format

EMF圖檔怎麼用?微軟專用向量圖EMF轉開放向量圖SVG教學 / How to convert EMF to SVG format

image

EMF的全名是Enhanced Metafile,翻譯做Windows增強中繼檔,這是一種微軟專用的向量圖檔案,其目的是為了取代較早期32位元的WMF格式(Windows Metafile,Windows中繼檔)。EMF在Office軟體中能以無鋸齒的向量模式運作,但是它卻很難以高解析度的模式匯出成其他格式的圖片,令人難以使用。站在支持開放格式的立場,我這篇將教你如何將微軟專用的EMF向量圖轉換成開放格式的SVG格式,以便後續再進行編輯或轉換成高解析度的PNG圖檔。這篇教學是在Windows 7環境下使用Word 2013與InkScape來完成整個轉換動作,請確定你有這些環境才能做到本篇教的EMF轉SVG喔。

(more...)

使用Apache Tika指令列抽取文件的內文 / Using Apache Tika Extract File’s Content

使用Apache Tika指令列抽取文件的內文 / Using Apache Tika Extract File’s Content

image

如果要做檔案中的全文檢索服務,那就要先把檔案的內文抽取出來轉換成字串,這樣才能提供全文檢索引擎進行索引。Apache Tika是一個萬用型的檔案內文抽取工具,我們可以用指令列來操作Tika,就能從PDF、Microsoft Office、Open Document、純文字檔案等文件抽取內文。非常好用!

(more...)

簡易PHP中文斷字器 / A Simple Chinese Word Tokenizer in PHP

布丁布丁吃布丁

簡易PHP中文斷字器 / A Simple Chinese Word Tokenizer in PHP

image

這篇製作了一個簡單的斷字器,將「這份編號是tc_130的心靈錯位器真是太cool了」變成「這 份 編 號 是 tc _ 130 的 心 靈 錯 位 器 真 是 太 cool 了」。詳細來說,就是在不是英數字的文字前後加上空格,但是英數字則保持原樣。這樣子就能讓Apache Solr這樣的全文檢索引擎為內容索引時,就可以找到以中文一個字為單位的層級了。

 

(more...)

開放原始碼數位典藏整合平台發展與建置 / Introduce to DSpace-DLLL: an Open Source Digital Archive System

布丁布丁吃布丁

開放原始碼數位典藏整合平台發展與建置 / Introduce to DSpace-DLLL: an Open Source Digital Archive System

image

這是我在2016年到兩個地方介紹DSpace-DLLL的投影片。一個是在政治大學圖書館舉辦的「數位典藏、數位策展暨數位人文學研習班」,內含實作的3小時課程,另一個是在國立師範大學舉辦的「台北市教師研習中心校史研習班」單純講課的課程。這兩個課程都可以搭配我另外製作的VirtualBox版本DSpace-DLLL虛擬機器來使用,以下提供連結讓有需要的人自由下載。

(more...)

合作式閱讀標註之標註行為特徵與閱讀理解關聯 / A Study on Developing Knowledge Extraction Mechanisms from Cooperative Reading Annotation

合作式閱讀標註之標註行為特徵與閱讀理解關聯 / A Study on Developing Knowledge Extraction Mechanisms from Cooperative Reading Annotation

image

這篇「合作式閱讀標註之標註行為特徵與閱讀理解關聯」是我在第二屆數位合作學習與個人化學習研討會跟大家分享的文章跟投影片,也是我碩士論文的簡要版本。

(more...)

如何用PHP執行root權限指令? / Run a command as the Root in PHP

布丁布丁吃布丁

如何用PHP執行root權限指令? / Run a command as the Root in PHP

image

PHP中可以用exec()等指令來執行系統指令,但是執行指令時的身份會是運作網頁伺服器的身份,大部分預設就是www-data。而www-data身份是不能執行影響作業系統的功能,如果想要進行像是重新啟動 (reboot)或是重新啟動Apache Tomcat的操作,就必須以root管理者身份操作才行。本篇參考StackOverflow上的解法,在PHP以SSH2連線以root登入後直接進行指令操作,如此就能解決權限上的問題。

(more...)

整合PostgreSQL資料庫的R中文文本探勘 / Chinese Text Mining with R and PostgreSQL

整合PostgreSQL資料庫的R中文文本探勘 / Chinese Text Mining with R and PostgreSQL

image

R的文本探勘(text mining)大多是基於純文字檔案進行,而我將文本探勘處理的資料輸入、輸出儲存整合到PostgreSQL資料庫,讓R的文本探勘能夠更容易跟其他系統整合。這篇文本探勘中進行了HTML內文擷取、新詞加入與斷詞處理、符號過濾、英數字過濾、停用字過濾、最小詞彙長度與頻率過濾等處理步驟。以下介紹系統架構跟R Script的設定,並以我的網頁為資料來源示範如何進行文本探勘。

(more...)

DSpace 1.5.0加入CKIP中文斷詞器 / Add CKIP Chinese Analyzer in DSpace 1.5.0

布丁布丁吃布丁

0 Comments

DSpace 1.5.0加入CKIP中文斷詞器 / Add CKIP Chinese Analyzer in DSpace 1.5.0

image

原本DSpace 1.5.0使用的是Lucene的ChineseAnalyzer,最近我需要把CKIP中文斷詞的服務加進DSpace當中,於是我自己做一個適合DSpace 1.5.0版本的CKIPChineseAnalyzer。這僅供需要研究斷詞器的人使用,一般使用者不建議更換斷詞器。以下介紹這個CKIPChineseAnalyzer的安裝步驟。

(more...)

斷開魂結!Windows圖片分割與轉換PDF工具「布丁式圖片工具箱」 / Quickly Splitting Images - Image Toolbox for Windows

斷開魂結!Windows圖片分割與轉換PDF工具「布丁式圖片工具箱」 / Quickly Splitting Images - Image Toolbox for Windows

image

將文件數位化掃描之後,我常常需要將掃描兩頁一起的圖片從中間切開,然後再合併成一份PDF,這樣方便做成電子文件來檢閱。我雖然介紹過功能強大、可以自動判斷中間切割線的Scan Tailor,或著是功能比較少的PSP Comic Converter,但是他們操作都還是太複雜了。我找來找去找不到滿意的工具,索性自己用AutoItImage Magick自己寫一個圖片分割與PDF轉換工具:「布丁式圖片工具箱」。

這個工具箱包含水平切割工具(split-horizontally.exe)、垂直切割工具(split-vertically.exe)以及PDF轉換工具(images-to-pdf.exe)。只要將要處理的圖片以這些工具開啟,就能完成切割或轉換成PDF的工作。比起使用上述工具來說,效率快上許多喔!

(more...)

快速建立開箱即用的系統!VirtualBox匯入應用裝置教學 / How to Import a OVF Format Virtual Appliance to VirtualBox

快速建立開箱即用的系統!VirtualBox匯入應用裝置教學 / How to Import a OVF Format Virtual Appliance to VirtualBox

image

建立一個應用系統已經不需要從基本的作業系統開始安裝起,現在流行的是使用虛擬應用範本(Virtual Appliance)來建立開箱即可用的應用系統。當然,在不同的虛擬機器管理器(Hypervisor,或稱為Virtual Machine Monitor, VMM)上,使用虛擬應用範本建立虛擬機器的操作方式都有所不同。以前我介紹的大多都是偏伺服器管理的Proxmox VE,這次要為大家介紹的在較為流行的VirtualBox中匯入OVF格式虛擬應用範本(在VirtualBox中,稱為虛擬應用裝置)的做法。

(more...)

OpenVZ虛擬應用範本備份 / Backup OpenVZ Format Virtual Templates

OpenVZ虛擬應用範本備份 / Backup OpenVZ Format Virtual Templates

image

最近在觀看Proxmox VE改版的時候才發現Proxmox VE已經捨棄使用OpenVZ虛擬化技術,而且虛擬應用範本主要的來源Turnkey Linux亦不再提供OpenVZ的格式。為了避免以後使用OpenVZ時找不到虛擬應用範本可供安裝,我認為需要趕快將手邊有的虛擬應用範本備份到其他地方,以供未來需要的時候還能找來下載。下面我以虛擬應用範本內含的系統來分類,有些混雜了下載自Proxmox VE跟我自己做的虛擬應用範本,全部一併備份吧。

(more...)

從OAIS模型來規劃數位策展 / With a Little Help from OAIS: Starting down the Digital Curation Path

從OAIS模型來規劃數位策展 / With a Little Help from OAIS: Starting down the Digital Curation Path

image

這是一篇國際檔案學的課堂報告。雖然有人認為歷史系學生應來為史料做數位典藏,然而其實數位典藏這件事情本身就是一門專門的學問,我們可以從這一篇文章來看看蘇格蘭學者規劃數位典藏所考量的問題。

本文所講的「Digital Curation」跟圖資界現在談的「數位策展」其實有不小的差距。在2011年的時代,「數位策展」被認為是「數位典藏」的下一步:不僅只是將資料儲存起來,還要能夠確保長期保存與容易取用。然而現代認為數位策展著重於後者:取用與進一步的應用,但這篇仍然重於長期保存議題。我在整理這篇時還是以「數位策展」一詞翻譯「Digital Curation」,但是請大家注意到兩者之間的差異。

值得慶幸的是,本文煩惱要如何建置符合OAIS模型系統的問題,現在已經有大量數位典藏系統都是基於OAIS模型建立,包括我們很常見的DSpace系統。回顧過往,就會強烈地感覺到,我們的確是站在巨人的肩膀上向前邁進。

(more...)

建構整合異質性數位典藏之開放原始碼資源探索系統 先導研究 / Developing an Open-Source Resource Discovery System to Integrate Heterogeneous Digital Achieves: A Pilot Study

布丁布丁吃布丁

建構整合異質性數位典藏之開放原始碼資源探索系統 先導研究 / Developing an Open-Source Resource Discovery System to Integrate Heterogeneous Digital Achieves: A Pilot Study

2016-02-23_225120
這是在輔仁大學圖書資訊系所舉辦的2015圖書館與資訊社會研討會所發表的研討會論文。繼「後設資料與英國檔案網路」這篇之後,我就想要嘗試以集中式檢索取代分散式檢索的整合性查詢方案。而搭著此時最熱門的議題資源探索探索系統(Resource Discovery System, RDS),我以開放原始碼資源探索系統VuFind架設了整合檢索目錄,可以查詢來自Koha、DSpace、甚至是一般MySQL所建構的資料庫
以下就附上投稿時的投影片與全文資料。想要摸索VuFind的話,可以上他們的官方線上測試網站來試試看喔。
(more...)

保存性後設資料 / Preservation Metadata

保存性後設資料 / Preservation Metadata

2016-02-21_145926

這一篇是檔案編排與描述課堂中的閱讀報告。作者說明後設資料在數位化場期保存策略中的地位。然後介紹OAIS參考模型及其計劃。最後提出場期保存將會面臨互通性與成本兩大問題。這些都很像是高考會拿來出題的範圍,同學至少要有些概念。


參考書目 / Reference

 - 11427990_140

Day, M. (2004). Chapter 12. Preservation metadata. In G. E. Gorman & D. G. Dorner (Eds.), Metadata applications and management (pp. 253-273). London: Facet Publishing.

報告投影片 / Slide


小結 / Conclusion

2016-02-21_161005

這篇文章提到的OAIS參考模型是一種數位典藏系統的建構理論。有趣的是,現在我們很常使用的DSpace其實就是基於OAIS的架構來設計。所以DSpace裡面很多用詞跟資料結構都跟OAIS一樣。雖然不少人都把DSpace當做檔案上傳與下載的資料庫,但其實它的確是為了長久典藏數位化檔案而設計的。

此外,這一篇報告中介紹了一些數位化的相關計劃:NLA 澳洲國家圖書館、Cedars英國國家檔案館、NEDLIB 歐洲典藏圖書館同盟、OLCL/RLG 美國圖書館研究團隊、NLNZ 紐西蘭國家圖書館。後來成為「保存性後設資料計劃比較 RLG, Cedars, NLA, NEDLIB」這一篇的一部分。實際上這兩份報告應該是要合在一起看才是。供大家參考囉。

(more...)

令人意外!ORCID目前並沒有自動跟資料庫同步 / Suprise! ORCID could not sync to Dabatase

布丁布丁吃布丁

令人意外!ORCID目前並沒有自動跟資料庫同步 / Suprise! ORCID could not sync to Dabatase

image

我們期望ORCID是一個研究者單一識別目錄,而可以以此修正各資料庫上同名同姓的識別問題,以及可以在作者發表新的著作時自動同步回ORCID。但是在最近的研究中,意外地發現ORCID並沒有做到「自動的同步」這件事情。


陳志銘老師的例子 / Case of Prof. Chih-Ming Chen

image

在引文索引資料庫Scopus上,國立政治大學的陳志銘老師一直苦於自己的著作被誤認為是國立中興大學的陳志銘老師。中興的陳老師有兩百五十幾篇著作,裡面有六十幾篇都是政大陳老師的文章。

知道ORCID可以協助作者來修正資料庫上同名同姓的問題時,政大陳老師很高興地請下面的人協助來做文章與作者對應動作,老師稱此動作「binding」。

柯皓仁老師推廣ORCID已經有很長一段時間,他寫了一篇文章教導大家如何「以Scopus鏈結ORCID」。大致上的步驟如下:

  1. 搜尋作者:我們先搜尋陳志銘老師的英文名稱「Chen, Chih-ming」。
  2. 選擇作者:很遺憾的是Scopus找不到政治大學的陳老師,原因是因為原本在Scopus上陳老師只有一篇文章,因此不會被列到Scopus中。這件事情在與Scopus客服多次來往之後,經由客服找到陳志銘老師的AuthorId之後,才能直接連到陳志銘老師的個人頁面。
  3. 在個人頁面上,增加到ORCID:這時候會開啟ORCID的登入畫面,需要輸入ORCID帳號密碼後登入。
  4. 再次選擇作者:這是為了要找尋文章的先前準備。
  5. 選擇偏好使用的作者名稱
  6. 選擇要加入的文章,或是額外搜尋Scopus原本沒有列入的文章。
  7. 檢視文章對應的結果
  8. 將結果送到Scopus的Author ID:請Scopus的工作人員協助修正文章與作者的對應,需要7個工作天
  9. 匯出著作清單到ORCID:介面中是「Send my publication list」按鈕,這個用意就是匯出到ORCID。

image

由於卡在找不到陳老師的AuthorID這個節骨眼上,所以整個匯入與辨識動作花了不少時間。陳老師在Scopus上60篇的文章用了兩個工作天才彙整完成,不過必須要等7個工作天之後,Scopus上才能正確顯示之前手動辨識的資料。

Scopus的資料並沒有同步到ORCID / Scopus would not sync to ORCID automatically

看到Scopus上正確顯示自己的60篇文章資料,陳老師很是高興啊。可是當我們打開ORCID資料時赫然發現到:

image

著作竟然只有1篇!

(雖然截圖是2篇,但1篇是我的測試,並不是真的老師的文章)

這一篇是當初老師在Scopus正確對應到老師資料的那一篇文章,我們之前先用上述步驟把這篇匯入到ORCID。但是過了7個工作天之後正確對應的其他59篇卻沒有自動匯入到ORCID。

這讓我們心中冒出了一個巨大的問號:難道Scoups的「增加到ORCID」功能,實際上不會自動增加嗎?

因此這就讓我開始想從不同角度來測試看看ORCID與Scopus資料庫之間的同步能做到什麼程度。


臺大醫學院詹老師的案例 / Case of Prof Chan

image

讓我們來看看臺大醫學院AcademicHub中詹老師的情況。臺大的AcademicHub以與ORCID自動同步的強大功能聞名於圖書館界,讓不少人為之嚮往。而從這個頁面上我們可以看到詹老師的著作總共收錄了20篇。

2015-06-25_210329

連到詹老師的ORCID個人頁面,也可以看到這20篇著作。這可是跟香港大學學術庫只是在作者欄位記錄ORCID ID,可是著作幾乎沒有同步到ORCID是不同層次的境界啊!

ORCID的清單上我們可以看到大部分都跟Scopus相連結,因此我們再來進一步看看Scopus上詹老師的AuthorID頁面。

image

著作竟然是21篇

image

比較ORCID上的著作跟Scopus新增的結果,新的著作是2014年10月發表的文章:

image

比對該篇文章的內容,的確是臺大詹老師的著作沒錯。我推測可能是因為詹老師發表時有登錄ORCID,但是我找不到他發表這篇文章的European Journal of Cardio-thoracic Surgery使用的投稿系統CTSNet有使用ORCID的相關資訊就是了。

文章發表到今日已經過了8個月,儘管仍然可能有處理延後等可能性在,但從這個結果來看,Scopus很有可能不會同步資料回到ORCID。


ORCID可以同步到Scopus去嗎? / Is it possible to snyc publications from ORCID to Scoups?

剛剛我們看到了柯老師教我們如何從Scopus匯入資料到ORCID,但是老實說上面幾個步驟下來還是有點麻煩,而且怎麼看都像是在幫Scopus維護資料,而甚至修正後的資料也不太像會回到ORCID。

那麼我們能不能逆向思維:藉由在ORCID上維護正確的著作目錄,來修正Scopus上的辨識作者錯誤的問題?這也是我們一直在追求作者權威控制的最終目的,讓我們來試試看這個功能是不是能夠正常運作。

image

這一篇是我的著作,但很遺憾的是,這篇文章被誤認為是嘉義大學的Chen, Yongting

image

讓我在ORCID上用手動的方式詳細地新增這筆資料到我的Works中,甚至連DOI「10.1108/02640471211241681」都填進去了。

image

結果Scopus上這篇文章依然是在嘉義大學的Chen, Yongting底下,沒有立即自動更新。

錯誤記錄在ORCID上的測試 / How about to add a work but I am not author?

ORCID可以手動新增著作這點,看起來並不像會跟Scopus一樣,會請人花一段時間來審核,而是像是Facebook一樣可以自行新增。於是我們就做了另一個測試:如果在ORCID上故意輸入錯誤的著作文章,而仍然是作者同名同姓的話,那會有什麼結果?

image

這一篇文章雖然不是我的著作,但裡面有另一位真正是嘉義大學Chen, Youg-Ting的作者姓名。

2015-06-26_014759

由於上面輸入了DOI無效,這次我特別從該篇文章的網址找出Scopus Identifier (EID):「2-s2.0-84923949778」來記錄看看。

結果Scopus依然不會同步更新。

文章記錄的來源 / Who add your work?

image

新增的時候,ORCID會記錄新增資料的來源者是誰。如果是我自己新增的記錄,就會記錄我的名字;如果是用上述方式來自於Scopus匯入的資料,就會有Source: Scopus to ORCID的記錄。也許這會是辨識這筆資料到底是否是由權威單位新增的重要欄位,但這也意味著由ORCID並不鼓勵作者自行在ORCID頁面上新增著作,因為作者可能會自己亂寫,就跟我這個測試一樣。


學術出版與ORCID的整合程度 / Is publisher already for ORCID?

ORCID在我的期望中,一直以為是一個能夠自動記錄作者著作的有力工具。照理來說,當研究者投稿到期刊時,如果一併記錄了ORCID,那麼就應該可以自動記錄到ORCID的著作目錄中。

image

教育資料與圖書館學是一個已經從學術傳播的源頭支持ORCID,可以看到這篇「台灣圖書資訊學期刊論文之文內引用錯誤研究」的作者都已經標示了ORCID ID。

image

但是回到作者的ORCID頁面,我們可以注意到這篇文章仍然是作者手動自行增加的記錄,而不是由機構或其他單位自動新增的結果。

教育資料與圖書館學這本期刊是被收錄在EBSCO Host,而不是Scopus。但是EBSCO Host中我找不到如何用ORCID來搜尋作者的方法,在該資料庫中依然是用名字在串聯作者。


在Scopus上無法搜尋ORCID / Could not search ORCID on Scopus

image

在這段過程中,我們發現另一個意外的問題。儘管我們幫陳志銘老師在Scopus的AuthorID正確地對應到ORCID,可是卻沒辦法用Scopus作者搜尋陳志銘老師的ORCID「0000-0002-7088-5516」。

image

另一方面,詹老師的ORCID「0000-0003-3410-605X」甚至連搜尋都無法使用,這可能是因為Scopus以為ORCID只有數字,而「X」卻是在數字範圍之外的錯誤資料。

image

但是我另外搜尋林老師的ORCID「0000-0002-4894-8031」時,Scopus就能夠正確地顯示結果出來。

這也是令我們感到意外的問題,也可能是Scopus目前對於ORCID的整合也尚未成熟吧?


結語:ORCID尚未良好地整合到資料庫 / Conclusion: ORCID is not integrated to database automatically

如果暫時不考慮資料彙集可能是排程或延後進行的問題,那麼根據以上測試的結果我們可以獲得以下結論:

  1. Scopus會收錄作者新發表的文章,並對應到Scopus Author ID作者的著作目錄中。(但不確定這是不是因為ORCID的關係)
  2. Scopus新增的文章不會自動同步到ORCID。
  3. ORCID手動新增的文章不會自動同步到Scopus。不論是對是錯,或是資料是否完整。
  4. Scopus的Author ID即使記錄了ORCID,依然無法全面使用ORCID來搜尋作者。

比較令人困擾的是2跟3無法自動同步的這點。因此以下我跟大家討論一下,看看未來ORCID是否會做到這種程度的可能性。

Scopus可能自動同步到ORCID嗎? / Will Scopus sync to ORCID?

有一種說法是:ORCID是非營利機構,Scopus是盈利企業,所以盈利企業應該不會平白無故貢獻自己辛苦整理的書目資料給ORCID。也就是說,看起來這件事情不太可能。

當然,我們相信在圖書館工作的人都是心地善良、無悔付出的好人,也許有朝一日Scopus良心發現,可能會有所改善。

ORCID可能自動同步到Scopus嗎? / Will ORCID sync to Scopus嗎?

同樣地也有一種說法:ORCID是站在開放的角度,但是Scopus則是盈利事業。因此要一個非營利單位來修改賣錢系統上的資料,也一樣不太可能。

不過在談ORCID到底能不能同步到Scopus的這件事情之前,我想應該要先解決ORCID自行建置的著作目錄可能不具權威性,也就是作者自行亂建錯誤資料的問題。審查資料的正確性需要花費大量的人力,這是一個非營利單位ORCID可能負荷的了的工作嗎?我內心充滿質疑。

ORCID是一個可信賴的目錄嗎? / Is ORCID an authoritative directory?

從上面的討論看下來,目前的ORCID只能說是一個開放資料交換的目錄,有提供現在流行的RESTful API。然而,ORCID尚未有良好的權威控管,也沒有全自動地跟其他資料庫之間整合,以維護作者資料的正確性。

ORCID要做到廣納百川、成為最終大家參考、分析的權威目錄,可能還得要先克服前面的眾多問題。到底是否值得在ORCID維護自己的著作目錄,我認為可能還要再觀望一陣子比較好。

image

題外話,在Google學術搜尋上維護我的著作目錄如何呢?

(more...)

PostgreSQL高可用架構:pgpool2虛擬應用範本 / HA structure of PostgreSQL: pgpool2 Virtual Application Template

PostgreSQL高可用架構:pgpool2虛擬應用範本 / HA structure of PostgreSQL: pgpool2 Virtual Application Template

image

傳統的關聯式資料庫PostgreSQL一般而言都是裝在本機端上運作,但是搭配了pgpool中介工具,就能夠串聯多臺PostgreSQL伺服器,以達到高可用(High Available)的架構。我將pgpool與PosgreSQL的高可用架構做成了兩臺虛擬應用範本pgpool-master跟pgpool-slave提供大家下載,並說明擴充的方法。


什麼是pgpool? / What is pgpool?

pgpool是PostgreSQL的中介工具(middleware),現在的版本為pgpool-II,所以軟體名稱通常是pgpool2,以下內容翻譯自pgpool Wiki

pgpool-II採BSD開放原始碼授權,提供了以下功能:

  • 資料庫連線池管理(Connection Pooling):pgpool-II保存連線到PostgreSQL伺服器的連線,當同樣設定的人進行連線時,就拿以保存的連線來使用。這可以降低資料庫連線的額外負擔(overhead),並且改善系統整體效能。(布丁註:早期我在DSpace上使用Proxool也是同樣的目的)
  • 資料複製(replication):pgpool-II可以管理多個PostgreSQL伺服器。使用複製功能,可以即時將資料備份在2個或更多的實體硬碟中,如此一來即使硬碟損毀,伺服器仍然可以繼續提供服務。
  • 負載平衡(Load Balancing):當資料複製功能開啟時,在任何伺服器上執行SELECT查詢時的會獲得同樣地結果。pgpool-II將SELECT查詢分散到多個PostgreSQL伺服器上,以改進整體的效能。PostgreSQL伺服器的數量越多,效能提升的幅度越多。負載平衡特別適用於很多使用者同時執行大量查詢的時候。
  • 限制超量的資料庫連線:PostgreSQL會限制最大同時連線數量,超量的連線將會被拒絕。調整資料庫連線上限會增加資源消耗量,並影響系統效能。pgpool-II也可以設定連線數量的上限,而超過的連線將會列入等待,而不會立即回傳錯誤
  • 並行查詢(Parallel Query):使用並行查詢功能,查詢本身會切割成多個部分,並同時在多臺伺服器上同時進行查詢、取回資料、並進行合併,以此降低整體執行的時間。(布丁註:類似RAID-0的概念) 並行查詢的功能最適合用在查詢大規模的資料上。

pgpool-II將PostgreSQL伺服器作為後端與前端的通訊接口,並仰賴與伺服器之間的連線。因此,資料庫應用程式(前端,意思是網站)會將pgpool-II視為一臺PostgreSQL伺服器,而資料庫伺服器(後端)則會視pgpool-II為它的客戶端。因為pgpool-II對伺服器與客戶端來說都是透明的,因此既有的資料庫應用程式(網站)可以直接使用pgpool-II而幾乎不需要更改設定。(布丁註:通常修改連接埠即可)

(我翻譯完才發現pgpool有中文wiki…)

pgpool-II的配置 / Configuring pgpool-II

pgpool有很多模式,每一種模式都會啟用或關閉部分功能,詳細的設定一般會位於 /etc/pgpool.conf 與 /etc/pcp.conf。讓我們來看看pgpool的四種模式:

功能/模式 原始模式(*3) 複製模式 主/備模式 並行查詢模式
連接池管理 X O O O
資料複製 X O X (*1)
負載平衡 X O O (*1)
故障恢復 O O O X
線上恢復 X O (*2) X
並行查詢 X X X O
需要伺服器數量 1 或更多 2 或更多 2 或更多 2 或更多
是否需要系統資料庫
  • O表示可用、X表示不可用。
  • *1 並行模式需要同時打開複製與負載平衡的設定,但是複製和負載平衡無法用於並行查詢模式中的分佈式表。
  • *2 線上恢復可以和串流複製同時使用。
  • *3 客戶端僅是透過pgpool-II連接到PostgreSQL伺服器。這種模式僅用於限制連到伺服器的連接數,或著在多臺機器上啟用故障恢復的功能。

本文主要的目標在於第二種模式:複製模式。以下大致上說明安裝的過程,至於結果請直接用虛擬應用範本就好了。

安裝pgpool-II / Install pgpool-II

我以Turunkey Linux的PostgreSQL虛擬應用範本為基礎,以apt-get安裝pgpool2,然後修改配置後完成。大致做法如下:

  1. 下載Turnkey Linux Postgresql:這個虛擬應用範本做得很貼心,安裝完成之後可以自動提示設定PostgreSQL預設帳號postgres的密碼,使用https連線就會開啟phpPgAdmin
  2. 從虛擬應用範本建立虛擬機器:做法請看我之前寫的教學:Proxmox VE 3安裝與建立OpenVZ虛擬機器。建立的虛擬機器有兩臺,各別是pgpool-master與pgpool-slave。以下步驟大部分都會在這兩台上進行。這兩台伺服器的IP為:
    1. pgpool-master: 192.168.11.110
    2. pgpool-slave: 192.168.11.111
  3. 啟動Turnkey Linux Postgresql:Turnkey Linux的虛擬應用範本啟動時都要先進行初始化,大概要花10分鐘的時間。
  4. 安裝pgpool2:安裝指令為:
    apt-get install –y pgpool2
  5. 設定伺服器之間SSH的連線:
    1. 先設定postgres帳號的密碼:
      passwd postgres
      設定密碼為: password
    2. 切換到posgresql帳號:
      su postgres
    3. 在pgpool-master電腦上建立ssh金鑰:
      ssk-keygen
      當詢問passphrase的時候,直接enter就好了,不設定passphrase。
      image
    4. 複製金鑰到pgpool-slave:
      ssh-copy-id postgres@192.168.11.111
      詢問密碼時,輸入剛剛設定postgres的密碼:password
      image
  6. 設定PostgreSQL的連線權限:
    1. 修改/etc/postgresql/9.1/main/pg_hba.conf ,注意,路徑可能會因為PostgreSQL的版本而有所不同,我用的是9.1版本。
    2. 將METHOD中使用peer與md5的登入方式全部改成password。例如:
      host    all         all         0.0.0.0/0             password #md5
      image
  7. 設定 /etc/pgpool2/pcp.conf
    image
    1. 建立要連線帳號的md5密碼,我們用預設帳號postgres來做這件事情:
      pg_md5 postgres –p
    2. 輸入密碼,我建立公開範本的統一密碼都是password
    3. 取得md5編碼:「88e2d8cd1e92fd5544c8621508cd706b」
    4. 連同帳號組成「postgres:88e2d8cd1e92fd5544c8621508cd706b」,加到 /etc/pgpool2/pcp.conf最後一行
  8. 調整 /etc/pgpool2/pgpool.conf 基本設定:
    1. listen_addresses = '*' # 表示可讓任何其他伺服器連線到pgpool。
    2. replication_mode = on  # 啟用資料複製
    3. load_balance_mode = on # 啟用負載平衡
  9. 調整 /etc/pgpool2/pgpool.conf 連接PostgreSQL伺服器的設定,backend_hostname1就是pgpool-slave:
    backend_hostname1 = 'localhost'
    backend_port1 = 5432
    backend_weight1 = 1
    backend_hostname1 = '192.168.11.111'
    backend_port1 = 5432
    backend_weight1 = 1

    image
  10. 修改phpPgAdmin的連接埠設定 /etc/phppgadmin/config.inc.php:
    $conf['servers'][0]['port'] = 5433;
    這樣phppgadmin就會連到pgpool,而不是原本的PostgreSQL。
  11. 重新啟動pgpool-II跟PostgreSQL:
    service pgpool2 restart
    service pgpool2 postgresql
  12. 開啟phpPgAdmin看看成果:
    https://192.168.11.110
    image
    這個網址應該可以打開phpPgAdmin,然後請用postgres / password來登入。登入之後的任何操作都會在pgpool-master跟pgpool-slave上生效。這就代表成功了。

安裝pgpoolAdmin / Install pgpoolAdmin

pgpoolAdmin是用來管理pgpool-II的PHP網頁管理工具。我們可以用它來快速確認pgpool是否正常運作。安裝方法參考自Aric Gardner的PGPOOL-II-ADMIN安裝教學。我把pgpoolAdmin跟phpPgAdmin結合,大致上步驟如下:

  1. 下載pgpoolAdmin:
  2. 解壓縮後,更改目錄名為admin-tool
  3. 修改擁有者為root
    chown -R root admin-tool
  4. 修改目錄與檔案為777
    chmod 777 templates_c
    chmod 777 conf/pgmgt.conf.php
  5. 放置到phpPgAdmin的網頁目錄:/usr/share/phppgadmin/admin-tool/
  6. 開啟網頁 https://192.168.11.110/admin-tool/install,按照指示設定。主要設定包括了
    1. 修改以下目錄與檔案的修改為777 (使用chmod)
      1. /etc/pgpool2/pcp.conf
      2. /etc/pgpool2//etc/pgpool2/pgpool.conf
    2. pgpool.conf File (string): /etc/pgpool2/pgpool.conf
    3. Password File (string): /etc/pgpool2/pcp.conf
    4. pgpool Command (string): /usr/sbin/pgpool
    5. PCP Directory (string): /usr/sbin/
  7. 設定完成後,刪除install資料夾
    rm -rf /usr/share/phppgadmin/admin-tool/install/

開啟網頁:https://192.168.11.110/admin-tool/status.php

image

設定完成。


下載pgpool虛擬應用範本 / Download pgpool Virtual Application Template

經過以上漫長的安裝過程之後,最後成果就是pgpool-master跟pgpool-slave這兩個虛擬應用範本啦。

建立虛擬應用範本的方法請參考我之前寫的教學:Proxmox VE 3安裝與建立OpenVZ虛擬機器

image

建置好之後,設定啟動,預設就是這兩台伺服器的PostgreSQL高可用架構。


pgpool虛擬應用範本操作教學 / pgpool Virtual Application Guide

接下來我要說明使用教學。在以下教學中的網路設定如下:

  • pgpool-master: 192.168.11.110 (主要操作都在這進行)
  • pgpool-slave:192.168.11.111
  • pgpool-slave2 (複製pgpool-slave):192.168.11.112
如何操作pgpool?

請使用phpPgAdmin來操作pgpool,操作方式就跟原本操作PostgreSQL一樣!

image

網址是: https://[pgpool-master-ip]/

如何觀看pgpool的運作狀況?

請使用pgpoolAdmin,網址是:https://[pgpool-master-ip]/admin-tool/

image

如何連接到pgpool? / How to connect to pgpool?

很簡單,使用原本連接到PostgreSQL的設定方式,連線到pgpool-master,然後連接埠改成5433就可以了。(PostgreSQL預設連接埠為5432)

CodeIgnitor的資料庫連線設定來舉例,

原本的設定可能是連線到localhost本機端:
$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "password";
$db['default']['database'] = "database_name";
$db['default']['dbdriver'] = "postgres";

現在要改成連線到pgpool-master (假設IP為192.168.11.110),而且要指定連接埠為5433:
$db['default']['hostname'] = "192.168.11.110";
$db['default']['username'] = "root";
$db['default']['password'] = "password";
$db['default']['database'] = "database_name";
$db['default']['dbdriver'] = "postgres";
$db['default']['port'] = 5433;

如何增加pgpool的數量? / How to extend pgpool structure?

首先,我們要再建置一臺pgpool-slave,設定為pgpool-slave2,設定網路位址為192.168.11.112

2015-06-20_000510

然後來到pgpool-master上,修改 /etc/pgpool2/pgpool.conf。加入以下設定:(因為是第三臺,所以編號為2,下一臺編號就是3,依此類推)
backend_hostname2 = '192.168.11.112'
backend_port2 = 5432
backend_weight2 = 1

重新啟動pgpool:
service pgpool2 restart

從pgpoolAdmin來看,pgpool-slave2已經加入節點中。

image

有其他問題怎麼辦? / Other Questions

請使用Blogger的「張貼留言」來描述您的問題。


結論 / Conclusion

其實最近我連續做了很多個OpenVZ的虛擬應用範本,可是大部分是做給實驗室內部使用的,因此還沒能花時間轉換成可以發佈的版本。老實說,用OpenVZ製作虛擬應用範本有點麻煩。即使我用了Turnkey Linux來製作虛擬機器,可是檔案還是有200MB以上,要找到空間擺放,實在是不太容易。而且如果我要修改一個檔案,那就要重新打包、上傳,這樣子維護虛擬應用範本實在是太沒有效率。

OpenVZ虛擬應用範本在更新上實在很麻煩,因此我開始關注起Docker的倉庫運作方式。不知道這個倉庫的運作方不方便使用?

(more...)