溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PostgreSQL如何使用repmgr實現(xiàn)高可用

發(fā)布時間:2021-11-26 09:20:38 來源:億速云 閱讀:518 作者:小新 欄目:大數(shù)據(jù)

這篇文章將為大家詳細講解有關(guān)PostgreSQL如何使用repmgr實現(xiàn)高可用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

1 大廠支持

2 配置簡單靠譜,沒有眾多依賴包安裝后,還出問題讓你有想自殺的意愿,或者是相關(guān)的技術(shù)文字少,解決問題困難的尿點。

這個高可用的方案已經(jīng)在生產(chǎn)上使用了有一段時間,目前沒有出過問題,之前寫過,但是在這一段時間的使用中也發(fā)現(xiàn)了一些問題,所以準備詳細的對這個高可用方案來詳細的說說,也避免某些挑刺的說 PG 沒有靠譜的高可用這樣的笑話,繼續(xù)存在。

這個高可用的方式就是repmgr ,2象限公司的產(chǎn)品。(免費的),以下的文字中的PG的版本是 11.2 ,REPMGR 是 4.4 版本。由于功能比較多,所以一次也寫不完,只能分期的寫,今天的文字要做到的是 兩臺 POSTGRESQL ,完成手動切換。

PostgreSQL如何使用repmgr實現(xiàn)高可用

首先你需要安裝2臺postgresql ,這里假設(shè)你已經(jīng)安裝完畢了(安裝當然是編譯安裝,如果不是編譯安裝則我不保證不會出其他的問題,之前有一篇是關(guān)于編譯安裝的,當然也可以去 “德哥”的github 上去找專業(yè)的文字關(guān)于POSTGRESQL 的安裝,水不淺)

1 安裝完畢的POSTGRESQL首先能有進行 replication 的條件

2 兩臺postgresql 要配置一樣,包含配置文件,以及extension等等

這里為了便于下面理解兩臺機器的 

192.168.198.21 主庫

192.168.198.22 備庫

其實我們配置一臺機器就可以了,我們在一臺機器(主機)

操作以下的命令

create database repmgr;

create user repmgr with password 'repmgr';  (密碼您隨意)

alter user repmgr superuser login;

alter database repmgr owner to repmgr;

對 repmgr 解包進行編譯

PostgreSQL如何使用repmgr實現(xiàn)高可用

在確認已經(jīng)編譯好repmgr 后,需要對兩臺機器進行ssh 免密的工作

這里的免密建議是基于你操控postgresql 的賬戶,而不是root

(注:免密的工作這里如是MYSQL的DBA 這將不是很難理解的工作,因為MHA就是這么干的)

另外還需要配置repmgr 高可用使用的通訊賬戶,也需要進行免密的工作,需要在你操作postgresql的賬戶中目錄位置設(shè)置.pgpass ,內(nèi)容請參見下圖

其實如果配置過mha ,對這樣的事情也是很容易理解)

PostgreSQL如何使用repmgr實現(xiàn)高可用

另外也需要對 pg_hba.conf 進行配置,配置方法見下圖 (可能懂的會在這里有疑問,但這里的確是需要這樣設(shè)置,官網(wǎng)的文檔)

https://repmgr.org/docs/4.4/quickstart-authentication.html

PostgreSQL如何使用repmgr實現(xiàn)高可用

在做完這一切后,我們需要配置 repmgr.conf 文件 (其實這還是和MHA 的配置方式類似,所以如果你是MYSQL DBA 則PG的高可用方式的學習成本會很低)

PostgreSQL如何使用repmgr實現(xiàn)高可用

node_id=1  集群中的標識 注意這個一個集群不能有重復,一般用數(shù)字來

node_name='192.168.198.21'   需要給節(jié)點一個注冊的名字,這里可以使用IP 也可以使用機器名等等

conninfo='host=192.168.198.21 dbname=repmgr user=repmgr connect_timeout=2'

本地連接信息,repmgr 操作本地時的連接信息

data_directory='/pgdata/data'   指定當前主機的數(shù)據(jù)目錄

replication_user='repmgr'  進行復制的操作的賬戶

replication_type='physical'  復制的方式

repmgr_bindir='/usr/local/postgres/bin'   repmgr 的執(zhí)行文件的目錄

pg_bindir='/usr/local/postgres'  配置PG的執(zhí)行文件

另一臺機器,需要在 node_id , node_name , conninfo 等位置做改變,

我們到目前小結(jié)一下當前的兩臺機器的狀況

主機,已經(jīng)注冊repmgr ,服務器開啟的狀態(tài),可以接受repmgr 的遠程連接免密的方式,備庫關(guān)機,備庫的數(shù)據(jù)目錄是清空的狀態(tài)(因為要開始進行主庫拉數(shù)據(jù)的操作) 

下面我們就要使用一下的命令來進行 --dry-run (mysql的DBA 是不是很驚喜 和pt 工具一路貨)

repmgr -h 192.168.198.21 -U repmgr -d repmgr -f /etc/repmgr.conf standby clone --dry-run

PostgreSQL如何使用repmgr實現(xiàn)高可用

可以看到--dry-run 沒有問題直接執(zhí)行命令進行 clone

repmgr -h 192.168.198.21 -U repmgr -d repmgr -f /etc/repmgr.conf standby clone 

PostgreSQL如何使用repmgr實現(xiàn)高可用

然后在clone 成功后,其實就是pg_basebackup ,在這以后需要修改standby 機器中的postgresql,conf 文件中的 listen 地址改為本機的地址

(這些工作其實也是做 primary standby 的工作,和高可用本身是沒有關(guān)系的,知識 repmgr 幫助你做了這件事)

啟動服務器,正常,并開始復制

PostgreSQL如何使用repmgr實現(xiàn)高可用

如果到這里出了問題,可能的原因

1 pg_hba.conf 設(shè)置的有問題

2 postgresql.conf 從庫 沒有改 postgresql,conf 監(jiān)聽地址

(請補充POSTGRESQL 基礎(chǔ)知識)

下一步我們就需要對復制進行一個驗證(如果有自信就跳過此步驟)

在從庫我們查看目前的復制是否OK ,下圖顯示OK

PostgreSQL如何使用repmgr實現(xiàn)高可用

然后在從庫執(zhí)行

repmgr -f /etc/repmgr.conf standby register

注冊成功后

PostgreSQL如何使用repmgr實現(xiàn)高可用

目前大部分的高可用(手動切換)的工作已經(jīng)完成了百分之80%

 repmgr -f /etc/repmgr.conf cluster show

PostgreSQL如何使用repmgr實現(xiàn)高可用

通過上面的圖和命令可以很順利查看,兩臺機器的主從狀態(tài)。

寫到下面,可能有人要吐槽我了,人家都自動,你手動,你腦子進水了。

1 POSTGRESQL 的repmgr 主從切換,是可以自動的,但這期寫不完

2 如果使用mysql 比較順溜的,到這里馬上就可以反映出一個問題,MHA 我切換我也沒有用 MHA 去偵測,我也是通過其他的方式來檢測,然后使用 MHA 命令切換方式來進行高可用的切換。

話說到這里已經(jīng)說的很明了,你要是有MYSQL的高可用MHA的解決方案,到這里你自己已經(jīng)有主意了,還有必要看下去的原因就是,怎么手動切換。然后你就可以放飛自我了。

想說 POSTGRESQL 沒有靠譜高可用方式的,打臉不

下面就開始手動切換

repmgr -f /etc/repmgr.conf standby switchover -U repmgr  --verbose

PostgreSQL如何使用repmgr實現(xiàn)高可用

好了在切換命令開始后,主從開始切換,參見下圖

PostgreSQL如何使用repmgr實現(xiàn)高可用

切換后,我們在主機上查看狀態(tài)

PostgreSQL如何使用repmgr實現(xiàn)高可用

主機已經(jīng)變成從庫,從庫已經(jīng)升級為主庫

PostgreSQL如何使用repmgr實現(xiàn)高可用

在從庫上查看,很清晰的告訴你,主庫已經(jīng)是 22 ,從庫變成了21

PostgreSQL如何使用repmgr實現(xiàn)高可用

這也是和MHA 不一樣的地方,如果你的失敗的主庫還有挽救的余地,則還是可以讓他變成從庫,繼續(xù)服務的,當然也是有時間限制的,默認一分鐘的嘗試,否則就放棄了。

關(guān)于“PostgreSQL如何使用repmgr實現(xiàn)高可用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI