PostgreSQL:十六.高可用、负载均衡和数据复制
PostgreSQL:⼗六.⾼可⽤、负载均衡和数据复制
⼗六. ⾼可⽤、负载均衡和数据复制
16.1 常见的数据同步解决⽅案
1. 共享磁盘故障转移
2. ⽂件系统复制
3. 事务⽇志
4. 基于语句的复制
5. 异步复制
6. 同步复制
16.2 ⽇志传送备⽤服务器
1、⽇志传送概述
使⽤⽇志传送,有以下⼏点好处。
1. ⽆需昂贵的软件或硬件即可实现冗余故障转移系统。
2. 备⽤服务器可以⽤于其它⽤途。⽽不必长期闲置。例如,当辅助数据库因处理进⼊的⽇志⽂件⽽处于不可访问状态时,可以在备⽤服
务器上运⾏另⼀个独⽴数据库。
3. ⼀旦设置好,配置成本相对低廉并且易于维护。
4. 有⾮常可靠的⽅法⽤于提供数据库的冗余副本。
5. 实现和维护配置的成本相对低廉。
千山万水的歌词6. ⽀持本地位置和远程灾难恢复⽅案。
预写式⽇志(WAL)是⼀种实现事务⽇志的标准⽅法。通过在备⽤服务器上的restore_command,可以使两个服务器协同⼯作。它只是等候主服务器的下⼀个可⽤WAL⽂件。restore_command在备份服务器的f ⽂件中指定。普通的恢复过程需要来⾃WAL归档的⽂件,如果⽆法获取则报告错
误。对于备份过程来说,下⼀个可⽤WAL 件通常不能马上获取,所以必须耐⼼等待直到它出现。通过书写代码可以实现等待并判断下⼀个WAL⽂件是否可⽤的⽬的。同时必须有触发失效切换的机制,它应当中断restore_command,跳出循环并向备份服务器返回⼀个"⽂件未到"的错误。这将导致备份服务器结束恢复过程并取代已失效的主服务器。
2、设置备⽤服务器
第⼀步:安装主服务器和备份服务器并尽可能保持完全相同,包括完全相同的数据库副本和 PostgreSQL版本。
第⼆步:设置从主服务器连续归档WAL到备份服务器上的某个⽬录。确保主服务器上的 archive_command和 archive_timeout设置恰当。
第三步:为主服务器做⼀个基础备份,然后在备份服务器上还原这个备份。
第四步:在备份服务器上依照 WAL 归档启动恢复过程,注意在 f 中使⽤正确的 restore_command 设置。
16.3 数据流的复制
1、流复制概述
流复制是异步的,所以在数据同步中,会有⼀个⼩的延迟。这个延迟远⼩于基于⽂件⽇志传送,通常1秒内⾜够与负载保持均衡。流复制有以下⼏个优点。
1. 流复制对于数据库性能的影响更⼩。
2. 流复制相对于其他复制相⽐,所需的硬件成本较⼩。
3. 流复制更加灵活,⽀持异构数据库对象的同步。
要使⽤流复制,建⽴⼀个基于⽂件的⽇志传送备服务器。需要注意以下设置。
1. 将⼀个基于⽂件的⽇志传送备服务器转为流复制备服务器,在f⽂件中设置primary_conninfo 指向主服务器。在主服
务器上设置listen_addresses和⾝份验证选项(设置⽂件f),因此备⽤服务器可以连接到在主服务器的replication数据库。
2. 在系统上⽀持保持活动的的套接字选项,设置tcp_keepalives_idle,tcp_keepalives_interval和tcp_keepalives_count帮助主机及
时发现断开的连接。
3. 设置备⽤服务器的最⼤并发连接数。
4. 当启动了备服务器并且正确设置了primary_conninfo,该备服务器在回放所有可⽤的WAL⽂件后,将连接到主服务器。如果成功建
⽴了该连接,将在备服务器中看到WAL接收进程,并且在主服务器相应的⼀个WAL发送进程。
2、⾝份验证
设置复制的访问权限是很重要的,只有受信任的⽤户可以读取WAL流,因为很容易从中提取权限信息。备⽤服务器必须验证作为主服务器的超级⽤户。所以需要在主服务器上创建⼀个有SUPERUSER和LOGIN权限的⾓⾊
16.4 数据的同步复制
1、同步复制概述
同步复制可以保证所有的数据交易被转移到⼀个同步的备⽤服务器中。在同步复制时,每次提交事务时将等待,直到收到确认提交已被写⼊到磁盘中,然后在主服务器和备⽤服务器上记录事务⽇志。
同步复制技术的应⽤,可以保证主服务器不在线或者崩溃的情况下,任何已提交事务的数据都不会丢失。对于同步复制来 说,事务在返回前需要被写到两个服务器的磁盘上,因此会在响应时间上带来很⼤的损失。为了缓解这种情况,PostgreSQL除了像其它数据库系统⼀样提供同步复制功能 外,还额外提供⼀个可以基于每⼀次事务提交⽽做出同步或异步复制的控制功能。这将使应⽤开发者通过把⼀些不可丢失的关键数据(⽐如财务交易)和那些响应时间上要求⾼的不太关键的数据区分开,来优化系统的性能。
2、同步复制应⽤案例
步骤1:在主和从服务器上创建replicaton⾓⾊为repl:
shell>psql
校长述职报告ode=#CREATE ROLE repl REPLICATION LOGIN PASSWORD ‘123456’步骤2:在主和从服务器上创建语⾔plpgsql:
node=# use node;
node=# create language plpgsql;
步骤3:在备⽤服务器上修改f配置:
host replication replication_role 192.168.1.15/32 md5
步骤4:在主服务器上备份数据库:
pg_dump node > node_20121120.dmp
步骤5:在备⽤服务器恢复数据库node :
postgres=#create database node;
postgres=#\q
shell>psql node < node_20121120.dmp ;
步骤6:在备⽤服务器的数据库/export/script⽬录下创建⼀个脚本replication.
步骤7:启动脚本:
./replication start
步骤8:在主服务器的数据库上空表public.hxf中添加⼀条记录:
今年国庆放几天假insert into hxf(uid,uname) select 1,‘tianyi’;
步骤9:在主服务器的数据库查询:
node=# select * from hxf;
uid | uname幼儿园放假时间2022寒假
-----±------------
1 | tianyi
(1 row)
步骤10:在备⽤服务器的数据库中查询:
node=# select * from hxf;
中通快递uid | uname穿越火线网剧
-----±------------
1 | tianyi
(1 row)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。