双机热备的过程(因为手动安装导致的权限问题,暂时无法开机自启)
主机Primary 10.150.99.6
备机Standby: 10.150.99.96
两台系统之中安装postgresql (相同版本)
1.配置主节点
修该postgresql.conf
--------------------------------------------------修改以下参数:
#wal_level = minimal
#max_wal_senders = 0
//wal 发送进程数,有几个备库就设置为几
#wal_keep_segments = 0
//WAL日志文件的大小,设置一个足够大的值,以防主库生成WAL日志太快,日志还没有来得及传送到standby,就会循环覆盖
#hot_standby = off
//开启日志记录功能
#logging_collector = off
#log_directory = 'pg_log' //日志目录
#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' //日志名
--------------------------------------------------最终修改为:
wal_level = hot_standby
max_wal_senders = 1
wal_keep_segments = 16
hot_standby = on
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
[postgres@node1 data]$ psql
Password:
psql (postgresql 9.4.4)
Type "help" for help.
创建用于同步的账户,或者直接使用postgres账户
postgres=# create user standby SUPERUSER LOGIN password 'standby';
CREATE ROLE
//配置pg_hba.conf,添加如下:
// MD5 表示,encrypted password 加密过后的密码认证
# IPv4 local connections:
host all all 127.0.0.1/32 md5
host replication standby 10.150.99.96/32 md5
重启数据库,使参数生效
//pg_ctl 是数据库集,位于/usr/lib/postgresql/9.3/bin,具体的用法可以--help
//安装postgresql,默认会建立一个数据库cluster,可以通过pg_lsclusters查看,命令可以通过man /usr/share/man/man1/pg_lsclusters.1.gz 查看
sudo service postgresql start
2.进行基础备份
//开启备份功能
[postgres@node1 data]$psql -c "select pg_start_backup('backup0001')"
//将data目录下的数据远程拷贝到备库的data目录下
[postgres@node1 data]$rsync -arvP -e "ssh -p 22" /var/lib/postgresql/9.1/main/* 10.150.99.96:/usr/local/pgsql/data/ --exclude postmaster.pid
//关闭备份功能
[postgres@node1 data]$psql -c "select pg_stop_backup()"
注意: 没有启用WAL归档;您必须确保所有的WAL段已通过其他的方法拷贝,这样才能完成备份
pg_stop_backup
----------------
0/110000E0
(1 row)
3.配置备节点
//删除data目录下的postmaster.pid文件
[postgres@node2 ~]$ cd /opt/pgsql/data
[postgres@node2 data]$ rm -rf postmaster.pid
//在data目录下新建recovery.conf文件
[postgres@node2 data]$ vi recovery.conf
standby_mode='on'
recovery_target_timeline = 'latest'
primary_conninfo='host=10.150.99.6 port=5432 user=standby password=standby'
启动数据库
sudo service postgresql start
在主节点上创建表测试
[postgrs@node1 ~]$ psql
psql (9.4.4)
Type "help" for help.
postgres=# create table a (a int);
CREATE TABLLE
postgres=# insert into a values (123);
INSERT 0 1
postgres=#select * from a ;
a
-----
123
(1 rows)
在备节点上查看数据是否同步
[postgrs@node2 ~]$ psql
psql (9.4.4)
Type "help" for help.
List of relations
Schema | Name | Type | Owner
----------------+------+-------+--------
public | a | table | postgres
postgres=#select * from a ;
a
-----
123
(1 rows)
数据同步,流复制配置成功!
进行联机热备份时,不用关闭数据库。数据库可以正常地执行其它操作。如果要使联机热备份,数据库必须运行在归档模式下,将参数数据库archive_mode设为on,然后再将参数archive_dir设成一个启动数据库的操作系统用户有读写权限的目录,数据库就会运行在归档模式。要使这两个参数生效,必须重新启动数据库。