据我所知,mysqld 进程是 MySQl 集群的一种路由器。它将请求定向到正确的 ndbd 节点。
假设我在 3 台不同的机器上有 3 个 ndbd 节点并且我不使用复制。我需要多少个 mysqld 进程?我会说一个?对我来说,它就像一个主从架构(与 mongodb 相当)但我看到了每个 ndbd 节点也有一个 mysqld 进程的配置。为什么?
据我所知,mysqld 进程是 MySQl 集群的一种路由器。它将请求定向到正确的 ndbd 节点。
假设我在 3 台不同的机器上有 3 个 ndbd 节点并且我不使用复制。我需要多少个 mysqld 进程?我会说一个?对我来说,它就像一个主从架构(与 mongodb 相当)但我看到了每个 ndbd 节点也有一个 mysqld 进程的配置。为什么?
对于在 MySQL Cluster 环境中运行
mysqld
的 DB Server,DB Server 的角色称为 SQL 节点。我曾经描述过存储节点和 SQL 节点之间的区别:mysqld --ndb-cluster 是否需要在 MySQL Cluster 数据节点上运行?. 在问题的评论部分,Mat Keep评论说您应该查看MySQL Cluster -- 在数据节点上存储表数据。
在一个小型集群中,我看不到在存储节点上运行 mysqld 有任何重大影响。在更大的集群中,我希望 SQL 节点与数据节点分开设置,除非您打算将数据存储在物理文件中。
您可以从 DBA StackExchange 中的三位 MySQL 集群专家那里找到更多信息
根据您的评论
免责声明:未经 SCMDBA 认证
就个人而言,我会获得第四台服务器并将其作为 SQL 节点运行,而将其他服务器作为存储(数据)节点。确保 SQL 节点和数据节点具有相同的硬件和操作系统设置。
如果它是一个低写入数据库集群,那么您可以碰巧
mysqld --ndbcluster
在每个数据节点上运行它(不需要第四个服务器)。~5000 万~1kB 记录是~50GB 的数据,即使不计算标头和可能的索引。你有 3 台机器,每台都有 8GB 的 RAM。这意味着数据节点可以使用高达 6GB 的 RAM。MySQL Cluster 中的所有数据记录都必须存储在两个节点上。因此,在您的集群中,您可以存储 (3*6GB)/2=9GB 的数据。
由于数据记录标题、可能的索引和其他元数据,实际数量甚至更少。
因此,要在集群中存储 50GB 的数据,您必须使用 MySQL 集群磁盘数据表。
顺便说一下,默认集群设置
NoOfReplicas=2
不能有 3 个数据节点。文档说"The value for this parameter must divide evenly into the number of data nodes in the cluster"
。您必须使用 2 个数据节点并将第三个服务器专用于 SQL 节点,或者更改
NoOfReplicas
为 1 个并降低高可用性。