暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL部署|基于Stream复制的高可用部署

DigOps 2022-04-15
169

微信号:digops

加关注哦


本文主要介绍通过PostgreSQL Stream复制技术,来搭建一套一主两从的三副本的高可用架构,网上有很多类似的文章,但对于初学者来说仍然会有所迷茫。


  1. 复制技术:PostgreSQL Stream

  2. 主从架构:一主两从

  3. 数据库版本:13.6

  4. 操作系统:Centos 7.6


IP地址操作系统数据库版本角色说明
192.168.56.180Centos 7.613.6软件+DB
192.168.56.181Centos 7.613.6软件
192.168.56.182Centos 7.613.6软件


部署流程为:1,在三个节点分别安装PG软件;2,在作为主节点的节点上初始化数据库;3,修改postgresql.conf,pg_hba.conf配置文件;4,通过pg_basebackup做主备数据恢复,5,启动备机实例,完成部署。

1.安装PG软件及初始化数据库

要求在所有节点上安装PG软件,只在作为主节点的节点上初始化数据库。

参考【PostgreSQL部署|编译安装】,如果不需要python,perl等接口调用,可在编译时将其去掉。如果遇到已经安装了zlib包,但仍然还会不存在,可以加参数--without-zlib

2.主节点参数配置

2.1 创建用户

language-sql

CREATE USER repusr
 REPLICATION
 LOGIN
 CONNECTION LIMIT 2
 ENCRYPTED PASSWORD 'repusr';

命令中已经指明权限包括:REPLICATION和LOGIN。

2.2 修改postgresql.conf

增加以下内容在postgresql.conf

language-shell

listen_addresses = '*' 
archive_mode = on
archive_command = 'cp %p /opt/pgsql/pg_archive/%f'
wal_level = hot_standby 
max_wal_senders = 10
wal_sender_timeout = 60s
max_connections = 100
wal_log_hints = on

2.3 修改pg_hba.conf

增加两台从服务器的白名单信息,这里我们暂时用相对较弱的md5加密策略。

language-shell

# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    replication     repusr          192.168.56.181/32       md5
host    replication     repusr          192.168.56.182/32       md5

2.4 重启数据库

language-shell

pg_ctl restart -D $PGDATA

3.从节点通过pg_basebackup恢复数据并建立主从关系

分别在两台从节点上执行,需要注意两点:

  1. 使用postgres用户;

  2. 从机上要提前建好$PGDATA目录,权限要求为700或者750,如果时其他权限会报权限过大问题。

language-shell

$ pg_basebackup -h 192.168.56.180 -U repusr -D /data/pgdata -X stream  -P -R
Password: 
122597/122597 kB (100%), 1/1 tablespace
-bash-4.2$ ls -lrt

-X
表示以stream
方式包含所需的WAL
文件;

-P
表示显示进度;

-R
表示为replication
写配置信息;

4. 启动从库,验证主从关系

4.1 启动从库

  • 两个从节点均启动

language-shell

$ pg_ctl start -D /data/pgdata
waiting for server to start....2022-04-01 09:59:57.143 CST [19334] LOG:  starting PostgreSQL 13.6 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
2022-04-01 09:59:57.143 CST [19334] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2022-04-01 09:59:57.144 CST [19334] LOG:  listening on IPv6 address "::", port 5432
2022-04-01 09:59:57.154 CST [19334] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
2022-04-01 09:59:57.163 CST [19335] LOG:  database system was interrupted; last known up at 2022-04-01 09:58:17 CST
2022-04-01 09:59:57.603 CST [19335] LOG:  entering standby mode
2022-04-01 09:59:57.610 CST [19335] LOG:  redo starts at 0/7000028
2022-04-01 09:59:57.614 CST [19335] LOG:  consistent recovery state reached at 0/7000100
2022-04-01 09:59:57.614 CST [19334] LOG:  database system is ready to accept read only connections
 done
server started
2022-04-01 09:59:57.626 CST [19339] LOG:  started streaming WAL from primary at 0/8000000 on timeline 1

4.2 验证主从关系

登录主库进行验证

language-sql

$ psql
psql (14.0, server 13.6)
Type "help" for help.
postgres=# \x
Expanded display is on.
postgres=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid              | 32441
usesysid         | 16384
usename          | repusr
application_name | walreceiver
client_addr      | 192.168.56.181
client_hostname  | 
client_port      | 49764
backend_start    | 2022-04-01 09:58:22.752313+08
backend_xmin     | 
state            | streaming
sent_lsn         | 0/8000A00
write_lsn        | 0/8000A00
flush_lsn        | 0/8000A00
replay_lsn       | 0/8000A00
write_lag        | 
flush_lag        | 
replay_lag       | 
sync_priority    | 0
sync_state       | async
reply_time       | 2022-04-01 14:17:46.943875+08
-[ RECORD 2 ]----+------------------------------
pid              | 32488
usesysid         | 16384
usename          | repusr
application_name | walreceiver
client_addr      | 192.168.56.182
client_hostname  | 
client_port      | 42064
backend_start    | 2022-04-01 09:59:57.6185+08
backend_xmin     | 
state            | streaming
sent_lsn         | 0/8000A00
write_lsn        | 0/8000A00
flush_lsn        | 0/8000A00
replay_lsn       | 0/8000A00
write_lag        | 
flush_lag        | 
replay_lag       | 
sync_priority    | 0
sync_state       | async
reply_time       | 2022-04-01 14:17:46.648924+08



 

      

文章转载自DigOps,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论