POLARDB的读写分离问题

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: POLARDB的读写分离问题

读写分离问题
  POLARDB自带一个只读实例,增减只读实例非常快速,所以用户非常适合使用读写分离的功能,但是从目前用户的反馈来看,如果在插入数据后立刻查询,很容易查询到之前旧版的数据,为了解决这个问题,我们给出两种解法。一种是通过POLARDB数据库内核的强同步保证主实例和只读节点数据一致,另外一种是通过数据库前面的PROXY层来解决。下面简单介绍一下。

  POLARDB集群基于物理复制构建,目前复制除了支持常规的异步复制(默认),半同步复制之外,还有强同步复制,即当事务提交时,只有当指定的只读实例应用完redolog日志后,主实例才给用户返回成功。这样即使后续的读请求发送到了只读节点,也能保证读到最新的数据。但是这个配置会导致性能大幅度下降,只有默认异步复制的三分之一左右,在使用之前请做详细的测试。简单说一下配置过程:

  首先需要在主实例上设置:设置loose_innodb_primary_sync_slave为3,目的是告诉主实例,它连接的只读实例会有强同步的需求。接着在需要强同步的只读实例上把参数loose_slave_trans_sync_level设置为2,注意这个参数需要重启实例。另外,先设置主实例,再设置只读实例的顺序不能乱。设置成功后,在主实例上执行show polar replicas;(这个命令可以查看所有的只读实例),在sync_level这一列,可以发现由默认的0变成了2,这就表示强同步开启成功了。如果需要关闭强同步,在主实例上设置loose_innodb_primary_sync_slave为0,只读节点上设置loose_slave_trans_sync_level设置为0即可,注意设置的顺序依然不能乱。此外,如果强同步的只读实例在loose_innodb_primary_sync_slave_timeout后还没返回,强同步复制退化为异步复制,还可以通过loose_innodb_primary_sync_slave参数控制当只读节点掉线时是否立刻退化为异步复制。

  另外一种解决办法是通过PROXY来解决。主实例每次做完更新就会把当前的日志位点发给PROXY,同时PROXY也会定期去轮询最大的日志位点,当PROXY需要把后续的查询发到只读实例上时,首先会判断只读实例是否应用到了最新的位点,如果不是,就把请求转发到主实例。这个策略操作的单位是连接,即通过这种方法能保证同一个连接中读到的一定是最新的数据。这种方法虽然会导致主库的压力变大,但是其对性能影响较小,是一种推荐的方法。如果用户需要使用,联系售后做一次小版本升级,即可开放这个功能。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
2天前
|
SQL 存储 负载均衡
关系型数据库读写分离与主从复制
【5月更文挑战第2天】关系型数据库读写分离与主从复制
28 5
关系型数据库读写分离与主从复制
|
10月前
|
Cloud Native 关系型数据库 分布式数据库
阿里云最新产品手册——阿里云核心产品——云原生关系型数据库PolarDB——读写分离
阿里云最新产品手册——阿里云核心产品——云原生关系型数据库PolarDB——读写分离自制脑图
74 1
|
12月前
|
分布式数据库 调度 数据库
《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X读写分离和HTAP场景的实践
《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X读写分离和HTAP场景的实践
498 0
|
12月前
|
分布式数据库
《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X读写分离和HTAP场景的实践(2)
《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X读写分离和HTAP场景的实践(2)
397 0
|
12月前
|
分布式数据库
《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X读写分离和HTAP场景的实践(3)
《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X读写分离和HTAP场景的实践(3)
526 0
|
12月前
|
SQL 分布式数据库
《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X读写分离和HTAP场景的实践(4)
《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X读写分离和HTAP场景的实践(4)
706 0
|
12月前
|
SQL 分布式数据库 数据库
《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X读写分离和HTAP场景的实践(5)
《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X读写分离和HTAP场景的实践(5)
484 0
|
存储 负载均衡 Cloud Native
PolarDB 开源版 使用pgpool-II实现透明读写分离
PolarDB 开源版 使用pgpool-II实现透明读写分离. pgpool-II是PostgreSQL读写分离中间件, 由于PolarDB是计算存储分离架构, 和aws aurora一样, 只需要配置pgpool的负载均衡, 不需要配置它ha功能. ha功能建议采用polardb开源生态产品, 例如乘数科技的集群管理软件, 配置pgpool时使用rw, ro节点对应的vip即可(vip由乘数的集群管理软件来管理).
536 0
|
存储 运维 关系型数据库
PolarDB-X 读写分离与 HTAP| 学习笔记
快速学习 PolarDB-X 读写分离与 HTAP。
339 0
PolarDB-X 读写分离与 HTAP| 学习笔记
|
存储 Rust 负载均衡
配置 pgcat for PolarDB 读写分离连接池
PolarDB 开源数据库支持云原生存算分离分布式架构, 一份存储支持多个计算节点, 目前是一写多读的架构. 内核已经很强大了, 怎么实现业务透明的读写分离, 还缺一个连接池, pgcat是不错的选择. pgcat支持连接池、sharding、读写负载均衡等, 更多功能请参考其官网 https://github.com/levkk/pgcat
288 0