PostgreSQL HA双机热备份配置

Posted on 2012-10-09 15:29  JasmineLiu  阅读(8171)  评论(0编辑  收藏  举报

    自PostgreSQL 9.0开始,添加了流复制(Streaming Repulication)。

    SR源于pg早起的“同步日志传送复制”(Synchronous Log Shipping Repulication)--一个高可用的(HA)解决方案。

     安装与配置(Linux--PostgreSQL9.X)

     说明:Primary_IP 表示主服务器IP地址

             Standby_IP 表示备用服务器IP地址

     1.在主服务器中安装PostgreSQL(备用服务器同理)

       cd ./root/Desktop (打开安装文件所在目录)

        ./configure

        make

        make install

      2.在主服务器的PostgreSQL中配置../data/postgresql.conf

        vi postgresql.conf

        listen_address = '*'

        wal_level = hot_standby

        max_wal_zenders = 30 (根据实际情况自己设置即可)

        archive_mode = on

        archive_command = 'cd'

     3.在主服务器的PostgreSQL中配置pg_hba_conf文件中的参数

        vi pg_hba.conf

        host replication all/postgres Standby_IP/32 trust (all与postgres仅选其一)

      4.启动主服务器中的PostgreSQL数据库,执行基础备份:

         psql -U posgres

         postgres#select pg_start_backup('hot_backup'); (可使用任意符号做备份标记)

       

         postgres#\q 

         tar -zcvf pgsql.tar.gz pgsql

         

         psql -U posgres

         postgres#select pg_stop_backup();

     5.将基础备份拷贝到备用服务器:

         scp pgsql.tar.gz  Standby_IP:/usr/local/

     6.在备用服务器的PostgreSQL中配置postgresql.conf文件中的参数

        vi postgresql.conf

        hot_standby = on

      7.在备用服务器PostgreSQL的data目录下建立recovery.conf文件

        vi recovery.conf

        standby_mode = ‘on’

        primary_conninfo = 'host=Primay_IP user=posgres port=5432'

        

       安装配置完毕,重启主服务器,然后重启备用服务器。

       一定要确保修改后的参数更新完毕,例如可以通过postgres#show wal_level来查看wal_level的参数。

       如果参数没有更新则服务器无法运行,所以一定要保证参数更新,方法是:关闭所有postgres服务后重新启动。        

      运行PostgreSQL数据库后,在priamy的任何修该都会同步到standby中,standby不能对数据库做修改只能查看。

       注意:1 一定要把防火墙关闭,否则主-备服务器无法获得连接,会出现如下问题:               

                  FATAL: could not connect to the primary server: could not connect to server: No route to host
                  Is the server running on host "192.168.100.112" and accepting
                  TCP/IP connections on port 5432?

                  具体解决方法(将firewall设置为disable)

                  [root@localhost bin]# setup

                  [root@localhost bin]# geten

                  getenforce getent

                  [root@localhost bin]# geten

                  getenforce getent

                  [root@localhost bin]# getenforce

                  Permissive

 (更多问题可以查看pg英文文档。)

Copyright © 2024 JasmineLiu
Powered by .NET 9.0 on Kubernetes