数据库有问必答|RDS PostgreSQL 如何实现自动故障转移和读写分离?

作者阿里云代理 文章分类 分类:linux图文教程 阅读次数 已被围观 980

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()函数,判断连接的数据库是主实例数据库的还是只读实例数据库,最终实现读写分离和故障转移。

本公司销售:阿里云新/老客户,只要购买阿里云,即可享受折上折优惠!>

我有话说: