linux-HA 中heartbeat 的pg啟動指令碼的bug 及其應對方案。
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 叢集。 問題解決。
由於啟動了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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- linux-ha heartbeat 搭建Linux
- pg 資料庫HA 啟動指令碼的兩個假設資料庫指令碼
- ORACLE的啟動指令碼Oracle指令碼
- mysql 的一個監控指令碼,監控heartbeatMySql指令碼
- 基於linux-HA 的pg 高可用平臺正式部署Linux
- Slackware啟動指令碼與System V啟動指令碼的區別何在?(轉)指令碼
- mysql mon 的一個監控指令碼,監控heartbeatMySql指令碼
- httpd啟動指令碼httpd指令碼
- CentOS的System V init啟動指令碼CentOS指令碼
- 專案啟動指令碼的編寫指令碼
- 啟動PHP內建FastCGIServer的指令碼PHPASTServer指令碼
- pg 資料庫日誌檔案誤刪除後的應對方案資料庫
- 啟動vi時自動執行的指令碼指令碼
- Java中的偽共享以及應對方案Java
- 不同人對BUG的反應,程式設計師:誰動了我的程式碼?程式設計師
- extcon驅動及其在USB驅動中的應用
- VS 開啟程式碼檔案時,在解決方案中自動定位到對應檔案位置
- MacOS 啟動 -- Redis指令碼MacRedis指令碼
- Tomcat啟動指令碼Tomcat指令碼
- SQL Server啟動指令碼SQLServer指令碼
- 一行js程式碼識別Selenium+Webdriver及其應對方案JSWeb
- linux-HA 系統運用在pg資料庫的一些想法Linux資料庫
- 對網路卡中斷繫結的指令碼指令碼
- Linux中的衝突問題及其應對策略(轉)Linux
- Ubuntu自動啟動配置指令碼Ubuntu指令碼
- 網路卡自動啟動指令碼指令碼
- 淺析py-faster-rcnn中不同版本caffe的安裝及其對應不同版本cudnn的解決方案ASTCNNDNN
- 建立自啟動檔案指令碼的例項指令碼
- Tomcat 7 啟動分析(一)啟動指令碼Tomcat指令碼
- QTP中對映驅動器和複製資料夾的指令碼QT指令碼
- shell指令碼中的變數及應用指令碼變數
- linux-啟動指令碼Linux指令碼
- Linux自啟動指令碼Linux指令碼
- UNIX下oracle啟動指令碼Oracle指令碼
- SAP系統不能啟動時的對應
- windows下oracle自動啟動指令碼WindowsOracle指令碼
- centos 自動啟動指令碼和自啟動服務CentOS指令碼
- 使用Shell指令碼查詢程式對應的程式ID指令碼