![](/img/trans.png)
[英]MySQL database clustering - Problems connecting SQL node (mysqld) to other nodes
[英]How data node selection done in MySQL Multi-site clustering - Is it based on geographic proximity of data nodes in a node group
我正在探索部署MySQL多站点群集的选项。 MySQL群集部署具有三个站点,并且具有两个节点组,每个节点组包含三个NoOfReplicas = 3的数据节点。 节点组中的3个数据节点位于三个不同的站点中,以进行地理分布。
这三个站点都通过mysqld服务器访问MySQL集群,并在单个表中执行SELECT和INSERT / UPDATE操作。
问题1:
从站点发出查询时将访问哪个数据节点。 查询将访问位于查询起源于同一站点的本地数据节点。
问题2:
使用EXPLAIN语句,我可以了解查询操作中正在使用哪个分区,但不能了解查询所访问的确切数据节点。 是否有任何方法可以了解要查询的节点组中的哪个数据节点。
问题3:
有没有一种方法可以为节点组中的数据节点选择设置站点关联性/标记。
问题1:答案取决于表是否正在使用READ BACKUP功能。 如果不是,查询将几乎总是发送到主副本,而与查询的位置无关。
对于MySQL Server中的READ BACKUP,我们会将查询发送到同一节点组中同一主机上的数据节点。 基于与MySQL服务器和数据节点相同的主机名,这通常是自动的。 也可以将变量ndb_data_node_neighbour设置为最接近的数据节点(这是MySQL Server中的配置变量)。
当数据节点评估将查询发送到哪里时,如果数据驻留在本地节点,它将转到本地节点。 否则,它将转到主副本节点。
您也可以使用完全复制的表,在这种情况下,数据驻留在每个节点中,在这种情况下,它将始终转到同一主机上的一个数据节点,并且可以在其中找到数据。
问题2:分区到节点和LDM线程的映射是静态的。 在位于以下位置的ndbinfo表table_fragments中可以找到此信息: https ://dev.mysql.com/doc/mysql-cluster-excerpt/5.7/en/mysql-cluster-ndbinfo-table-fragments.html
问题3:一个有趣的问题,我最近一直在研究这种功能。 无论是实际发布,还是通常情况下都无法保证,但其想法符合您的想法,为每个数据节点和MySQL Server定义一个LocationDomainId并将其用于路由读取请求。 同样,它仅适用于使用READ BACKUP功能或完全复制的表的表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.