我正在探索部署MySQL多站点集群的选项。MySQL集群部署有三个站点,有两个节点组,每个节点组包含三个带有NoOfReplicas=3的数据节点,一个节点组中的3个数据节点被放置在三个不同的位置进行地理传播。
所有三个站点都通过mysqld服务器访问MySQL集群,并在一个表中执行SELECT和INSERT/UPDATE操作。
问题1:
当从站点发出查询时,将访问哪个数据节点。查询将访问位于同一站点的本地数据节点,该站点是查询的发源地。
问题2:
使用EXPLAIN语句,我可以理解在查询操作中使用的是哪个分区,但不了解查询访问的确切数据节点。是否有任何方法可以了解为查询访问的节点组中的哪个数据节点。
问题3:
是否有方法为节点组中的数据节点选择设置站点关联/标记。
发布于 2017-10-24 12:48:08
问题1:答案取决于表是否使用读备份功能。如果不是,查询几乎总是被发送到独立于其所在位置的主副本。
对于MySQL服务器中的读备份,我们将将查询发送到同一节点组和同一主机上的数据节点。这通常是基于用于MySQL服务器和数据节点的相同主机名而自动完成的。还可以将变量ndb_data_node_neighbour设置为您最接近的数据节点(这是MySQL服务器中的配置变量)。
当数据节点计算出要将查询发送到哪里时,如果数据驻留在本地节点,它将转到本地节点。否则,它将转到主副本节点。
您还可以使用完全复制的表,在这种情况下,数据驻留在每个节点中,在这种情况下,数据始终会转到同一主机上的a数据节点,并在那里找到数据。
问题2:分区到节点和LDM线程的映射是静态的。此信息可在ndbinfo表table_fragments中找到:https://dev.mysql.com/doc/mysql-cluster-excerpt/5.7/en/mysql-cluster-ndbinfo-table-fragments.html。
问题3:有趣的问题,我最近一直在研究这样一个特性。不管它是否会被实际发布,以及什么时候会像往常一样不是不能保证的事情,但是这个想法与您的想法是一致的,我们为每个数据节点和MySQL服务器定义了一个MySQL,并使用它来路由读取请求。同样,它将仅适用于使用读取备份功能或完全复制表的表。
https://stackoverflow.com/questions/46888228
复制相似问题