本文主要介绍通过PostgreSQL Stream复制技术,来搭建一套一主两从的三副本的高可用架构,网上有很多类似的文章,但对于初学者来说仍然会有所迷茫。
复制技术:PostgreSQL Stream
主从架构:一主两从
数据库版本:13.6
操作系统:Centos 7.6
| IP地址 | 操作系统 | 数据库版本 | 角色 | 说明 |
|---|---|---|---|---|
| 192.168.56.180 | Centos 7.6 | 13.6 | 主 | 软件+DB |
| 192.168.56.181 | Centos 7.6 | 13.6 | 从 | 软件 |
| 192.168.56.182 | Centos 7.6 | 13.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恢复数据并建立主从关系
分别在两台从节点上执行,需要注意两点:
使用postgres用户;
从机上要提前建好$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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




