linux-HA 中heartbeat 的pg啟動指令碼的bug 及其應對方案。

babyyellow發表於2013-04-26
pg  HA 上線後,我們遭遇到第一個故障,

由於啟動了oracle_fdw 元件,oracle 的環境變數是寫在postgres $HOME/.bash_profile 裡面

HA 是由root 使用者啟動的。

啟動資料庫的命令在  /usr/lib/ocf/resource.d/heartbeat/pgsql 指令碼的
runasowner()函式下面。

啟動的指令碼是這樣寫的
ocf_run $quietrun $loglevel su $OCF_RESKEY_pgdba -c "cd $OCF_RESKEY_pgdata; $*"

由於這裡的su 沒有使用 su -   導致,無法啟動postgres使用者下面的環境變數
導致oracle 的環境變數無法被啟用,在oracle-fdw 的庫檔案oracle_fdw.so 檔案呼叫oracle 的客戶端的so檔案 libclntsh.so.11.1

導致找不到so 檔案,我們曾經嘗試,把這個so檔案連結到pg的lib目錄下,再執行oracle_fdw的時候,解決了so檔案找不到的問題,但是報的錯誤就是無法取到oracle 的envhandler

看來只有重啟,載入環境變數才能解決了。


這裡還有必須要把oracle的環境變數載入到HA 的環境變數裡,所以不能簡單的透過重啟資料庫解決,需要重啟整個HA叢集來過載。


曾將嘗試 吧runasowner 函式的su 修改為su -  但是不成功,報錯為找不到postgres 使用者,同時報 PGDATA 目錄不可寫。
為了儘快解決問題,沒有繼續深究下去,

於是把oracle 的環境變數 跟PG的環境 變數加到了 /etc/profile 裡面

過載root使用者,然後重新啟動HA 叢集。 問題解決。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/133735/viewspace-759301/,如需轉載,請註明出處,否則將追究法律責任。

相關文章