Postgresql数据库的同步流复制

在主节点初始化数据库,并且配置好 postgresql.conf 文件,在 pg_hba.conf中添加好对应的从节点 IP 段,重启数据库后,行如下操作:

(1)主节点操作
主节点初始化并启动后,psql进入数据库中,修改postgres超级用户密码,并创建复制用户
postgres=# alter user postgres with password 'postgres';
ALTER ROLE
postgres=# create role replicator with login replication password 'replicator';
CREATE ROLE

主节点要配置pg_hba.conf

# TYPE  DATABASE        USER            ADDRESS                 METHOD

  host  replication     all             192.168.1.9/24        trust

 

主节点配置postgresql.conf文件添加

listen_addresses = '*'

max_wal_senders = 5

wal_level = hot_standby

synchronous_standby_names = 'standby01'

(2)从节点操作
从节点编译完成并配置好环境变量后(指定pgdata目录即可,不需要重启服务),执行数据备份操作:
pg_basebackup -h 主节点 IP -U replicator -D /home/postgres/pgdata -X stream -P
Password:
23407/23407 kB (100%), 1/1 tablespace

 例如:pg_basebackup  -h  192.168.1.6  -U  replicator  -D /home/postgres/pgdata -X stream -P

 

传完数据记得授权 chown 700 pgdata

chown -R postgres:postgres postgres

 (3)从节点创建配置文件

cd /home/postgres/pgdata

创建并配置recovery.conf 文件:

vi recovery.conf 

 

standby_mode = 'on'

primary_conninfo = 'host= 主节点 IP port= 端口 user= application_name=节点 password=密码 keepalives_idle=60 keepalives_interval=5 keepalives_count=5'

restore_command = ''

recovery_target_timeline = 'latest'

例如:

standby_mode = 'on'

primary_conninfo = 'host= 192.168.1.6 port= 5432 user= replicator application_name=standby01 password=replicator keepalives_idle=60 keepalives_interval=5 keepalives_count=5'

restore_command = ''

recovery_target_timeline = 'latest'

(4)启动备数据库

[postgres@localhost pgdata]$ pg_ctl start -D /home/postgres/pgdata/
等待服务器进程启动 ....2022-04-28 17:23:37.638 CST [46035] 日志: listening on IPv4 address "0.0.0.0", port 5432
2022-04-28 17:23:37.638 CST [46035] 日志: listening on IPv6 address "::", port 5432
2022-04-28 17:23:37.640 CST [46035] 日志: listening on Unix socket "/tmp/.s.PGSQL.5432"
2022-04-28 17:23:37.675 CST [46036] 日志: 数据库系统中断;上一次的启动时间是在2022-04-28 17:21:52 CST
2022-04-28 17:23:37.691 CST [46036] 日志: 正在进入备用模式
2022-04-28 17:23:37.696 CST [46036] 日志: redo 在 0/6000028 开始
2022-04-28 17:23:37.698 CST [46036] 日志: 在0/60000F8上已到达一致性恢复状态
2022-04-28 17:23:37.699 CST [46035] 日志: 数据库系统准备接受只读请求的连接
2022-04-28 17:23:37.709 CST [46043] 日志: 在时间点: 0/7000000 (时间安排1)启动日志的流操作
完成
服务器进程已经启动

(5)验证是否成功

主库建表插入数据

 create table test (id integer);

insert into test values (1);

select * from test;

备库查看数据是否传输

postgres=# select * from test;

主库:

postgres=# insert into test values (1);
INSERT 0 1
postgres=# select * from test;
id
----
1
1
1
1
(4 行记录)

备库:

postgres=# select * from test;
id
----
1
1
1
1
(4 行记录)

postgres=#

 

注: application_name中节点对应主节点 postgresql.conf 配置文件中synchronous_standby_names 参数的节点列表,如果节点名称一致,则可以配置成同步模式,不一致则是异步模式。例如:主节点 postgresql.conf配置文件中synchronous_standby_names=ndoe2,node3,在 node2 节点 recovery.conf 配置文件中 application_name=node2或 application_name=node3则说明是同步流模式; 如果是 application_name=’’或 application_name=node4,则为异步流模式。

其他从节点搭建方法如上。

 

posted @ 2022-04-29 13:41  lidingyi  阅读(1112)  评论(0编辑  收藏  举报