動態

詳情 返回 返回

pg_auto_failover 環境變量導致的show命令錯誤 - 動態 詳情

今天遇到一個看似奇怪的問題,經過反覆的重啓,甚至重啓操作系統,重裝pg_auto_failover,都沒有解決,冷靜下來思考之後,才發現是環境變量導致的,有必要記錄一下

環境

一個ubuntu的pg_auto_failover monitor節點,通過源碼編譯安裝的,monitor節點的實例是自定義端口號,monitor 節點初始化命令如下
pg_autoctl create monitor --pgdata /usr/local/pgsql16/pg9300/data/ --auth trust --ssl-self-signed --hostname ubuntu16 --pgport 9300

異常

之後啓動pgautofailover服務,一切正常,但是當執行pg_autoctl show uri的時候,發現不對勁了,提示錯誤説:
Failed to connect to "postgres://autoctl_node@ubuntu03:5432/pg_auto_failover?sslmode=require", retrying until the server is ready
乖乖,我可是明確地定義的--pgport 9300端口號啊,autoctl為什麼去找ubuntu03:5432???

這台虛擬機是通過克隆而來的,已經克隆N多層了,不知道源頭的系統究竟是哪個,但是修改了hosts文件等,已經完全重命名了,當前主機名為ubuntu16,為什麼pg_autoctl show uri會找ubuntu03:5432?
經過反覆檢查/etc/hosts,/etc/hostname等,都沒有問題,都是新的主機名ubuntu16。
經過重啓,重裝pg_auto_failover服務等等都沒有解決。


冷靜下來思考了一下,這裏報錯,既然pg_autoctl 找的是5432端口的實例,5432是默認的實例端口號,那麼極有可能是找不到當前實例,問題就出在配置上。
後面檢查了一下/etc/profile,果然有問題,原來PGDATA=/usr/local/pgsql16/pg9000/data/是一個不存在的路徑,
可以推斷出來,當環境變量的PGDATA不存在的時候,會找默認的環境變量,難怪是5432端口號,隨後將這個環境變量修改成pgautofailover的monitor節點的數據路徑之後,問題解決。

export LANG=en_US.utf8
export PGDATA=/usr/local/pgsql16/pg9000/data/--問題就出在這裏,這是克隆的原始的機器上的配置,當前monitor節點的數據目錄是/usr/local/pgsql16/pg9300/data/
export PGHOME=/usr/local/pgsql16/server
export PATH=/usr/local/pgsql16/server/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/pgsql16/server/lib

image

 

但還是有一個問題,始終不知道默認尋找的主機名從哪裏來?

Add a new 評論

Some HTML is okay.