postgresql hot standby

-----------------
做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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值