Docker部署PostgreSQL主從


#准備

PostgreSQL12.3版本容器兩台,部署參考https://www.cnblogs.com/zspwf/p/16113298.html

主庫: 192.168.3.14:2200 

從庫: 192.168.3.14:2201

 

#主庫

1.新建用於復制的用戶

CREATE ROLE replicate WITH LOGIN PASSWORD 'xyz!345' REPLICATION ;

 

 

2.往主庫的pg_hba.conf文件追加以下內容,其中192.168.3.14為從庫IP,/data/nismes/bd-test/為映射容器目錄,未映射請進入容器執行 

METHOD參數解析

md5是常用的密碼認證方式,如果你不使用ident,最好使用md5。密碼是以md5形式傳送給數據庫,較安全,且不需建立同名的操作系統用戶。

password是以明文密碼傳送給數據庫,建議不要在生產環境中使用。

trust是只要知道數據庫用戶名就不需要密碼或ident就能登錄,建議不要在生產環境中使用。

reject是拒絕認證。

 

#映射執行
echo "host replication replicate 192.168.3.14/32 trust" >> /data/nismes/bd-test/pg_hba.conf
#未映射執行
docker exec -it 容器id /bin/bash
echo "host replication replicate 192.168.3.14/32 trust" >> /var/lib/postgresql/data/pg_hba.conf

 

 

 

3.主庫開啟歸檔模式

方式1

ALTER SYSTEM SET archive_command = ON ;
ALTER SYSTEM SET archive_command ='cp -i %p /home/%f </dev/null';

方式二:打開postgresql.conf文件,修改參數

4.主庫配置完成,重啟數據庫

#從庫

1.進入容器 ,執行命令

//將文件備份至Home目錄
pg_basebackup -h 192.168.3.14 -p 2200 -U replicate -w -Fp -Xs -Pv -R -D /home
//覆蓋數據目錄
cp -R /home/* /var/lib/postgresql/data/
//清空home目錄
rm -rf /home/*

 

 

 

 2.設置備用服務器連接字符串

primary_conninfo

指定備用服務器用來連接發送服務器的連接字符串。這個字符串的格式在libpq-connstring中描述。 如果在這個字符串中有任何選項未被指定,那么將檢查相應的環境變量(見libpq-envars)。 如果環境變量也沒有被設置,則使用默認值。

連接字符串應當指定發送服務器的主機名(或地址),以及端口號(如果它和備用服務器的默認端口不同)。 還要指定對應於發送服務器上合適權限角色的用戶名(見streaming-replication-authentication)。 如果發送服務器要求口令認證,還需要提供一個口令。它可以在primary_conninfo字符串中提供,或者在后備服務器(使用replication作為數據庫名)的一個單獨~/.pgpass文件中提供。 不要在primary_conninfo字符串中指定一個數據庫名。

這個參數只能在服務器啟動時被設置。如果服務器沒有處於備用模式,則此設置無效。

ALTER SYSTEM SET  primary_conninfo = 'user=replicate passfile=''/root/.pgpass'' host=192.168.3.14 port=2200 sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any';

ALTER SYSTEM SET max_connections ='300';

 

 

 

 3.重啟從庫

#測試

主庫查看復制

select * from pg_stat_replication;

 

 主庫創建數據庫測試

CREATE TABLE test2(fc1 varchar(50),fc2 int);

 

 主庫插入測試

INSERT INTO test2 SELECT '測試1',1

從庫查看

SELECT * FROM test2

 

 

 從庫刪除測試

DROP TABLE test2

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM