天天看點

Docker建立postgesql主從複制保姆級示例

Docker建立postgesql主從複制保姆級示例

postgre要求

​ 1、使用同一版本的postgre資料庫,精确到小版本為最佳。

​ 2、不使用8.0以下版本。

1、 從docker上擷取postgresql版本鏡像

docker search postgresql
           

[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-48tGkVpz-1628911563933)(N:\marknote圖檔源\docker部署pgpool\步驟一.png)]

2、選擇版本

本文選擇第一個postgres版本,也可以選擇自己有需要的版本,

#使用如下指令拉取鏡像
docker pull postgres
#拉取完成後檢視docker鏡像中是否存在。
docker images
           

3、建立檔案位置

3.1、在主控端下建立挂載目錄

#建立主庫挂載目錄位置
    mkdir /postgre/postgrePrimary/data
#建立從庫挂載目錄位置
    mkdir /postgre/postgreStandby/data
#建立臨時資料目錄位置
    mkdir /postgre/postgreReplica/data
           

使用ls檢視是否建立目錄成功。

4、建立容器

4.1主副庫IP位址

這裡假設主庫ip為:172.17.0.2

​ 副庫ip為:172.17.0.5

本文是在一個伺服器下的docker容器下直接建立,沒有指定ip。

通過docker直接建立的容器可以通過下述指令查詢自動配置設定的ip位址

4.2首先建立主伺服器及其配置

docker run -d --name xxxxPrimary(自定義容器名) -p: 5432:5432 
-v /postgre/postgrePrimary/data:/var/lib/postgresql/data
postgre12
#建立成功後,進入容器内部
docker exec -it xxxxPrimary bash
#管理者登陸(這裡是建立postgre預設的自帶管理者)
su postgres
#進入資料庫指令行
psql
#建立複制使用者
create role replica login replication encrypted password 'replica';
#查詢是否建立成功使用者
\du
#退出資料庫指令行
\q
#退出管理者登陸
exit
#找到配置檔案位置,本文中postgres12配置檔案位置為:/var/lib/postgresql/12/main,請根據自身情況查找到配置檔案位置
#對 pg_hba.conf配置檔案進行修改
vi /var/lib/postgresql/12/main/pg_hba.conf
#若該處出現vi不存在情況,請下載下傳vim,具體指令如下
apt-get update
apt-get install vim
#進入pg_hba.conf後,在檔案最後一行添加如下
host  replication  replica  172.17.0.5/32  trust
#修改postgresql.conf配置檔案,修改以下參數(參數均已存在,修改即可),可根據自身情況做其他修改
archive_mode = on
archive_command = 'bin/date'
synchronous_standby_names = '*'

           

以上主庫配置完畢,退出主庫,重新啟動配置即可生效

docker restart postgrePrimary
#檢視主庫是否正常重新啟動
docker ps
           

4.3建立副庫伺服器并配置

docker run -d --name xxxxStandby(自定義容器名) -p: 5433:5432 
-v /postgre/postgreStandby/data:/var/lib/postgresql/data
-v /postgre/postgreReplica/data:/var/lib/postgresql/replica
postgre12
#建立成功後,進入容器内部
docker exec -it xxxxPrimary bash
#管理者登陸(這裡是建立postgre預設的自帶管理者)
su postgres
#同步主庫資料到replica臨時目錄
pg_basebackup -R -D /var/lib/postgresql/replica -Fp -Xs -v -P -h 172.17.0.2 -p 5432 -U replica
#備份成功後退出容器
eixt

#檢視主控端上挂載目錄是否備份成功
cd /postgre/postgreReplica/data
ls
#若有資料,即備份成功
#停止副庫容器運作并删除副庫容器
docker stop xxxXStandby
docker rm  xxxxStandby

#通過備份修改、重建副庫容器,這裡要細心一點,不然容易出錯。
cd /postgre/postgreStandby
rm -rf data
mv /postgre/postgreReplica/data /postgre/postgreStandby/data
cd /postgre/postgreStandby/data

#檢視postgresql.auto.conf檔案中是否含有以下内容
primary_conninfo = 'user=replica password=''replica'' host=172.17.0.2 port=5432 sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'
 
 #若存在,即可重新建立副庫容器,注意該處挂載目錄路徑及細節
 docker run -d --name xxxxStandby(自定義容器名) -p: 5433:5432 
-v /postgre/postgreStandby/data:/var/lib/postgresql/12/main
postgre12
#本次重新建立的目的是将主庫的備份作為從庫的啟動配置檔案,是以應該直接挂載至副庫預設配置檔案路徑,即上文提到的/var/lib/postgresql/12/main

           

5、測試

#進入主庫容器
docker exec -it xxxxPrimary bash
#管理者登陸
su postgres
#進入資料庫指令行
psql
#sql語句查詢複制資訊
select * from pg_stat_replication;
           

查詢成功示例如下所示:

、測試

#進入主庫容器
docker exec -it xxxxPrimary bash
#管理者登陸
su postgres
#進入資料庫指令行
psql
#sql語句查詢複制資訊
select * from pg_stat_replication;
           

查詢成功示例如下所示:

Docker建立postgesql主從複制保姆級示例