主库: 主机名 postgres10 IP 192.168.1.10
备库: 主机名 postgres20 IP 192.168.1.20
基于PostgreSQL 10.5版本的hot standby的部署操作步骤。
postgressql的hot standby 模式,即为主库可读可写,从库为只读模式。在配置方面非常简单,在此记录下来,方便大家学习。
[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=#
[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]$
listen_addresses = '192.168.1.10'
min_wal_size = 800MB
max_wal_senders = 10
wal_level = replica
[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]$
添加参数
hot_standby = on
同时在$PGDATA目录下生成了recovery.conf文件,这个文件中记录了从库连接主库的连接信息
[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]$
在主库上查看主从复制的状态
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”,也说明备库的流复制有问题。
[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)
在此,将从库的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'
hot_standby=on
[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/ ,如需转载,请注明出处,否则将追究法律责任。