ITPub博客

首页 > 数据库 > NoSQL > postgresql hot standby

postgresql hot standby

原创 NoSQL 作者:wzgchen 时间:2015-08-27 09:57:32 0 删除 编辑
-----------------
做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/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 分区表
请登录后发表评论 登录
全部评论

注册时间:2015-05-01

  • 博文量
    383
  • 访问量
    178614