zoukankan      html  css  js  c++  java
  • Postgres 主从复制搭建步骤

    系统版本: CentOS Linux release 7.5.1804 (Core) 

    数据库 psql (PostgreSQL) 10.5

    2台机器ip : 172.17.0.3 /172.17.0.4

    具体步骤:
    一.
    首先先在这两台机器上把postgres这2个机器的基础数据库都装好。具体就不解释了。
    9之后的版本安装有4个包,按照lib,PGDG, server ,contrib这样的顺序安装。

    二.
    主库环境:

    1.创建一个用户复制的用户replica

    CREATE ROLE replica login replication encrypted password 'replica';

    2.修改hba.conf文件,指定replica登录网络

    host replication replica 172.17.0.4/32 trust

    就是允许来自0.14的replica用户访问replication数据库,同时是trust的。
    因为是新学postgres ,会觉得应该创建一个叫replication的数据库,其实replication数据库是系统默认存在的。

    3.修改postgresql.conf 文件

    listen_addresses = '*"
    port = 5432
    wal_level = hot_standby
    max_wal_senders = 2
    wal_keep_segments = 32
    wal_sender_timeout =60s
    max_connections =100

    之后重启主库 。如果遇到什么报错,到log里去查,我这里就遇到过把hot 拼写成host的问题。

    从库环境:
    1.
    这里首先要把主库的data全部拷贝到备库。保证2个库的开始是一致的,之后才方便做同步。我这里设置的数据文件夹为 /data/postgres/. 因为开始安装pg的时候分别在主库和备库做了一些不同的设置。有点存在侥幸心理,尝试没有删除备库的同样的/data/postgres文件夹,结果主从失败。。

    所以这里强制第一步先把备库的数据文件夹目录清空。(如果以前有过数据,一定要清空。或者是想把2个不相关的PG库做成主从模式,那么从库一定要清空数据文件夹下的所有文件)

    开始备份主库数据并传输到备库,这里有2种方法:
    第一种:

    在备库上运行:

    pg_basebackup -F p --progress -D /data/postgres -h 172.17.0.3 -p 5432 -U replica --password

    第二种:

    select pg_start_backup('/data/postgres');
    之后把数据目录下的文件SCP /rsync 到备库的相同目录。这里记得要把postmaster.pid文件删除,不然备库启动时候会报错。
    然后主库结束备份:

    select pg_stop_backup();
    3.创建recovery.cnf 文件

    把/usr/local/postgres/share/recovery.conf.sample 模板文件拷贝到 数据目录下。

    cp /usr/local/postgres/share/recovery.conf.sample /data/postgres/recovery.conf
    vi recovery.conf

    standby_mode = on
    primary_conninfo = 'host=172.17.0.3 port=5432 user=replica password=replica'
    recovery_target_timeline = 'latest'
    trigger_file = '/var/postgres/data/trigger_activestb'

    4 . 再修改 postgresql.conf

    listen_addresses = '*'
    port = 5432
    wal_level = minimal
    max_wal_senders = 0
    wal_keep_segments = 0
    max_connections = 1000

    synchronous_commit = off
    synchronous_standby_names = ''
    hot_standby = on
    max_standby_streaming_delay = 30
    wal_receiver_status_interval = 1s
    hot_standby_feedback = on

    之后重启备库。

    我做的过程中重启备库报错找不到 postmaster.opts ,我直接把主库的文件单独又拷贝到备库,重启成功。

    三· 验证同步

    select * from pg_stat_replication;
    最好也可以创建个表,插入几条数据,然后从库验证。

    其中还有很多需要学习的地方,每个参数具体代表的意义,主从同步的其它模式
    都要认真学习。

    参考文档:
    http://www.cnblogs.com/yjf512/p/4499547.html
    http://blog.163.com/czg_e/blog/static/4610456120111190240888/
    http://www.cnblogs.com/marsprj/archive/2013/03/04/2943373.html

  • 相关阅读:
    Intent.ACTION_TIME_TICK 广播
    Android ContentObserver
    android:duplicateParentState属性解释
    Android CursorAdapter
    android AndroidManifest.xml 多个android.intent.action.MAIN (
    PreferenceActivity详解
    WORD和WPS中英文混合的内容间距离很大怎么办?
    Android 屏幕适配
    OC第四课
    PL/SQL联系oracle成功可以sql解决的办法是检查表的名称无法显示
  • 原文地址:https://www.cnblogs.com/EikiXu/p/9698753.html
Copyright © 2011-2022 走看看