-----------------
做hot standby
主库通过日志复制到从库进行Recover.缺点:会落后一个日志
主库:
vi pg_hba.conf
host replication replica 192.168.0.0/16 md5
创建复制账号
CREATE ROLE replica login replication encrypted password '123456'
vi postgresql.conf
listen_addresses = '*'
max_wal_senders = 32
wal_level = hot_standby
wal_keep_segments = 256 # 设置流复制保留的最多的xlog数目,避免主库的WAL日志被覆盖
wal_sender_timeout = 60s # 设置流复制主机发送数据的超时时间
max_connections = 100 # 这个设置要注意下,从库的max_connections必须要大于主库的
备库:
vi recovery.conf
standby_mode = 'on'
primary_conninfo = 'user=replica password=123456 host=192.168.168.142 port=1921 sslmode=prefer sslcompression=1'
recovery_target_timeline = 'latest' # 这个说明这个流复制同步到最新的数据
psql -h 192.168.168.142 -U postgres
pg_basebackup -h 192.168.168.142 -U postgres -F p -P -x -R -D /usr/local/postgres/backup -l full_0826_2
mv backup data
vi postgresql.conf
hot_standby = on
max_standby_streaming_delay = 30s # 数据流备份的最大延迟时间
wal_receiver_status_interval = 1s # 多久向主报告一次从的状态,当然从每次数据复制都会向主报告状态,这里只是设置最长的间隔时间
hot_standby_feedback = on # 如果有错误的数据复制,是否向主进行反馈
max_connections = 1000 # 一般查多于写的应用从库的最大连接数要比较大
测试:
master:
psql
insert into abc values (5);
slave:
select * from abc;
从库只读,不能写
postgres=# delete from abc where id=5;
ERROR: cannot execute DELETE in a read-only transaction
查看复制状态
master:
select * from pg_stat_replication;
--------------------------
基于流复制的host standby
可以实现读写分离,对一致性较高的应用可以满足
同步复制要求standby写入后,commit才返回,会导致主库hang住,解决办法是启动2个standby或多个,只要一个正常就不会让主库hang
异步复制:上面hot standby就是异步模式
查看模式:
select pid,state,client_addr,sync_priority,sync_state from pg_stat_replication;
同步模式:在上面异步模式下再修改
master:
vi postgresql.conf
synchronous_standby_names = 'standby1' # *=all,意思是所有slave都被允许以同步方式连接到master,但同一时间只能有一台slave是同步模式。另外可以指定slave,将值设置为slave的application_name即可。
synchronous_commit = on #这个参数控制是否等待wal日志buffer写入磁盘再返回用户事物状态信息。这个对性能影响还是比较大的,看业务实际情况可考虑关闭,在关键数据更新时在事物中将其暂时性打开,保证关键数据不会因意外停机而丢失。默认情况下是打开状态。同步流复制模式需要打开这个参数。
slave:
vi recovery.conf
standby_mode = 'on'
primary_conninfo = 'application_name=standby1 user=replica password=123456 host=192.168.168.142 port=1921 sslmode=prefer sslcompression=1'
主机 sender
ps -ef | grep wal
pg_controldata | grep Database
查看备库状态
master/slave:
select pg_is_in_recovery();
-----------------------------
做hot standby
主库通过日志复制到从库进行Recover.缺点:会落后一个日志
主库:
vi pg_hba.conf
host replication replica 192.168.0.0/16 md5
创建复制账号
CREATE ROLE replica login replication encrypted password '123456'
vi postgresql.conf
listen_addresses = '*'
max_wal_senders = 32
wal_level = hot_standby
wal_keep_segments = 256 # 设置流复制保留的最多的xlog数目,避免主库的WAL日志被覆盖
wal_sender_timeout = 60s # 设置流复制主机发送数据的超时时间
max_connections = 100 # 这个设置要注意下,从库的max_connections必须要大于主库的
备库:
vi recovery.conf
standby_mode = 'on'
primary_conninfo = 'user=replica password=123456 host=192.168.168.142 port=1921 sslmode=prefer sslcompression=1'
recovery_target_timeline = 'latest' # 这个说明这个流复制同步到最新的数据
psql -h 192.168.168.142 -U postgres
pg_basebackup -h 192.168.168.142 -U postgres -F p -P -x -R -D /usr/local/postgres/backup -l full_0826_2
mv backup data
vi postgresql.conf
hot_standby = on
max_standby_streaming_delay = 30s # 数据流备份的最大延迟时间
wal_receiver_status_interval = 1s # 多久向主报告一次从的状态,当然从每次数据复制都会向主报告状态,这里只是设置最长的间隔时间
hot_standby_feedback = on # 如果有错误的数据复制,是否向主进行反馈
max_connections = 1000 # 一般查多于写的应用从库的最大连接数要比较大
测试:
master:
psql
insert into abc values (5);
slave:
select * from abc;
从库只读,不能写
postgres=# delete from abc where id=5;
ERROR: cannot execute DELETE in a read-only transaction
查看复制状态
master:
select * from pg_stat_replication;
--------------------------
基于流复制的host standby
可以实现读写分离,对一致性较高的应用可以满足
同步复制要求standby写入后,commit才返回,会导致主库hang住,解决办法是启动2个standby或多个,只要一个正常就不会让主库hang
异步复制:上面hot standby就是异步模式
查看模式:
select pid,state,client_addr,sync_priority,sync_state from pg_stat_replication;
同步模式:在上面异步模式下再修改
master:
vi postgresql.conf
synchronous_standby_names = 'standby1' # *=all,意思是所有slave都被允许以同步方式连接到master,但同一时间只能有一台slave是同步模式。另外可以指定slave,将值设置为slave的application_name即可。
synchronous_commit = on #这个参数控制是否等待wal日志buffer写入磁盘再返回用户事物状态信息。这个对性能影响还是比较大的,看业务实际情况可考虑关闭,在关键数据更新时在事物中将其暂时性打开,保证关键数据不会因意外停机而丢失。默认情况下是打开状态。同步流复制模式需要打开这个参数。
slave:
vi recovery.conf
standby_mode = 'on'
primary_conninfo = 'application_name=standby1 user=replica password=123456 host=192.168.168.142 port=1921 sslmode=prefer sslcompression=1'
主机 sender
ps -ef | grep wal
pg_controldata | grep Database
查看备库状态
master/slave:
select pg_is_in_recovery();
-----------------------------
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/91975/viewspace-1783728/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/91975/viewspace-1783728/