开发者社区> 问答> 正文

读写分离简介



功能介绍


目前,只有MySQL 5.6版本的实例支持读写分离功能,因为该功能必须和 只读实例一起使用。当您开通读写分离功能后,实例中会存在如下三类地址:


  • 主实例的连接地址:可以只有内网或者外网地址,也可以内外网地址共存。

  • 只读实例的连接地址:可以只有内网或者外网地址,也可以内外网地址共存。

  • 读写分离地址:内外网地址不能共存。默认生成内网地址,若需要使用读写分离的外网地址,可以进行切换,详细步骤请参见切换读写分离地址类型

主实例和只读实例都具有独立的连接地址,当前由应用程序自行配置实例连接地址,实现数据读取和写入操作的分离。
读写分离功能是在此基础上,额外提供了一个读写分离地址,联动主实例及其下的所有只读实例,实现了自动的读写分离链路。应用程序只需连接同一个读写分离地址进行数据读取及写入操作,读写分离程序会自动将写入请求发往主实例,而将读取请求按照用户设置的权重发往各个只读实例。用户只需通过添加只读实例的个数,即可不断扩展系统的处理能力,应用程序上无需做任何修改。
应用程序通过不同类型的连接地址访问数据库的原理如下图所示:


功能优势


  • 统一读写分离地址,方便维护。
    在现有的只读实例模式中,主实例和每个只读实例都有一个单独的实例连接地址,用户需要在应用程序中单独对每个地址自行进行配置管理,才能实现将写请求发往主实例而将读请求发往只读实例。
    RDS 读写分离功能,在现有的实例连接基础上,额外提供一个读写分离地址,用户连接该地址后即可对所属主实例和只读实例进行读写操作,读写语句的转发逻辑完全对使用者透明,可降低维护成本。

  • RDS 高安全链路原生支持,提升性能。
    对部分在云上通过自己搭建代理层实现读写分离的用户而言,在数据到达数据库之前需要经历多个组件的语句解析和转发,对响应延迟有较大的影响。而 RDS 读写分离在已有的高安全链路中直接内置,没有任何额外的组件来消耗时间,能够有效降低延迟,提升处理速度。

  • 可设权重和阈值,符合多场景使用。
    RDS 读写分离支持用户对所属主实例和只读实例进行读请求权重和只读实例延迟阈值设置。

  • 实例健康检查,提升数据库系统的可用性。
    RDS 读写分离模块将自动对分配体系内的所有实例进行健康检查,当发现某个实例出现宕机或者延迟超过阈值后,会自动将该实例移出分配体系(实例标识为不可用,并不再分配读请求),读写请求将在剩余的健康实例间按权重进行分配,以此确保单点只读实例发生故障时,不会影响应用的正常访问。在实例修复后,RDS 会自动将该实例纳回请求分配体系内。

    [backcolor=transparent]注意:为避免单点故障,建议使用读写分离的用户为一个主实例至少创建两个只读实例。

  • 免费使用,降低资源及维护成本。
    为普惠用户,RDS 对所有只读实例用户免费提供读写分离功能,无需支付任何额外费用。


功能限制


  • 暂不支持将如下命令或功能转发至只读实例:
    stmt prepare sql 命令会自动在主实例执行。

  • stmt prepare command 在 stmt close 前不支持转发至只读实例。

  • set global、set user 和 set once 的环境变量设置会自动在主实例执行。

暂不支持执行如下命令或功能:

  • 暂不支持 SSL 加密。

  • 暂不支持压缩协议。

  • 暂不支持 com_dump_table 和 com_change_user 协议。

  • 暂不支持 kill connection [query]。

  • 暂不支持 change user。

如下命令的执行结果具有随机性:
show processlist、show master status 和 com_process_info 这三个命令会根据执行时所连接的实例返回相应的结果。

常见问题


读写分离如何确保数据读取的时效性?

展开
收起
云栖大讲堂 2017-10-18 10:41:41 2491 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
开源分布式数据库PolarDB-X源码解读 立即下载
PostgreSQL复制原理及高可用集群 立即下载
PolarDB-X开源分布式数据库实战进阶 立即下载