叶子节点处于复制模式时,无法读取MemSQL数据库

时间:2019-04-22 13:55:28

标签: database memsql

我有一台运行本地memsql集群的CentOS服务器(聚合器和叶在同一台机器上)。我有一个名为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,从而解决了这一问题。阅读我的answer

2 个答案:

答案 0 :(得分:1)

我设法建立了一个工作集群。

正如micahbhakti在他的answer中提到的那样,我尝试仅使用较新的MemSQL工具,而不是不推荐使用的MemSQL Ops。它需要删除两个服务器上都存在的MemSQL代理,然后按照MemSQL文档中的教程进行操作。以下是我为任何遇到此问题而苦苦挣扎的人所采取的步骤:如何将其升级到可用的MemSQL-tools-managed-cluster?

1。保存您可以保存的数据

下一步是删除所有memsql数据,因此最好保存数据。表格数据可以很容易地存储在CSV文件中

SELECT * FROM important_data_containing_table INTO OUTFILE '/home/yourfolder/yourcsvfile.csv';

对所有包含重要数据的表执行此操作。您也可以保存方案本身。您可以通过查看并复制最初用于创建表的所有创建查询并将其复制到另一个文件中,然后在以后重新执行它们来实现。使用这个

SHOW CREATE TABLE your_table_name

here描述了mysql文档。它可能与mem中使用的语法不同,但是上述基本命令有效。有关确切的信息,请阅读有关MySQL Features Unsupported in MemSQL的信息。

2。删除与Memsql-Ops有关的任何内容

关于uninstall命令的说法here

  

停止本地MemSQL Ops代理并删除其所有数据。

     

如果本地主机中已经安装了MemSQL节点,此命令将提示用户先删除这些节点,然后再继续卸载。

确实,如果有一个节点正在运行(在我的情况下是),将提示您运行另一个命令来删除这些节点:memsql-ops memsql-delete --all。如documentation中所述,这将删除数据库中的所有数据:

  

删除MemSQL节点的所有数据。此操作不可逆,可能会导致数据丢失。系统会提示想要执行此操作的用户明确输入“删除”,以确保他们做出决定。

这就是为什么我要您保存所需的东西的原因:)

应该对要包含在新的闪亮群集中的每个主机进行此操作。

3。按照说明使用MemSQL工具创建新集群

从不建议使用的MemSQL ops代理和数据中清除服务器后,可以按照说明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中保存的所有创建表查询,并使用this语法导入所有导出到csv的数据:

LOAD DATA INFILE '/home/yourfolder/yourcsvfile.csv' INTO TABLE your_table;

就是这样!现在,您可以使用在默认http://your_deployment_machine:8080上运行的新MemSQL Studio管理群集。

享受:)

答案 1 :(得分:0)

似乎有几件事可能会引起问题。一般来说,克隆memsql服务器不受支持,也不是添加节点的最佳方法。看起来您可能同时使用了较旧的Ops管理工具和较新的MemSQL工具。我建议不要安装或使用Ops,而应该只使用新的MemSQL工具。

一个好的开始是尝试在克隆后重新创建节点。克隆的memsql节点将无法正确地成为群集的一部分。您还应该验证集群中没有多个主聚合器。如果您可以从此开始,看看它是否可以解决您的问题,我们很乐意为您遇到的任何其他问题提供帮助。