版权声明:本文为神州灵云作者的原创文章,未经神州灵云允许不得转载。
本文作者:Jack
长久以来数据在企业发展中都起着至关重要的作用,在网络科技高度发达的今天,系统业务复杂度与日俱增,数据量也成几何式增长,那么数据灾备方案显得越来越重要。
双机热备按切换方式可分为:主-备方式(Active-Standby)和双主机方式(Active-Active),两种方式各有优缺点,可以根据实际情况选择适合自己的方案。PostgreSQL实现双机热备的方案有很多第三方软件,今天主要来说一说PostgreSQL自带的实现方式以及简单的应用测试。
环境:
安装:
主机和备机都需要执行下面操作,本安装采用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
2.初始化数据库:
#/usr/pgsql-9.4/bin/postgresql94-setup initdb
3.启动PostgreSQL服务并使之开机自启
#systemctl enable postgresql-9.4
4.启动数据库
#systemctl start postgresql-9.4
5.给默认账户设置密码
#alter user postgres with encrypted password ‘test’;
6.配置PostgreSQL-MD5认证
修改文件:/var/lib/pgsql/9.4/data/pg_hba.conf 增加如下配置:
host all all 0.0.0.0/0 md5
7.配置PostgreSQL-Configure TCP/IP,默认情况下,TCP/IP连接是不可行的,所以其他计算机用户不能连接到postgresql。
修改文件:/var/lib/pgsql/9.4/data/postgresql.conf 增加如下配置:
listen_addresses = '*'
port = 5432
max_connections = 500
最后重启一下数据库就可以正常使用了,至此前期准备工作已经完成,下面就是本文的重点了,主备流复制的配置。
主库配置:
- 修改/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
-
创建具有replication权限的用户:
#su – postgres
#psql
#create user testrep replication login encrypted password ‘test’; -
修改/var/lib/pgsql/9.4/data/pg_hba.conf,在文件末尾增加下面属性:
host replication testrep 0.0.0.0/0 md5
-
重启数据库
#systemctl restart postgresql-9.4.service
备库配置:
-
停止备库的PostgreSQL服务:
# systemctl stop postgresql-9.4.service -
清空备库之前的数据文件:
# rm -rf /var/lib/pgsql/9.4/data/ -
从主库上恢复数据,输入下面命令,密码是之前配置的密码: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
-
修改/var/lib/pgsql/9.4/data/postgresql.conf,在文件末尾增加下面属性:
hot_standby = on
-
增加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 -
启动PostgreSQL服务:
#systemctl start postgresql-9.4.service
验证配置:
-
在主库的服务器上输入命令,会看到多出一个wal sender process的进程:
#ps -aux | grep postgres
-
在备库的服务器上输入命令,会看到多出一个wal receiver process的进程:
#ps -aux | grep postgres
测试:
-
在主机上创建表user,然后在备机上可以看到user表已经被复制过来了
-
在主机上插入数据,然后在备机上可以看到这条数据已经被复制过来了
-
在备机上插入数据失败,说明在主备模式下备机是只读的
-
停止备机,在主机上插入数据,然后再启用备机,可以看到备机也是有这条数据的
欢迎交流探讨!!