【问题标题】:MemSQL database not available for reads while leaf node is in replicating mode当叶节点处于复制模式时,MemSQL 数据库不可用于读取
【发布时间】:2019-04-22 13:55:28
【问题描述】:

我有一个运行本地 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

【问题讨论】:

    标签: database singlestore


    【解决方案1】:

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

    一个好的开始是在克隆后尝试重新创建节点;克隆的 memsql 节点不会正确地成为集群的一部分。您还应该验证集群中的主聚合器不超过一个。如果您可以从这里开始,看看它是否能解决您的问题,我很乐意帮助您解决遇到的任何其他问题。

    【讨论】:

    • 感谢您的意见和愿意提供帮助。到目前为止,我的问题不仅在于附加节点,还在于原始节点,因为它没有响应(其叶节点处于复制模式)。
    【解决方案2】:

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

    正如 micahbhakti 在他的 answer 中提到的,我尝试仅使用较新的 MemSQL 工具,而不是已弃用的 MemSQL Ops。它需要删除两台服务器上存在的 MemSQL 代理,然后按照 MemSQL 文档中的教程进行操作。以下是我为解决此问题的任何人采取的步骤,最好将其描述为:我的 MemSQL-Ops-managed-MemSQL-cluster 没有响应。如何将其升级到正常工作的 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
    

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

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

    正如here 所说的uninstall 命令:

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

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

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

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

    这就是为什么我要你保存你需要的东西:)

    这应该针对您想要包含在新闪亮集群中的每台主机完成。

    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 中保存的所有创建表查询,并使用 this 语法导入导出到 csv 的所有数据:

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

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

    享受:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      • 1970-01-01
      相关资源
      最近更新 更多