从 2.8.2 开始,一个新的主要功能可用 - 对渗透索引的复制。
该复制基于 Galera 库(也被 Percona 的 mysql 分支和 MariaDB 使用)。我们认为使用一个经过验证的现有解决方案会更好,而不是重新发明轮子,从头开始构建,这样会花费更长的时间。
为什么仅针对渗透索引?渗透索引是修改过的实时索引,更容易操作,因此是初步测试的更好候选者。但请继续关注,因为下一步将是为复制添加实时索引支持!
如果我不想使用复制,这对我有什么影响?复制功能在官方软件包中内置,但如果您不打算使用它,升级到最新的 Manticore 版本没有什么阻碍。如果您自己编译 Manticore,编译所需的要求已经发生了变化。请参考文档了解更改。
复制集群是基于索引的。一旦定义了集群,您可以将渗透索引添加到其中。
复制是多主机和同步的。这意味着您可以向任何节点写入,所有节点的更改会立即传播到集群中的所有节点。
<img src="manticore-replication-optimized.webp" alt="img">
复制设置
要求:
可选:
- 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)可以使用常规索引名称。
接下来的步骤?
有关所有复制选项的更多信息,请查看 文档 。
在我们的在线课程中,您可以找到关于复制的 介绍课程 以及一个简单的 故障恢复课程 。
在撰写本文时,实时索引的复制正在开发中。