主從搭建
192.168.159.101 node1 主庫(讀寫)
192.168.159.102 node2 備庫(只讀)
兩臺機器首先安裝postgrsql
主庫
postgres用戶操作:
修改postgresql.conf
# 在文件中修改(此配置僅用于遠程訪問, 流復制后續還有額外配置):
listen_addresses = '*'
port = 15432
max_connections = 1500 # 最大連接數,據說從機需要大于或等于該值
wal_level = replica
max_wal_senders = 2 #最多有2個流復制連接
wal_keep_segments = 16
wal_sender_timeout = 60s #流復制超時時間# 開啟歸檔
....
修改pg_hba.conf,添加如下:
# 追加
# replica為postgres用戶
# XX.XX.XX.XX為從節點的完整IP,如果為網段配置就不是32了,md5為允許密碼驗證,trust為免密
# TYPE DATABASE USER ADDRESS METHOD
host replication replica 192.168.159.102/32 trust
# 需要遠程訪問,記得加(還有一個監聽,在后面配置)
# 0.0.0.0/0為任意IP
host all all 0.0.0.0/0 md5
root用戶操作:
#授權
chown -R postgres:postgres /var/run/postgresql/
chown -R postgres:postgres /home/postgres/pgdata/
postgres用戶操作:
#啟動
pg_ctl start
創建流復制用戶
#切換用戶
su - postgres
# 連接pgsql
psql -h 192.168.159.101 -p 15432
#執行sql
create role replica login replication encrypted password '123456';
SELECT rolname from pg_roles;
從庫
root用戶操作
chown -R postgres:postgres /var/run/postgresql/
chown -R postgres:postgres /home/postgres/pgdata/
從主庫復制數據文件到本地
# 先清空原有數據文件(如非空)
rm -rf /home/postgres/pgdata/*
# 執行復制,ip為主庫ip
pg_basebackup -h 192.168.159.101 -p 15432 -U replica -Fp -Xs -Pv -R -D /home/postgres/pgdata# 輸入主庫中創建的replica用戶密碼后,開始同步
更改/home/postgres/pgdata目錄權限為700
chmod -R 700 /home/postgres/pgdata/
postgres用戶操作:
#啟動
pg_ctl start
驗證:
主庫執行:
# 查看當前復制會話
select * from pg_stat_replication;
#如果返回t說明是備庫,返回f說明是主庫
select pg_is_in_recovery();
從庫執行:
主庫創建表:
CREATE TABLE "user" ("id" int4 NOT NULL,"name" varchar(255) COLLATE "pg_catalog"."default","age" int4
);
查看從庫: