• PostgreSQL流复制记录


    参考了别人的部分,添加了自己在实践中的内容,仅做记录。

    1.同步流复制中

    主机操作

    1.1postgresql.conf

    wal_level = hot_standby # 这个是设置主为wal的主机
    
    max_wal_senders = 32 # 这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个
    
    wal_keep_segments = 256 # 设置流复制保留的最多的xlog数目
    
    wal_sender_timeout = 60s # 设置流复制主机发送数据的超时时间
    
    max_connections = 100 # 这个设置要注意下,从库的max_connections必须要大于主库的
    
    synchronous_standby_names='standby1' #同步复制时需要配置该参数,同样在备机需要在连接中配置application_name=standby1
    #可以配置多个,standby1,standby2。三个节点中,一个主,一个同步流复制,一个潜在同步流复制。
    #级别是按照配置的顺序决定,当standby1掉了后,备用同步流复制自动成为同步流复制,主节点的写入不会卡住。但是如果两个同步节点都掉了,则主节点不能写入,写入时#会卡在等待同步节点返回值的地方。

    synchronous_commit=on|remote_write|locale|off
    #on 表示主节点XLOG写入xlog file且备节点接收到XLOG,并将XLOG写入到wal buffer,wal buffer刷盘道xlog file之后,事务才可以完成提交。
    #remote_write表示主节点XLOG写入xlog file且备节点接收到XLOG,并将XLOG写入到wal buffer后,事务才可以完成提交。
    #locale 表示主节点XLOG写入xlog file,事务即可完成提交。
    #off 表示主节点XLOG写入到wal buffer,事务即可完提交。
    hot_standby = on #在启动过程中做recovery时,可以访问数据库。不设置在启动后,连接数据库,可能会遇到:

      #[postgre@pg-2 postgresql-9.4.4]$ psql  postgres

      #psql: FATAL:  the database system is starting up

    1.2 修改pg_hba.conf

    host replication replica 10.12.12.12/32 md5

    1.3 创建同步用户

    postgres# CREATE ROLE replica login replication encrypted password 'replica'

    备机操作

    1.4 然后使用pg_basebackup建立备机data目录

    pg_basebackup -F p -P -x -R  -D /data/pgsql/data2 -h 10.12.12.10 -p 5432 -U replica
    #-R会自动生成一个recovery.conf文件。
    #-F指定传输压缩格式

    1.5 修改recovery.conf文件

    standby_mode = on # 这个说明这台机器为从库
    
    #primary_conninfo = 'host=10.12.12.10 port=5432 user=replica password=replica' # 这个说明这台机器对应主库的信息 异步复制的信息
    
    primary_conninfo = 'host=10.12.12.10 port=5432 user=replica password=replica application_name=ecox_standby_node' #同步复制
    
    recovery_target_timeline = 'latest' # 这个说明这个流复制同步到最新的数据

    查看同步状态

    postgres=# select * from pg_stat_replication;
    -[ RECORD 1 ]----+------------------------------
    pid              | 8467       # sender的进程
    usesysid         | 44673      # 复制的用户id
    usename          | replica    # 复制的用户用户名
    application_name | walreceiver  
    client_addr      | 10.12.12.12 # 复制的客户端地址
    client_hostname  |
    client_port      | 55804  # 复制的客户端端口
    backend_start    | 2015-05-12 07:31:16.972157+08  # 这个主从搭建的时间
    backend_xmin     |
    state            | streaming  # 同步状态 startup: 连接中、catchup: 同步中、streaming: 同步
    sent_location    | 3/CF123560 # Master传送WAL的位置
    write_location   | 3/CF123560 # Slave接收WAL的位置
    flush_location   | 3/CF123560 # Slave同步到磁盘的WAL位置
    replay_location  | 3/CF123560 # Slave同步到数据库的WAL位置
    sync_priority    | 0  #同步Replication的优先度
                          0: 异步、1~?: 同步(数字越小优先度越高)
    sync_state       | async  # 有三个值,async: 异步、sync: 同步、potential: 虽然现在是异步模式,但是有可能升级到同步模式

    补充:

    6、检查异步流复制的情况:

    可以使用主库上的视图pg_stat_replication查看流复制的信息:

    postgres=# select pid,state,client_addr,sync_priority,sync_state from pg_stat_replication;

     pid  |   state   | client_addr | sync_priority |sync_state 

    ------+-----------+-------------+---------------+------------

     9552 | streaming | 10.0.2.61   |            0 | async

    (1 row)

     

    查看备库落后主库多少字节的WAL日志:

    postgres=# select pg_xlog_location_diff(pg_current_xlog_location(),replay_location)from pg_stat_replication;

     pg_xlog_location_diff 

    -----------------------

                        0

    (1 row)

     

     

    7、查看备库状态:

    如何判断数据库处于备库状态:

    1)hotstandby 状态:

    可以连接数据库执行pg_is_in_recovery()函数,主库上返回False,standby上返回true;

    主库:

    postgres=# select pg_is_in_recovery();

     pg_is_in_recovery 

    -------------------

     f

    (1 row)

    standby库:

    postgres=# select pg_is_in_recovery();

     pg_is_in_recovery 

    -------------------

     t

    (1 row)

     

    2)不是hotstandby:

    不是host standby不能直接连上去,此时使用pg_controldata来判断:

    从库:

    [postgre@pg-2 postgresql-9.4.4]$pg_controldata |grep state

    Database cluster state:              in archive recovery

     

    主库:

    [postgre@pg-1 data]$ pg_controldata |grep state

    Database cluster state:              in production

     

    8、在HotStandby,还可以执行如下一些函数,查看备库接收的WAL日志和应用WAL日志的状态:

    pg_last_xlog_receive_location()

    pg_last_xlog_replay_location()

    pg_last_xact_replay_timestamp()

    如下:

    postgres=# select pg_last_xlog_receive_location(),pg_last_xlog_replay_location(),pg_last_xact_replay_timestamp();

     pg_last_xlog_receive_location | pg_last_xlog_replay_location |pg_last_xact_replay_timestamp 

    -------------------------------+------------------------------+-------------------------------

     0/1B013F50                   | 0/1B013F50                  | 2015-07-17 11:41:09.406696+08

    (1 row)

  • 相关阅读:
    .net2.0播放WAV文件
    WEB打印:目前的几种方式及我们的任务[转]
    ASP.NET MVC Framework CTP版本将于今年年底放出[转CSDN]
    最安全的写日志方法
    学习Asp.net最有价值的网站
    【资源共享】《DDR常见问题简单排查》
    【资源共享】《Camera_for_RockChipSDK参考说明_v4.1》下载
    资源共享——《嵌入式Linux应用开发完全手册》韦东山 PDF电子档下载
    FireflyRK3288开发板Android编译环境搭建开荒
    【资源下载】分享个嵌入式开发的入门教程(包含视频)
  • 原文地址:https://www.cnblogs.com/kuang17/p/6805514.html
Copyright © 2020-2023  润新知