多主集群(库表)常见问题

本文档介绍了在使用多主集群(库表)过程中遇到的问题和解决方法。

多主集群(库表)产品系列如何购买更多的读写节点?

新创建的多主集群(库表)仅包括2个读写节点。要在集群创建成功后,才能继续增加读写节点。增加读写节点的操作请参见增加或删除节点

某个RW节点没有多少业务压力,为何连接数还那么高?

用户使用多主集群(库表)下的集群地址建立连接时,数据库代理会与每个RW节点都建立连接,所以每个RW上的连接数都是相同的。建议开启thread pool功能,这样连接数过多并不会明显消耗数据库的资源。

使用多主集群(库表)后,是不是一个数据库或数据对象中的数据,可以在任意读写节点上访问?

不可以。一个数据库或数据对象中的数据,只能在一个节点上访问。但是,您可以使用访问点切换命令,在必要的时候进行动态的切换。如果需要进行多节点间同时读写和访问的情况,请参考【邀测】PolarDB多主集群支持CRAC。开通后可以正常使用多主集群(行级)

什么时候用数据库隔离级别,什么时候用数据对象隔离级别?

如果业务是按照数据库database或schema来做隔离的,同时各个数据库之间的关联查询和更新比较少,那么可以用数据库隔离级别来管理。这个也是默认的方式。优点是以后切换访问点,管理起来比较方便。如果业务只使用了少数几个数据库,并且各个功能是按照表级别来隔离的,那么可以考虑使用数据对象隔离级别。这样对业务的改造最小,管理灵活。但是缺点是,后期切换访问点,需要手动把数据库下的对象一个个切换,管理较复杂。

使用多主集群(库表)后,需要改应用的代码来适配么?

不需要。虽然多主集群(库表)后端有多个读写节点,但是应用不需要知道每个数据库或数据对象的访问点在哪个节点上,代理层会自动转发相应的请求到对应的节点上。

如果两个数据库或数据对象的访问点在不同的节点上,我想在一个事务中同时修改他们,可以么?

不可以。同一个事务中修改的数据库或数据对象,必须在一个节点上。

如果两个数据库或数据对象的访问点在不同的节点上,我想做跨节点的查询,可以么?

可以。需要购买全局只读节点。借助全局只读节点,可以实现跨访问点的查询。

我使用ALTER语句切换数据库或数据对象的访问点,但是命令迟迟不返回,是什么原因?

主要有以下的原因:第一,如果是数据库访问点切换,且数据库下数据对象很多,那么可能会影响切换速度。第二,切换时数据库或数据对象的DML压力比较大,尤其是写压力,这也会影响切换速度。建议在业务低峰期切换。

如何查看元信息?

依然可以使用information_schema库下的表查看,但是有一些表是记录的整个集群的信息,有一些是记录了当前执行SQL的节点信息,需要区分。例如information_schema.tables表是整个集群的信息。information_schema.innodb_tables记录的是单个节点的信息。

如何增加存储灾备节点?

控制台直接购买存储灾备节点即可。默认情况下,存储灾备节点跟其他节点部署在不同的可用区,会有独立的计算和存储资源。

多主集群(库表)有那么多写节点,我想订阅binlog给下游用,怎么办?

集群打开binlog开关,然后下游使用集群地址,直接订阅即可。多主集群(库表)内部会自动排序,提供出一条合理的binlog流给下游使用。