数据库有问必答|RDS PostgreSQL 如何实现自动故障转移和读写分离?
Q: RDS PostgreSQL 如何实现自动故障转移和读写分离?
您可以使用PostgreSQL的libpq或JDBC,通过简单的配置即可实现自动故障转移(failover)和读写分离。详细说明如下:
-
功能介绍
从PostgreSQL 10开始,libpq驱动层开始支持简单的故障转移,JDBC驱动层则支持简单的故障转移和负载均衡。
①.libpq是PostgreSQL的C应用程序接口,包含一组库函数,允许客户端程序将查询请求发送给PostgreSQL后端服务器并接收这些查询的结果;
②.JDBC(Java Database Connectivity)是Java语言中用来规范客户端程序如何访问数据库的应用程序接口,在PostgreSQL中JDBC支持故障转移和负载平衡(Load Balance)。
-
libpq实现自动故障转移和读写分离
通过libpq函数连接多个数据库,当出现故障时会自动切换到可用的数据库。
命令:
postgresql://[user[:password]@][netloc][:port][,...][/dbname][?param1=value1&...]
-
JDBC实现读写分离和自动故障转移
您可以在连接URL中定义多个数据库,并用逗号分隔,驱动程序将尝试按顺序连接到它们中的每一个,直到连接成功。如果没有成功,会返回连接异常报错。
命令:
jdbc:postgresql://node1,node2,node3/accounting?targetServerType=preferSlave&loadBalanceHosts=true
为实现读写分离,您需要在配置JDBC时配置2个数据源,1个设置targetServerType=master,1个设置targetServerType=preferSlave。需要写操作时,指定master的数据源,需要读操作时,指定preferSlave的数据源。如果需要判断数据源类型,您可以结合pg_is_in_recovery()函数,判断连接的数据库是主实例数据库的还是只读实例数据库,最终实现读写分离和故障转移。
我有话说: