這篇文章將為大家詳細(xì)講解有關(guān)PostgreSQL如何使用repmgr實(shí)現(xiàn)高可用,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)主營(yíng)綏芬河網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都app軟件開發(fā)公司,綏芬河h5小程序制作搭建,綏芬河網(wǎng)站營(yíng)銷推廣歡迎綏芬河等地區(qū)企業(yè)咨詢
1 大廠支持
2 配置簡(jiǎn)單靠譜,沒有眾多依賴包安裝后,還出問題讓你有想自殺的意愿,或者是相關(guān)的技術(shù)文字少,解決問題困難的尿點(diǎn)。
這個(gè)高可用的方案已經(jīng)在生產(chǎn)上使用了有一段時(shí)間,目前沒有出過問題,之前寫過,但是在這一段時(shí)間的使用中也發(fā)現(xiàn)了一些問題,所以準(zhǔn)備詳細(xì)的對(duì)這個(gè)高可用方案來詳細(xì)的說說,也避免某些挑刺的說 PG 沒有靠譜的高可用這樣的笑話,繼續(xù)存在。
這個(gè)高可用的方式就是repmgr ,2象限公司的產(chǎn)品。(免費(fèi)的),以下的文字中的PG的版本是 11.2 ,REPMGR 是 4.4 版本。由于功能比較多,所以一次也寫不完,只能分期的寫,今天的文字要做到的是 兩臺(tái) POSTGRESQL ,完成手動(dòng)切換。
首先你需要安裝2臺(tái)postgresql ,這里假設(shè)你已經(jīng)安裝完畢了(安裝當(dāng)然是編譯安裝,如果不是編譯安裝則我不保證不會(huì)出其他的問題,之前有一篇是關(guān)于編譯安裝的,當(dāng)然也可以去 “德哥”的github 上去找專業(yè)的文字關(guān)于POSTGRESQL 的安裝,水不淺)
1 安裝完畢的POSTGRESQL首先能有進(jìn)行 replication 的條件
2 兩臺(tái)postgresql 要配置一樣,包含配置文件,以及extension等等
這里為了便于下面理解兩臺(tái)機(jī)器的
192.168.198.21 主庫
192.168.198.22 備庫
其實(shí)我們配置一臺(tái)機(jī)器就可以了,我們?cè)谝慌_(tái)機(jī)器(主機(jī))
操作以下的命令
create database repmgr;
create user repmgr with password 'repmgr'; (密碼您隨意)
alter user repmgr superuser login;
alter database repmgr owner to repmgr;
對(duì) repmgr 解包進(jìn)行編譯
在確認(rèn)已經(jīng)編譯好repmgr 后,需要對(duì)兩臺(tái)機(jī)器進(jìn)行ssh 免密的工作
這里的免密建議是基于你操控postgresql 的賬戶,而不是root
(注:免密的工作這里如是MySQL的DBA 這將不是很難理解的工作,因?yàn)镸HA就是這么干的)
另外還需要配置repmgr 高可用使用的通訊賬戶,也需要進(jìn)行免密的工作,需要在你操作postgresql的賬戶中目錄位置設(shè)置.pgpass ,內(nèi)容請(qǐng)參見下圖
其實(shí)如果配置過mha ,對(duì)這樣的事情也是很容易理解)
另外也需要對(duì) pg_hba.conf 進(jìn)行配置,配置方法見下圖 (可能懂的會(huì)在這里有疑問,但這里的確是需要這樣設(shè)置,官網(wǎng)的文檔)
https://repmgr.org/docs/4.4/quickstart-authentication.html
在做完這一切后,我們需要配置 repmgr.conf 文件 (其實(shí)這還是和MHA 的配置方式類似,所以如果你是MYSQL DBA 則PG的高可用方式的學(xué)習(xí)成本會(huì)很低)
node_id=1 集群中的標(biāo)識(shí) 注意這個(gè)一個(gè)集群不能有重復(fù),一般用數(shù)字來
node_name='192.168.198.21' 需要給節(jié)點(diǎn)一個(gè)注冊(cè)的名字,這里可以使用IP 也可以使用機(jī)器名等等
conninfo='host=192.168.198.21 dbname=repmgr user=repmgr connect_timeout=2'
本地連接信息,repmgr 操作本地時(shí)的連接信息
data_directory='/pgdata/data' 指定當(dāng)前主機(jī)的數(shù)據(jù)目錄
replication_user='repmgr' 進(jìn)行復(fù)制的操作的賬戶
replication_type='physical' 復(fù)制的方式
repmgr_bindir='/usr/local/postgres/bin' repmgr 的執(zhí)行文件的目錄
pg_bindir='/usr/local/postgres' 配置PG的執(zhí)行文件
另一臺(tái)機(jī)器,需要在 node_id , node_name , conninfo 等位置做改變,
我們到目前小結(jié)一下當(dāng)前的兩臺(tái)機(jī)器的狀況
主機(jī),已經(jīng)注冊(cè)repmgr ,服務(wù)器開啟的狀態(tài),可以接受repmgr 的遠(yuǎn)程連接免密的方式,備庫關(guān)機(jī),備庫的數(shù)據(jù)目錄是清空的狀態(tài)(因?yàn)橐_始進(jìn)行主庫拉數(shù)據(jù)的操作)
下面我們就要使用一下的命令來進(jìn)行 --dry-run (mysql的DBA 是不是很驚喜 和pt 工具一路貨)
repmgr -h 192.168.198.21 -U repmgr -d repmgr -f /etc/repmgr.conf standby clone --dry-run
可以看到--dry-run 沒有問題直接執(zhí)行命令進(jìn)行 clone
repmgr -h 192.168.198.21 -U repmgr -d repmgr -f /etc/repmgr.conf standby clone
然后在clone 成功后,其實(shí)就是pg_basebackup ,在這以后需要修改standby 機(jī)器中的postgresql,conf 文件中的 listen 地址改為本機(jī)的地址
(這些工作其實(shí)也是做 primary standby 的工作,和高可用本身是沒有關(guān)系的,知識(shí) repmgr 幫助你做了這件事)
啟動(dòng)服務(wù)器,正常,并開始復(fù)制
如果到這里出了問題,可能的原因
1 pg_hba.conf 設(shè)置的有問題
2 postgresql.conf 從庫 沒有改 postgresql,conf 監(jiān)聽地址
(請(qǐng)補(bǔ)充POSTGRESQL 基礎(chǔ)知識(shí))
下一步我們就需要對(duì)復(fù)制進(jìn)行一個(gè)驗(yàn)證(如果有自信就跳過此步驟)
在從庫我們查看目前的復(fù)制是否OK ,下圖顯示OK
然后在從庫執(zhí)行
repmgr -f /etc/repmgr.conf standby register
注冊(cè)成功后
目前大部分的高可用(手動(dòng)切換)的工作已經(jīng)完成了百分之80%
repmgr -f /etc/repmgr.conf cluster show
通過上面的圖和命令可以很順利查看,兩臺(tái)機(jī)器的主從狀態(tài)。
寫到下面,可能有人要吐槽我了,人家都自動(dòng),你手動(dòng),你腦子進(jìn)水了。
1 POSTGRESQL 的repmgr 主從切換,是可以自動(dòng)的,但這期寫不完
2 如果使用mysql 比較順溜的,到這里馬上就可以反映出一個(gè)問題,MHA 我切換我也沒有用 MHA 去偵測(cè),我也是通過其他的方式來檢測(cè),然后使用 MHA 命令切換方式來進(jìn)行高可用的切換。
話說到這里已經(jīng)說的很明了,你要是有MYSQL的高可用MHA的解決方案,到這里你自己已經(jīng)有主意了,還有必要看下去的原因就是,怎么手動(dòng)切換。然后你就可以放飛自我了。
想說 POSTGRESQL 沒有靠譜高可用方式的,打臉不
下面就開始手動(dòng)切換
repmgr -f /etc/repmgr.conf standby switchover -U repmgr --verbose
好了在切換命令開始后,主從開始切換,參見下圖
切換后,我們?cè)谥鳈C(jī)上查看狀態(tài)
主機(jī)已經(jīng)變成從庫,從庫已經(jīng)升級(jí)為主庫
在從庫上查看,很清晰的告訴你,主庫已經(jīng)是 22 ,從庫變成了21
這也是和MHA 不一樣的地方,如果你的失敗的主庫還有挽救的余地,則還是可以讓他變成從庫,繼續(xù)服務(wù)的,當(dāng)然也是有時(shí)間限制的,默認(rèn)一分鐘的嘗試,否則就放棄了。
關(guān)于“PostgreSQL如何使用repmgr實(shí)現(xiàn)高可用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。