文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

PostgreSQL12-主从复制

2019-09-10 23:00

关注

PostgreSQL12-主从复制

注意:PostgreSQL 12对主从复制实现和配置做了重大改进,如废弃了recovery.conf,并将参数转换为普通的PostgreSQL配置参数,使得配置群集和复制更加简单。

PostgreSQL数据库支持多种复制解决方案,以构建高可用性,可伸缩,容错的应用程序,其中之一是预写日志(WAL)传送。该解决方案允许使用基于文件的日志传送或流复制,或者在可能的情况下,将两种方法结合使用来实现备用服务器。

使用流复制时,备用(复制从属)数据库服务器被配置为连接到主服务器/主服务器,主服务器/主服务器在生成WAL记录时将其流传输到备用服务器,而无需等待WAL文件被填充。

默认情况下,流复制是异步的,其中在将事务提交到主服务器后将数据写入备用服务器。这意味着在主服务器中提交事务与更改在备用服务器中变得可见之间存在很小的延迟。这种方法的一个缺点是,如果主服务器崩溃,则可能无法复制任何未提交的事务,这可能导致数据丢失。

示例环境:

Postgresql master  database server:     10.20.20.1
Postgresql standby database server:     10.20.20.2

一. 配置主服务器

1. 修改监听端口

su - postgres
psql -c "ALTER SYSTEM SET listen_addresses TO "*";"/
ls -l /var/lib/pgsql/12/data/  # 会生成一个postgresql.auto.conf文件

ALTER SYSTEM SET会将配置保存在一个postgresql.conf.auto中,与postgresql.conf并存,系统会优先使用.auto配置。

2. 创建复制角色

# su – postgres
createuser --replication -P -e replicator # -P:设置密码,-e:回显
exit

3. 角色授权
vim /var/lib/pgsql/12/data/pg_hba.conf

host    replication     replicator      10.20.20.2/24     md5

4. 重启服务

systemctl restart postgresql-12.service

5. 设置防火墙(非必选)

firewall-cmd --add-service=postgresql --permanent
firewall-cmd --reload

二. 配置从服务器

1. 将主机基础数据备份到从机

# 先停掉服务,备份下本地数据,并清除本地数据
systemctl stop postgresql-12.service
su - postgres
tar -zcvf /var/lib/pgsql/12/data.tar.gz /var/lib/pgsql/12/data #备份一下
rm -rf /var/lib/pgsql/12/data/*
# 使用pg_basebackup工具备份
pg_basebackup -h 10.20.20.1 -D /var/lib/pgsql/12/data -U replicator -P -v  -R -X stream -C -S pgstandby1
exit

备份过程完成后,会在data目录下创建了一个standby.signal,并将primary_conninfo写入postgresql.auto.conf

ls -l /var/lib/pgsql/12/data/
cat /var/lib/pgsql/12/data/postgresql.auto.conf

如果postgresql.conf中的hot_standby参数设置为on(默认值),并且数据目录中存在Standby.signal文件,则replication slave将在“热备”模式下运行。

2. 验证主机(master)复制插槽信息

# su - postgres
$ psql -c "SELECT * FROM pg_replication_slots;"
$ exit

pg_replication_slots视图会看到名为pgstandby1的复制插槽信息。

3. 启动从服务(standby)

#systemctl start postgresql-12

三. 测试主从服务

1. 查看从服务(WAL接收器进程)状态:

psql -c "x" -c "SELECT * FROM pg_stat_wal_receiver;"
扩展显示已打开.
-[ RECORD 1 ]---------+----------------------------
pid                   | 3240
status                | streaming
receive_start_lsn     | 0/3000000
receive_start_tli     | 1
received_lsn          | 0/3013BF8
received_tli          | 1
last_msg_send_time    | 2020-06-22 18:12:29.985512+08
last_msg_receipt_time | 2020-06-22 18:12:29.761575+08
latest_end_lsn        | 0/3013BF8
latest_end_time       | 2020-06-22 17:02:51.977569+08
slot_name             | pgstandby1
sender_host           | 10.20.20.1
sender_port           | 5432
conninfo              | user=replicator password=******** dbname=replication host=10.20.20.1 port=5432 fallback_application_name=walreceiver sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any

查看进程信息,会有walsender的相关信息。

$ ps aux | grep postgres
postgres   ... postgres: walsender replicator 10.20.20.2(38418) streaming 0/3013BF8
...

2. 查看主服务(WAL发送器进程)状态:

psql -c "x" -c "SELECT * FROM pg_stat_replication;"
-[ RECORD 1 ]----+------------------------------
pid              | 4647
usesysid         | 16384
usename          | replicator
application_name | walreceiver
client_addr      | 10.20.20.2
client_hostname  |
client_port      | 38418
backend_start    | 2020-06-22 16:54:54.391772+08
backend_xmin     |
state            | streaming                    # ☆☆☆服务状态☆☆☆
sent_lsn         | 0/3013BF8
write_lsn        | 0/3013BF8
flush_lsn        | 0/3013BF8
replay_lsn       | 0/3013BF8
write_lag        |
flush_lag        |
replay_lag       |
sync_priority    | 0
sync_state       | async                       # ☆☆☆同步状态☆☆☆
reply_time       | 2020-06-22 18:18:20.293569+08

查看进程信息,会有walreceiver的相关信息。

$ ps aux | grep postgres
postgres   ...postgres:  walreceiver   streaming 0/3013BF8
...

3. 数据测试

master创建replica_demo数据库,在standby上可以看到同步效果

[master] #CREATE DATABASE replica_demo;
[standby]#l

参考链接

https://www.tecmint.com/configure-postgresql-streaming-replication-in-centos-8/

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯