当叶节点处于复制模式时,MemSQL 数据库不可用于读取
MemSQL database not available for reads while leaf node is in replicating mode
我有一个 CentOS 服务器 运行 一个本地 memsql 集群(聚合器和叶子在同一台机器上)。我有一个名为 offers
的数据库。 出于某种原因,我无法对数据库中的表执行任何查询。
一切正常,直到我尝试将另一台机器添加到集群中。我让我所在位置的 IT 团队(完全)复制了我正在使用的服务器。我转到复制服务器,删除有问题的数据库,然后使用 memsql-toolbox-config register-node
命令注册服务器。然后数据库显示它处于过渡状态。我使用 memsql-ops
重新启动了 memsql 并遇到了这种情况。
运行 一个简单的查询产生:
memsql> select * from table;
ERROR 2261 (HY000): Query `select * from table` couldn't be executed because of an in progress failover operation. Check the status of the leaf nodes in the cluster (error 1049:'Leaf Error (172.26.32.20:3307): Unknown database 'offers_5'')
集群状态命令的输出是:
memsql> show cluster status;
+---------+--------------+------+----------+-------------+-------------+----------+--------------+-------------+-------------------------+----------------------+----------------------+---------------+-------------------------------------------------+
| Node ID | Host | Port | Database | Role | State | Position | Master Host | Master Port | Metadata Master Node ID | Metadata Master Host | Metadata Master Port | Metadata Role | Details |
+---------+--------------+------+----------+-------------+-------------+----------+--------------+-------------+-------------------------+----------------------+----------------------+---------------+-------------------------------------------------+
| 1 | 172.26.32.20 | 3306 | cluster | master | online | 0:181 | NULL | NULL | NULL | NULL | NULL | Reference | |
| 1 | 172.26.32.20 | 3306 | offers | master | online | 0:156505 | NULL | NULL | NULL | NULL | NULL | Reference | |
| 2 | 172.26.32.20 | 3307 | cluster | async slave | replicating | 0:180 | 172.26.32.20 | 3306 | 1 | 172.26.32.20 | 3306 | Reference | stage: packet wait, state: x_streaming, err: no |
| 2 | 172.26.32.20 | 3307 | offers | sync slave | replicating | 0:156505 | 172.26.32.20 | 3306 | 1 | 172.26.32.20 | 3306 | Reference | |
+---------+--------------+------+----------+-------------+-------------+----------+--------------+-------------+-------------------------+----------------------+----------------------+---------------+-------------------------------------------------+
4 rows in set (0.00 sec)
看来第二个节点正在复制。另请注意详细信息列:
stage: packet wait, state: x_streaming, err: no
运行 复制状态命令给出:
memsql> show replication status;
+--------+----------+------------+--------------+------------------+--------------------+------------------+----------------+----------------+-----------+---------------------------+-------------+-----------------+-------------------+-----------------+---------------+---------------+
| Role | Database | Master_URI | Master_State | Master_CommitLSN | Master_HardenedLSN | Master_ReplayLSN | Master_TailLSN | Master_Commits | Connected | Slave_URI | Slave_State | Slave_CommitLSN | Slave_HardenedLSN | Slave_ReplayLSN | Slave_TailLSN | Slave_Commits |
+--------+----------+------------+--------------+------------------+--------------------+------------------+----------------+----------------+-----------+---------------------------+-------------+-----------------+-------------------+-----------------+---------------+---------------+
| master | cluster | NULL | online | 0:181 | 0:181 | 0:177 | 0:181 | 86 | yes | 172.26.32.20:3307/cluster | replicating | 0:180 | 0:181 | 0:180 | 0:181 | 84 |
| master | offers | NULL | online | 0:156505 | 0:156505 | 0:156505 | 0:156505 | 183 | yes | 172.26.32.20:3307/offers | replicating | 0:156505 | 0:156505 | 0:156505 | 0:156505 | 183 |
+--------+----------+------------+--------------+------------------+--------------------+------------------+----------------+----------------+-----------+---------------------------+-------------+-----------------+-------------------+-----------------+---------------+---------------+
2 rows in set (0.00 sec)
我从未启动过任何故障转移或复制。任何人都知道为什么会这样?我该如何解决这个问题?
编辑:
使用 memsql-ops
我得到:
[me@memsql ~]$ memsql-ops memsql-list
ID Agent Id Process State Cluster State Role Host Port Version
33829AF Af13af7 RUNNING CONNECTED MASTER 172.26.32.20 3306 6.5.18
BBA1B61 Af13af7 RUNNING CONNECTED LEAF 172.26.32.20 3307 6.5.18
但使用 memsql-admin
,使用新的 memsql 工具:
[me@memsql ~]$ memsql-admin list-nodes
✘ Failed to list nodes on all hosts: failed to list nodes on 1 host:
172.26.32.20
No nodes found
让我的问题更清楚一些 - 如何让我的服务器再次响应查询?在我这样做之后,我应该如何添加另一台主机?我应该完全清除任何 memsql 数据的复制服务器吗?
第二次编辑:
我设法通过删除数据库和集群数据解决了这个问题,并使用新的 MemSQL 工具设置了一个新的,扔掉了 MemsqlOps。阅读我的 .
看起来有几件事可能会导致问题。一般来说,克隆 memsql 服务器不受支持,也不是添加节点的最佳方式。看起来您可能同时使用较旧的 Ops 管理工具和较新的 MemSQL 工具。我建议不要安装或使用 Ops,而是坚持使用新的 MemSQL 工具。
一个好的开始是尝试在克隆后重新创建节点;克隆的 memsql 节点不会正确地成为集群的一部分。您还应该验证集群中没有超过一个主聚合器。如果您可以从这里开始,看看它是否能解决您的问题,我很乐意帮助您解决 运行 遇到的任何其他问题。
我成功地建立了一个工作集群。
正如 micahbhakti 在他的 中提到的,我尝试只使用较新的 MemSQL 工具,而不是已弃用的 MemSQL Ops。它需要删除两台服务器上现有的 MemSQL 代理,然后按照 MemSQL 文档中的教程进行操作。以下是我为遇到此问题的任何人采取的步骤,最好描述为:My MemSQL-Ops-managed-MemSQL-cluster is not responding。我怎样才能将它升级到一个工作的 MemSQL-tools-managed-cluster?
1。尽可能保存数据
接下来的步骤是删除所有的memsql数据,所以最好能保存数据。 table 数据可以通过简单的
轻松存储在 CSV 文件中
SELECT * FROM important_data_containing_table INTO OUTFILE '/home/yourfolder/yourcsvfile.csv';
对所有包含重要数据的 table 执行此操作。您也可以保存方案本身。您可以通过查看最初用于创建 table 的所有创建查询并将其复制到另一个文件,以便稍后重新执行它们来做到这一点。使用这个
SHOW CREATE TABLE your_table_name
mysql 的文档描述为 here. It might not be similar to the syntax used in mem, but the above base command works. For exact information, read about MySQL Features Unsupported in MemSQL。
2。删除任何与 Memsql-Ops
有关的内容
正如here关于uninstall
命令所说:
Stops the local MemSQL Ops agent and deletes all its data.
If MemSQL nodes are already installed in the local host, this command will prompt users to delete those nodes first before proceeding with the uninstall.
确实,如果有一个节点 运行nning(在我的例子中有),系统会提示您 运行 另一个命令来删除这些节点:memsql-ops memsql-delete --all
。这将删除数据库中的所有数据,如 documentation:
中所述
Deletes all data for a MemSQL node. This operation is not reversible and may lead to data loss. Users who want to perform this operation are prompted to explicitly type ‘DELETE’ to be sure of their decision.
这就是为什么我要你保存你需要的东西:)
应该为您想要包含在新闪亮集群中的每个主机完成此操作。
3。按照说明使用 MemSQL 工具创建新集群
从已弃用的 MemSQL 操作代理和数据中清除服务器后,您可以按照说明进行操作 here。我选择设置多主机综合设置。该过程将要求您注册主机,然后设置节点角色(主聚合器、聚合器和叶子)、IP 地址、密码、端口等。
之后,您可以尝试测试集群,在一台机器上进行更改并在另一台机器上查看它们。我集群的部署机器上 memsql-admin list-nodes
的输出也是:
+------------+------------+--------------+------+---------------+--------------+---------+----------------+--------------------+
| MemSQL ID | Role | Host | Port | Process State | Connectable? | Version | Recovery State | Availability Group |
+------------+------------+--------------+------+---------------+--------------+---------+----------------+--------------------+
| AAAAAAAAAA | Master | 172.26.32.20 | 3306 | Running | True | 6.7.16 | Online | |
| BBBBBBBBBB | Aggregator | 172.26.32.22 | 3306 | Running | True | 6.7.16 | Online | |
| CCCCCCCCCC | Leaf | 172.26.32.20 | 3307 | Running | True | 6.7.16 | Online | 1 |
| DDDDDDDDDD | Leaf | 172.26.32.22 | 3307 | Running | True | 6.7.16 | Online | 1 |
+------------+------------+--------------+------+---------------+--------------+---------+----------------+--------------------+
4。恢复数据
重新执行您在第 1 步中保存的所有创建 table 查询,并使用 this 语法导入所有导出到 csv 的数据:
LOAD DATA INFILE '/home/yourfolder/yourcsvfile.csv' INTO TABLE your_table;
就是这样!现在您可以使用新的 MemSQL studio 管理您的集群,默认 运行 http://your_deployment_machine:8080
。
尽情享受吧:)
我有一个 CentOS 服务器 运行 一个本地 memsql 集群(聚合器和叶子在同一台机器上)。我有一个名为 offers
的数据库。 出于某种原因,我无法对数据库中的表执行任何查询。
一切正常,直到我尝试将另一台机器添加到集群中。我让我所在位置的 IT 团队(完全)复制了我正在使用的服务器。我转到复制服务器,删除有问题的数据库,然后使用 memsql-toolbox-config register-node
命令注册服务器。然后数据库显示它处于过渡状态。我使用 memsql-ops
重新启动了 memsql 并遇到了这种情况。
运行 一个简单的查询产生:
memsql> select * from table;
ERROR 2261 (HY000): Query `select * from table` couldn't be executed because of an in progress failover operation. Check the status of the leaf nodes in the cluster (error 1049:'Leaf Error (172.26.32.20:3307): Unknown database 'offers_5'')
集群状态命令的输出是:
memsql> show cluster status;
+---------+--------------+------+----------+-------------+-------------+----------+--------------+-------------+-------------------------+----------------------+----------------------+---------------+-------------------------------------------------+
| Node ID | Host | Port | Database | Role | State | Position | Master Host | Master Port | Metadata Master Node ID | Metadata Master Host | Metadata Master Port | Metadata Role | Details |
+---------+--------------+------+----------+-------------+-------------+----------+--------------+-------------+-------------------------+----------------------+----------------------+---------------+-------------------------------------------------+
| 1 | 172.26.32.20 | 3306 | cluster | master | online | 0:181 | NULL | NULL | NULL | NULL | NULL | Reference | |
| 1 | 172.26.32.20 | 3306 | offers | master | online | 0:156505 | NULL | NULL | NULL | NULL | NULL | Reference | |
| 2 | 172.26.32.20 | 3307 | cluster | async slave | replicating | 0:180 | 172.26.32.20 | 3306 | 1 | 172.26.32.20 | 3306 | Reference | stage: packet wait, state: x_streaming, err: no |
| 2 | 172.26.32.20 | 3307 | offers | sync slave | replicating | 0:156505 | 172.26.32.20 | 3306 | 1 | 172.26.32.20 | 3306 | Reference | |
+---------+--------------+------+----------+-------------+-------------+----------+--------------+-------------+-------------------------+----------------------+----------------------+---------------+-------------------------------------------------+
4 rows in set (0.00 sec)
看来第二个节点正在复制。另请注意详细信息列:
stage: packet wait, state: x_streaming, err: no
运行 复制状态命令给出:
memsql> show replication status;
+--------+----------+------------+--------------+------------------+--------------------+------------------+----------------+----------------+-----------+---------------------------+-------------+-----------------+-------------------+-----------------+---------------+---------------+
| Role | Database | Master_URI | Master_State | Master_CommitLSN | Master_HardenedLSN | Master_ReplayLSN | Master_TailLSN | Master_Commits | Connected | Slave_URI | Slave_State | Slave_CommitLSN | Slave_HardenedLSN | Slave_ReplayLSN | Slave_TailLSN | Slave_Commits |
+--------+----------+------------+--------------+------------------+--------------------+------------------+----------------+----------------+-----------+---------------------------+-------------+-----------------+-------------------+-----------------+---------------+---------------+
| master | cluster | NULL | online | 0:181 | 0:181 | 0:177 | 0:181 | 86 | yes | 172.26.32.20:3307/cluster | replicating | 0:180 | 0:181 | 0:180 | 0:181 | 84 |
| master | offers | NULL | online | 0:156505 | 0:156505 | 0:156505 | 0:156505 | 183 | yes | 172.26.32.20:3307/offers | replicating | 0:156505 | 0:156505 | 0:156505 | 0:156505 | 183 |
+--------+----------+------------+--------------+------------------+--------------------+------------------+----------------+----------------+-----------+---------------------------+-------------+-----------------+-------------------+-----------------+---------------+---------------+
2 rows in set (0.00 sec)
我从未启动过任何故障转移或复制。任何人都知道为什么会这样?我该如何解决这个问题?
编辑:
使用 memsql-ops
我得到:
[me@memsql ~]$ memsql-ops memsql-list
ID Agent Id Process State Cluster State Role Host Port Version
33829AF Af13af7 RUNNING CONNECTED MASTER 172.26.32.20 3306 6.5.18
BBA1B61 Af13af7 RUNNING CONNECTED LEAF 172.26.32.20 3307 6.5.18
但使用 memsql-admin
,使用新的 memsql 工具:
[me@memsql ~]$ memsql-admin list-nodes
✘ Failed to list nodes on all hosts: failed to list nodes on 1 host:
172.26.32.20
No nodes found
让我的问题更清楚一些 - 如何让我的服务器再次响应查询?在我这样做之后,我应该如何添加另一台主机?我应该完全清除任何 memsql 数据的复制服务器吗?
第二次编辑:
我设法通过删除数据库和集群数据解决了这个问题,并使用新的 MemSQL 工具设置了一个新的,扔掉了 MemsqlOps。阅读我的
看起来有几件事可能会导致问题。一般来说,克隆 memsql 服务器不受支持,也不是添加节点的最佳方式。看起来您可能同时使用较旧的 Ops 管理工具和较新的 MemSQL 工具。我建议不要安装或使用 Ops,而是坚持使用新的 MemSQL 工具。
一个好的开始是尝试在克隆后重新创建节点;克隆的 memsql 节点不会正确地成为集群的一部分。您还应该验证集群中没有超过一个主聚合器。如果您可以从这里开始,看看它是否能解决您的问题,我很乐意帮助您解决 运行 遇到的任何其他问题。
我成功地建立了一个工作集群。
正如 micahbhakti 在他的
1。尽可能保存数据
接下来的步骤是删除所有的memsql数据,所以最好能保存数据。 table 数据可以通过简单的
轻松存储在 CSV 文件中SELECT * FROM important_data_containing_table INTO OUTFILE '/home/yourfolder/yourcsvfile.csv';
对所有包含重要数据的 table 执行此操作。您也可以保存方案本身。您可以通过查看最初用于创建 table 的所有创建查询并将其复制到另一个文件,以便稍后重新执行它们来做到这一点。使用这个
SHOW CREATE TABLE your_table_name
mysql 的文档描述为 here. It might not be similar to the syntax used in mem, but the above base command works. For exact information, read about MySQL Features Unsupported in MemSQL。
2。删除任何与 Memsql-Ops
有关的内容正如here关于uninstall
命令所说:
Stops the local MemSQL Ops agent and deletes all its data.
If MemSQL nodes are already installed in the local host, this command will prompt users to delete those nodes first before proceeding with the uninstall.
确实,如果有一个节点 运行nning(在我的例子中有),系统会提示您 运行 另一个命令来删除这些节点:memsql-ops memsql-delete --all
。这将删除数据库中的所有数据,如 documentation:
Deletes all data for a MemSQL node. This operation is not reversible and may lead to data loss. Users who want to perform this operation are prompted to explicitly type ‘DELETE’ to be sure of their decision.
这就是为什么我要你保存你需要的东西:)
应该为您想要包含在新闪亮集群中的每个主机完成此操作。
3。按照说明使用 MemSQL 工具创建新集群
从已弃用的 MemSQL 操作代理和数据中清除服务器后,您可以按照说明进行操作 here。我选择设置多主机综合设置。该过程将要求您注册主机,然后设置节点角色(主聚合器、聚合器和叶子)、IP 地址、密码、端口等。
之后,您可以尝试测试集群,在一台机器上进行更改并在另一台机器上查看它们。我集群的部署机器上 memsql-admin list-nodes
的输出也是:
+------------+------------+--------------+------+---------------+--------------+---------+----------------+--------------------+
| MemSQL ID | Role | Host | Port | Process State | Connectable? | Version | Recovery State | Availability Group |
+------------+------------+--------------+------+---------------+--------------+---------+----------------+--------------------+
| AAAAAAAAAA | Master | 172.26.32.20 | 3306 | Running | True | 6.7.16 | Online | |
| BBBBBBBBBB | Aggregator | 172.26.32.22 | 3306 | Running | True | 6.7.16 | Online | |
| CCCCCCCCCC | Leaf | 172.26.32.20 | 3307 | Running | True | 6.7.16 | Online | 1 |
| DDDDDDDDDD | Leaf | 172.26.32.22 | 3307 | Running | True | 6.7.16 | Online | 1 |
+------------+------------+--------------+------+---------------+--------------+---------+----------------+--------------------+
4。恢复数据
重新执行您在第 1 步中保存的所有创建 table 查询,并使用 this 语法导入所有导出到 csv 的数据:
LOAD DATA INFILE '/home/yourfolder/yourcsvfile.csv' INTO TABLE your_table;
就是这样!现在您可以使用新的 MemSQL studio 管理您的集群,默认 运行 http://your_deployment_machine:8080
。
尽情享受吧:)