ITPub博客

首页 > 数据库 > PostgreSQL > PostgreSQL数据库-异步流复制Hot Standby环境搭建过程

PostgreSQL数据库-异步流复制Hot Standby环境搭建过程

原创 PostgreSQL 作者:410192979 时间:2020-10-21 16:57:56 0 删除 编辑

环境介绍:

主库: 主机名   postgres10   IP   192.168.1.10

备库: 主机名   postgres20   IP    192.168.1.20


基于PostgreSQL 10.5版本的hot standby的部署操作步骤。

postgressql的hot standby 模式,即为主库可读可写,从库为只读模式。在配置方面非常简单,在此记录下来,方便大家学习。

Hot Standby环境搭建

1.在主库上创建数据复制用户repuser,并将此用户赋予superuser或replication权限

[postgres@postgres10 postgre]$ psql

psql (10.5)

Type "help" for help.

postgres=# create user repuser with password 'postgres';

CREATE ROLE

postgres=#

postgres=# alter user repuser superuser;

ALTER ROLE

postgres=#

2.编辑pg_hba.conf认证文件,将复制用户的认证添加上去,使用md5认证方式

[postgres@postgres10 pgdata]$ tail pg_hba.conf

local replication all trust

host replication all 127.0.0.1/32 trust

host replication all ::1/128 trust

host replication repuser 192.168.1.20/32 md5

[postgres@postgres10 pgdata]$

3.在数库上添加如下参数,并重启数据库使之生效

listen_addresses = '192.168.1.10'

min_wal_size = 800MB

max_wal_senders = 10

wal_level = replica

4.在备数据库上使用pg_basebackup工具执行数据库基础备份

[postgres@postgresql20 postgre]$ pg_basebackup -h 192.168.1.10 -U repuser -F p -P -X stream -R -D $PGDATA -l pgbackup20201021

Password:

30488/30488 kB (100%), 1/1 tablespace

[postgres@postgresql20 postgre]$

5.修改备库上的postgres.conf文件

添加参数

hot_standby = on

同时在$PGDATA目录下生成了recovery.conf文件,这个文件中记录了从库连接主库的连接信息

6.启动备库,进行验证

[postgres@postgresql20 pgdata]$

[postgres@postgresql20 pgdata]$ pg_ctl start

waiting for server to start....2020-10-21 16:39:27.072 CST [3870] LOG: listening on IPv4 address "0.0.0.0", port 5432

2020-10-21 16:39:27.072 CST [3870] LOG: listening on IPv6 address "::", port 5432

2020-10-21 16:39:27.074 CST [3870] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"

2020-10-21 16:39:27.091 CST [3870] LOG: redirecting log output to logging collector process

2020-10-21 16:39:27.091 CST [3870] HINT: Future log output will appear in directory "/postgre/pgdata/log".

done

server started

[postgres@postgresql20 pgdata]$

7.查看主从复制状态

在主库上查看主从复制的状态

postgres=# select client_addr,state,sync_state from pg_stat_replication;

 client_addr  |   state   | sync_state 

--------------+-----------+------------

 192.168.1.20 | streaming | async

(1 row)

如果看不到备库过来的连接,说明备库没有连过来,需要检查备库的日志文件查看原因。如果看到的流复制状态“state”的值不是“streaming”,也说明备库的流复制有问题。

8.在主库上创建测试表,在从库上查看同步情况

[postgres@postgres10 postgre]$ psql

psql (10.5)

Type "help" for help.

postgres=# create table test01(id int,name varchar(10));

CREATE TABLE

postgres=# insert into test01 values(1,'a');

INSERT 0 1

postgres=# insert into test01 values(2,'b');

INSERT 0 1

postgres=# insert into test01 values(3,'c');

INSERT 0 1

postgres=# select * from test01;

id | name

----+------

1 | a

2 | b

3 | c

(3 rows)

在从库上查看数据同步情况

[postgres@postgresql20 pgdata]$ psql

psql (10.5)

Type "help" for help.

postgres=#

postgres=# select * from test01;

id | name

----+------

1 | a

2 | b

3 | c

(3 rows)


交换主备库的角色

1.在原主库上创建recovery.conf文件,并编辑新的连接主库信息。

在此,将从库的recovery.conf文件拷贝至主库的$PGDATA目录下。并将更新主库的连接信息

[postgres@postgres10 pgdata]$ more recovery.conf 

standby_mode = 'on'

primary_conninfo = 'user=repuser password=postgres host=192.168.1.20 port=5432 sslmode=disable sslcompression=1 target_session_attrs=any'

2.在原主库的postgresql.conf配置文件中,添加hot_standby=on参数

hot_standby=on

3.将原备库的postgresql.conf配置文件中,删除hot_standby=on参数,同时将recovery.conf文件删除

4.启动主备两个数据库环境,并在新的主库上进行主从连接状态检测

[postgres@postgresql20 pgdata]$ psql

psql (10.5)

Type "help" for help.


postgres=# select client_addr,state,sync_state from pg_stat_replication;

 client_addr  |   state   | sync_state 

--------------+-----------+------------

 192.168.1.10 | streaming | async

(1 row)


至此,可以看到原来的主库(192.168.1.10)已经成为了备库,而原来的备库(192.168.1.20)成为了主库。新的主从关系建立好了。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26366371/viewspace-2728574/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论
王燕辉! 一个80后的IT从业者! 紧跟时代最前沿技术!

注册时间:2014-03-08

  • 博文量
    154
  • 访问量
    140599