搭建主從復(fù)制的postgresql

基于Docker的postgresql主備部署文檔

1 背景

目前項(xiàng)目的很多基礎(chǔ)組件需要用到postgresql感帅,且要求主從復(fù)制的部署方式.根據(jù)gitlab對(duì)postgres的要求,鏡像采用官方postgres:10.12鏡像.

2 環(huán)境

postgresql部署到專有云的ECS上.

10.129.8.212 部署主數(shù)據(jù)庫
10.129.8.214 部署從數(shù)據(jù)庫

3 安裝部署

3.1 主服務(wù)器

  1. docker拉取鏡像
docker pull postgres:10.12
  1. 啟動(dòng)容器
docker run -d --name kong-database \
-p 5432:5432 \
-e POSTGRES_PASSWORD=Qwer@1234 \
-v /home/work/data/postgres:/var/lib/postgresql/data \
postgres:10.12

-v : 建立數(shù)據(jù)卷,將 docker 內(nèi)的文件系統(tǒng)掛載到宿主機(jī)上帚屉, linux 目錄:/home/work/data/postgres, docker 容器對(duì)應(yīng)的路徑 /var/lib/postgresql/data

  1. 進(jìn)入啟動(dòng)的 docker 容器內(nèi)部吕粹,新建用于歸檔日志的目錄
docker exec -it kong-database /bin/bash
mkdir -p /var/lib/postgresql/data/pg_archive
  1. 進(jìn)入 postgres 客戶端庭敦,新建用于同步數(shù)據(jù)的用戶
# 切換到 postgres 用戶
su postgres 
# 進(jìn)去 postgres 客戶端
psql
# 創(chuàng)建用戶
CREATE ROLE replica login replication encrypted password 'replica';

注:注意語句最后添加分號(hào)
創(chuàng)建用戶成功之后历涝,控制臺(tái)會(huì)顯示 "CREATE ROLE"扭倾,利用 \du 命令可以查看 postgres 的用戶列表

[圖片上傳失敗...(image-cc7ae0-1586956407823)]
通過 \q 退出 postgres 控制臺(tái)淀零,并通過 exit 退出 postgres 用戶

  1. 修改 pg_hba.conf 文件

修改 pg_hba.conf 文件,允許剛創(chuàng)建的 replica 用戶從 10.129.8.214 從服務(wù)器上連接主服務(wù)器膛壹。

vi /var/lib/postgresql/data/pg_hba.conf

如上顯示 vi 命令沒有安裝驾中,通過如下命令進(jìn)行安裝
_

apt-get update
apt-get install vim

安裝成功之后,再次修改 pg_hba.conf 文件模聋,進(jìn)入最后部分肩民,添加如下:

host   replication      replica       10.129.8.214/32          trust   #允許214機(jī)器使用 replica 用戶來復(fù)制
  1. 修改 postgresql.conf
listen_addresses = '*'   # 監(jiān)聽所有IP
archive_mode = on  # 允許歸檔
archive_command = 'cp %p /var/lib/postgresql/data/pg_archive/%f'  # 用該命令來歸檔logfile segment
wal_level = hot_standby #開啟熱備
max_wal_senders = 32 # 這個(gè)設(shè)置了可以最多有幾個(gè)流復(fù)制連接,差不多有幾個(gè)從链方,就設(shè)置幾個(gè)
wal_keep_segments = 64 # 設(shè)置流復(fù)制保留的最多的xlog數(shù)目持痰,一份是 16M,注意機(jī)器磁盤 16M*64 = 1G
wal_sender_timeout = 60s # 設(shè)置流復(fù)制主機(jī)發(fā)送數(shù)據(jù)的超時(shí)時(shí)間
max_connections = 100 # 這個(gè)設(shè)置要注意下祟蚀,從庫的max_connections必須要大于主庫的
  1. 重啟容器

通過 exit 命令退出容器工窍,并重啟啟動(dòng)容器

docker restart kong-database

3.2 從服務(wù)器

  1. 同樣利用 docker 在 10.129.8.214 機(jī)器上新建一個(gè) postgres 容器
docker run -d --name kong-database \
-p 5432:5432 \
-e POSTGRES_PASSWORD=Qwer@1234 \
-v /home/work/data/postgres:/var/lib/postgresql/data \
postgres:10.12
  1. 拷貝主服務(wù)器數(shù)據(jù)

通過 docker exec -it kong-database /bin/bash 進(jìn)入容器內(nèi)部,拷貝主服務(wù)器數(shù)據(jù)

su postgres # 切換 postgres 用戶
rm -rf /var/lib/postgresql/data/* # 清楚從庫數(shù)據(jù)
pg_basebackup -h 192.168.14.187 -U replica -D /var/lib/postgresql/data -X stream -P
mkdir -p /var/lib/postgresql/data/pg_archive

執(zhí)行完上述命令之后前酿,容器自動(dòng)退出
[圖片上傳失敗...(image-ac34b7-1586956407823)]

切換到宿主機(jī)的 root 賬戶患雏,進(jìn)入 /home/work/data/postgres 目錄。

  1. 添加 recovery.conf 文件

通過 vi /home/work/data/postgres/recovery.conf添加恢復(fù)配置文件

standby_mode = on    # 說明該節(jié)點(diǎn)是從服務(wù)器
primary_conninfo = 'host=10.129.8.212 port=5432 user=replica password=replica'  # 主服務(wù)器的信息以及連接的用戶
recovery_target_timeline = 'latest'
  1. 修改 postgresql.conf

vi /home/work/data/postgres/postgresql.conf

wal_level = hot_standby
max_connections = 1000 # 一般查多于寫的應(yīng)用從庫的最大連接數(shù)要比較大
hot_standby = on # 說明這臺(tái)機(jī)器不僅僅是用于數(shù)據(jù)歸檔薪者,也用于數(shù)據(jù)查詢
max_standby_streaming_delay = 30s # 數(shù)據(jù)流備份的最大延遲時(shí)間
wal_receiver_status_interval = 10s # 多久向主報(bào)告一次從的狀態(tài)纵苛,當(dāng)然從每次數(shù)據(jù)復(fù)制都會(huì)向主報(bào)告狀態(tài),這里只是設(shè)置最長的間隔時(shí)間
hot_standby_feedback = on # 如果有錯(cuò)誤的數(shù)據(jù)復(fù)制,是否向主進(jìn)行反饋
  1. 啟動(dòng)容器

通過 docker start kong-database 再次啟動(dòng)容器

4 校驗(yàn)主從部署

到 10.129.8.212主服務(wù)器地址上校驗(yàn)主從是否部署成功
通過 docker exec -it kong-database /bin/bash 進(jìn)入容器內(nèi)部

su postgres
psql
select client_addr,sync_state from pg_stat_replication;

得到如下結(jié)果則表示主從復(fù)制成功

postgres=# select client_addr,sync_state from pg_stat_replication;
  client_addr  | sync_state 
---------------+------------
 10.129.8.214 | async
(1 row)

如果還不放心,可以在主數(shù)據(jù)庫中創(chuàng)建新表和插入數(shù)據(jù),觀察從服務(wù)器是否有復(fù)制過來,

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末攻人,一起剝皮案震驚了整個(gè)濱河市取试,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌怀吻,老刑警劉巖瞬浓,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蓬坡,居然都是意外死亡猿棉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門屑咳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萨赁,“玉大人,你說我怎么就攤上這事兆龙≌人” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵紫皇,是天一觀的道長慰安。 經(jīng)常有香客問我,道長聪铺,這世上最難降的妖魔是什么化焕? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮铃剔,結(jié)果婚禮上撒桨,老公的妹妹穿的比我還像新娘。我一直安慰自己键兜,他們只是感情好元莫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蝶押,像睡著了一般。 火紅的嫁衣襯著肌膚如雪火欧。 梳的紋絲不亂的頭發(fā)上棋电,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音苇侵,去河邊找鬼赶盔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛榆浓,可吹牛的內(nèi)容都是我干的于未。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼烘浦!你這毒婦竟也來了抖坪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤闷叉,失蹤者是張志新(化名)和其女友劉穎擦俐,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體握侧,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蚯瞧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了品擎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片埋合。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖萄传,靈堂內(nèi)的尸體忽然破棺而出甚颂,到底是詐尸還是另有隱情,我是刑警寧澤盲再,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布西设,位于F島的核電站,受9級(jí)特大地震影響答朋,放射性物質(zhì)發(fā)生泄漏贷揽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一梦碗、第九天 我趴在偏房一處隱蔽的房頂上張望禽绪。 院中可真熱鬧,春花似錦洪规、人聲如沸印屁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雄人。三九已至,卻和暖如春念赶,著一層夾襖步出監(jiān)牢的瞬間础钠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國打工叉谜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留旗吁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓停局,卻偏偏與公主長得像很钓,于是被迫代替她去往敵國和親香府。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容