引入对渗透索引的复制功能

从2.8.2版本开始,新增了一个主要功能——对渗透索引的复制。

复制功能基于Galera库(Percona的mysql分支和MariaDB也使用该库)。我们认为使用一个经过验证的现有解决方案比从头开始构建一个新方案要好,因为这将花费更长的时间。

为什么只针对渗透索引?渗透索引是一个经过修改的实时索引,更易于操作,因此是初始测试的更好候选者。但请继续关注,下一步将是为实时索引添加复制支持!

如果我不想使用复制功能,这对我有什么影响?复制功能内置于官方软件包中,但如果您不打算使用它,则没有任何理由阻止您升级到最新的Manticore版本。如果您自行编译Manticore,编译的要求已更改。请查阅文档了解更改内容。
复制集群是基于索引的。一旦定义了集群,您可以向其中添加渗透索引。
复制是多主同步的。这意味着您可以写入任何节点,变更将立即传播到集群中的所有节点。

<img src="manticore-replication-optimized.webp" alt="img">

复制设置

要求:

    • 必须在专用接口上打开一个API listen 端口(不是0.0.0.0)。

      • 在专用接口上打开用于复制的一系列端口。建议每个集群至少使用2个端口。

      • 打开一个SphinxQL端口以执行配置节点的命令。

      • 在searchd配置中必须设置 data_dir 。这对于临时复制数据是必需的。

可选:

  • server_id - 每个节点的唯一编号,用于UUID种子,如果不存在,守护进程将基于MAC地址生成一个

searchd配置应如下所示:

searchd {
listen = 9306:mysql41
listen = my_ip1:9312
listen = my_ip1:9350-9459:replication
...
data_dir = /var/lib/manticore/data_dir
server_id = 1
...
}

在第一个节点上,我们使用SphinxQL连接并创建集群:

mysql> CREATE CLUSTER test;

或者,您也可以指定将要连接到新集群的节点。除了IP,我们还需要指定API端口。

mysql> CREATE CLUSTER test  'my_ip1:9312,my_ip2:9312,my_ip3:9312' as nodes;

定义的节点列表用于集群重启的情况。如果在创建时未定义节点或添加了更多节点,则必须运行命令ALTER CLUSTER cluster_name UPDATE nodes以更新所有活动节点的列表,否则在重启时不在列表中的节点必须手动添加回集群。

接下来,我们连接到其他节点,并通过将它们与现有节点(使用其IP和API端口)链接来将它们加入集群:

mysql> JOIN CLUSTER test AT 'my_ip1:9312';

此时,我们定义了一个集群,接下来是向其中添加一个或多个索引。这可以从任何节点完成:

mysql> ALTER CLUSTER test ADD pq1;

要向索引pq1添加新的存储查询,我们的常规INSERT查询需要做一个小改动:需要在索引名称前加上集群名称:

mysql> INSERT INTO test:pq1 VALUES('samsung');

集群前缀仅对写入语句(INSERT, REPLACE, DELETE, TRUNCATE)是必需的。读取语句(CALL PQ, SELECT和DESCRIBE)可以使用常规索引名称。

接下来是什么?

有关所有复制选项的更多信息,请查看 文档

在我们的在线课程中,您可以找到 复制介绍 课程以及一个简单的 恢复故障转移 课程。

在撰写本文时,实时索引的复制功能正在开发中。

安装Manticore Search

安装Manticore Search