详情页标题前

阿里云RDS数据库自动故障转移和读写分离-云淘科技

详情页1

使用PostgreSQLlibpqJDBC,您可以通过简单的配置实现自动故障转移(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&...]

示例

如下示例为连接1个RDS PostgreSQL主实例数据库和对应的2个只读实例数据库,只要确保至少有一个数据库可用,读请求就不会失败。

postgres://pgm-bpxxx1.pg.rds.aliyuncs.com:3433,pgm-bpxxx2.pg.rds.aliyuncs.com:3433,pgm-bpxxx3.pg.rds.aliyuncs.com:3433/postgres?target_session_attrs=any

target_session_attrs表示允许连接到指定状态的数据库,取值:

  • any:默认值,表示允许连接到任意数据库,会从所有配置的数据库中随机选择一个尝试连接,如果连接的数据库出现故障导致连接断开,会尝试连接其他数据库,从而实现故障转移。

  • read-write:只会连接到支持读写的数据库,即从第一个数据库开始尝试连接,如果连接后发现不支持读写,则会断开连接,然后尝试连接第二个数据库,以此类推,直至连接到支持读写的数据库。

更多libpq的使用方法和参数说明请参见Connection Strings。

您可以在应用程序中结合pg_is_in_recovery()函数,判断连接的数据库是主实例数据库的还是只读实例数据库,最终实现读写分离和故障转移,示例如下:

  • Python示例

    $ cat pg_conn.py  
    import psycopg2  
    conn = psycopg2.connect(database="postgres",host="pgm-bpxxx1.pg.rds.aliyuncs.com,pgm-bpxxx2.pg.rds.aliyuncs.com,pgm-bpxxx3.pg.rds.aliyuncs.com", user="testxxx", password="xxxxxx", port="3433", target_session_attrs="read-write")  
    cur = conn.cursor()  
    cur.execute("select pg_is_in_recovery(), pg_postmaster_start_time()")  
    row = cur.fetchone()  
    print "recovery =",row[0]  
    print "time =",row[1]  
    
    $ python pg_conn.py  
    recovery = False  
    time = 2020-07-09 15:33:57.79001+08  
  • PHP示例

    # cat pg_conn.php  
      
    
    $ php -f pg_conn.php  
    Connection status ok  
    Recovery-status: f  
    Server: xxx.xxx.xx.xx  

JDBC实现读写分离和自动故障转移

您可以在连接URL中定义多个数据库,并用逗号分隔,驱动程序将尝试按顺序连接到它们中的每一个,直到连接成功。如果没有成功,会返回连接异常报错。

命令

jdbc:postgresql://node1,node2,node3/accounting?targetServerType=preferSlave&loadBalanceHosts=true  

示例

jdbc:postgresql://pgm-bpxxx1.pg.rds.aliyuncs.com:3433,pgm-bpxxx2.pg.rds.aliyuncs.com:3433,pgm-bpxxx3.pg.rds.aliyuncs.com:3433/accounting?targetServerType=preferSlave&loadBalanceHosts=true  

参数说明如下:

  • targetServerType表示允许连接到指定状态的数据库,取值:

    • any:任何数据库。

    • master:主数据库。

    • slave:从数据库。

    • preferSlave:优先从数据库,如果没有从数据库才连接到主数据库。

    说明

    区别数据库主从的方式是通过查询数据库是否允许写入,允许写入的判断为主数据库,不允许写入的判断为从数据库。

  • loadBalanceHosts表示尝试连接数据库的顺序,取值:

    • False:默认值,按命令内顺序连接数据库。

    • True:随机连接数据库。

为实现读写分离,您需要在配置JDBC时配置2个数据源,1个设置targetServerType=master,一个设置targetServerType=preferSlave。需要写操作时,指定master的数据源,需要读操作时,指定preferSlave的数据源。如果需要判断数据源类型,您可以结合pg_is_in_recovery()函数,判断连接的数据库是主实例数据库的还是只读实例数据库,最终实现读写分离和故障转移。

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/154902.html

(0)
上一篇 2023年12月9日 下午7:17
下一篇 2023年12月9日
详情页2

相关推荐

  • 腾讯云云直播如何接收事件通知

    当直播过程中域名关联模板事件被触发时,腾讯云将主动发送请求到客户服务器,客户服务器负责应答请求。验证通过后,您可被动获取到含直播事件回调信息的 JSON 数据包。目前直播事件触发消息通知支持的事件包括:直播推流、直播断流、直播录制、直播截图、直播画面审核消息事件通知、直播音频审核事件通知、直播推流异常事件通知。 整体流程  流程说明:1. 主播在控制台…

    腾讯云 2023年12月9日
  • 腾讯云TDSQL-C MySQL版资源包概述

    资源包是 TDSQL-C MySQL 版推出的预付费资源类型,分为计算资源包和存储资源包,可用于抵扣 Serverless 版集群产生的计算资源和存储资源。通过资源包,可以提前预留资源,而且,相对于按量付费方式,资源包可以帮助您节省更多成本,资源包的购买容量越大,有效期越长,越划算。 资源包说明 预付费资源包 计算资源包 存储资源包 抵扣对象 计算资源固定额…

    腾讯云 2023年12月9日
  • 腾讯云对象存储查询语音识别开通状态

    简介 本文档提供关于查询语音识别开通状态相关的 API 概览以及 SDK 示例代码。 API 说明 查询语音识别开通状态 接口用于查询存储桶是否已开通语音识别功能。 SDK API 参考 SDK 所有接口的具体参数与方法说明,请参见 SDK API。 查询语音识别开通状态 功能说明 接口用于查询存储桶是否已开通语音识别功能。注意 COS iOS SDK 版本…

    腾讯云 2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 腾讯云容器服务TKE Kubernetes 大版本更新说明同尘科技

    1.24 changes since 1.22 注意:1. Kubernetes 1.24通过 Dockershim 对 Docker 的支持已移除,TKE 新建节点的容器运行时仅支持 Containerd 1.6.9。2. 针对集群1.22 升级1.24场景,运行时为 docker、containerd 1.4 版本以下(不包含 1.4)的节点,仅支持通过…

    腾讯云 2023年12月9日
  • 腾讯云云点播管理视频制作项目

    通过云点播控制台,您可以快速管理自己创建的视频制作项目,包括查询、重命名、剪辑、删除和导出视频制作项目。本文将为您介绍如何快速管理视频制作项目。注意:视频制作目前处于公测阶段,暂不收取费用。使用视频制作产生的其他费用(例如存储、转码、视频加速)按照云点播计费项正常计费。 查询项目 1. 登录 云点播控制台,单击左侧导航栏应用管理,进入应用列表页。2. 找到需…

    2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。