PostgreSQL实战之双机热备(一)

版权声明:本文为神州灵云作者的原创文章,未经神州灵云允许不得转载。

本文作者:Jack

长久以来数据在企业发展中都起着至关重要的作用,在网络科技高度发达的今天,系统业务复杂度与日俱增,数据量也成几何式增长,那么数据灾备方案显得越来越重要。

双机热备按切换方式可分为:主-备方式(Active-Standby)和双主机方式(Active-Active),两种方式各有优缺点,可以根据实际情况选择适合自己的方案。PostgreSQL实现双机热备的方案有很多第三方软件,今天主要来说一说PostgreSQL自带的实现方式以及简单的应用测试。

环境:
环境.jpg

安装:
主机和备机都需要执行下面操作,本安装采用RPM包离线安装方式,当然如果你的机器能联网用yum在线安装更方便,这里提供一下下载地址:
https://yum.postgresql.org/9.4/redhat/rhel-7-x86_64/repoview/postgresqldbserver94.group.html

1.安装(按顺序):
#rpm -ivh postgresql94-libs-9.4.20-1PGDG.rhel7.x86_64.rpm
#rpm -ivh postgresql94-9.4.20-1PGDG.rhel7.x86_64.rpm
#rpm -ivh postgresql94-server-9.4.20-1PGDG.rhel7.x86_64.rpm
#rpm -ivh postgresql94-contrib-9.4.20-1PGDG.rhel7.x86_64.rpm
1. 安装.jpg

2.初始化数据库:
#/usr/pgsql-9.4/bin/postgresql94-setup initdb
2. 初始化数据库.jpg

3.启动PostgreSQL服务并使之开机自启
#systemctl enable postgresql-9.4
3. PostgreSQL.jpg

4.启动数据库
#systemctl start postgresql-9.4
4. 启动数据库.jpg

5.给默认账户设置密码
#alter user postgres with encrypted password ‘test’;
5. 设置密码.jpg

6.配置PostgreSQL-MD5认证
修改文件:/var/lib/pgsql/9.4/data/pg_hba.conf 增加如下配置:

host all all 0.0.0.0/0 md5
6. MD5认证.jpg

7.配置PostgreSQL-Configure TCP/IP,默认情况下,TCP/IP连接是不可行的,所以其他计算机用户不能连接到postgresql。
修改文件:/var/lib/pgsql/9.4/data/postgresql.conf 增加如下配置:

listen_addresses = '*'
port = 5432
max_connections = 500

7. TCPIP连接.jpg

最后重启一下数据库就可以正常使用了,至此前期准备工作已经完成,下面就是本文的重点了,主备流复制的配置。

主库配置:

  1. 修改/var/lib/pgsql/9.4/data/postgresql.conf,在文件末尾增加以下属性:
    wal_level = hot_standby
    checkpoint_segments = 16
    checkpoint_timeout = 5min
    archive_mode = on
    max_wal_senders = 3
    wal_keep_segments = 16

8. 主库配置.jpg

  1. 创建具有replication权限的用户:
    #su – postgres
    #psql
    #create user testrep replication login encrypted password ‘test’;

  2. 修改/var/lib/pgsql/9.4/data/pg_hba.conf,在文件末尾增加下面属性:
    host replication testrep 0.0.0.0/0 md5

  3. 重启数据库
    #systemctl restart postgresql-9.4.service

备库配置:

  1. 停止备库的PostgreSQL服务:
    # systemctl stop postgresql-9.4.service

  2. 清空备库之前的数据文件:
    # rm -rf /var/lib/pgsql/9.4/data/

  3. 从主库上恢复数据,输入下面命令,密码是之前配置的密码:testrep
    #su - postgres
    #pg_basebackup -D /var/lib/pgsql/9.4/data/ -F p -X stream -v -P -h 192.168.1.100 -U testrep
    9. 主库恢复数据.jpg

  4. 修改/var/lib/pgsql/9.4/data/postgresql.conf,在文件末尾增加下面属性:
    hot_standby = on
    10. Standby.jpg

  5. 增加recovery.conf文件:
    # su - postgres
    #vi /var/lib/pgsql/9.4/data/recovery.conf
    然后输入下面命令,然后保存退出:
    standby_mode = on
    primary_conninfo = ‘host=192.168.1.100 port=5432 user=testrep password=test’
    trigger_file = ‘/var/lib/pgsql/9.4/data/postgresql.trigger.5432’
    赋权限:
    #chmod 777 /var/lib/pgsql/9.4/data/recovery.conf

  6. 启动PostgreSQL服务:
    #systemctl start postgresql-9.4.service

验证配置:

  1. 在主库的服务器上输入命令,会看到多出一个wal sender process的进程:
    #ps -aux | grep postgres
    11. 验证配置.jpg

  2. 在备库的服务器上输入命令,会看到多出一个wal receiver process的进程:
    #ps -aux | grep postgres
    12. 备库进程.jpg

测试:

  1. 在主机上创建表user,然后在备机上可以看到user表已经被复制过来了
    13. 表User主机.jpg
    14. 表User备机.jpg

  2. 在主机上插入数据,然后在备机上可以看到这条数据已经被复制过来了
    15. 复制主机.jpg
    16. 复制备机.jpg

  3. 在备机上插入数据失败,说明在主备模式下备机是只读的
    17. 数据失败.jpg

  4. 停止备机,在主机上插入数据,然后再启用备机,可以看到备机也是有这条数据的
    18. 停止主机.jpg
    19. 停止备机.jpg

欢迎交流探讨!!

神州灵云公司官网(二维码).png

猜你喜欢

转载自blog.csdn.net/dclingcloud/article/details/86616176