
多主复制实战用Galera搭建Manticore Search高可用集群【免费下载链接】manticoresearchOpen-source search database for full-text, vector, and hybrid search with real-time indexing and SQL.项目地址: https://gitcode.com/gh_mirrors/ma/manticoresearchManticore Search 是一款开源搜索数据库支持全文、向量与混合搜索并内置了基于 Galera 库的多主复制能力。借助它你可以用几行 SQL 就把多台服务器组成一个高可用集群任意节点都能读和写数据几乎同步节点故障还能自动剔除和恢复。本文带你从零理解到落地完整走通 Manticore Search 高可用集群的搭建与运维。为什么选 Galera 多主复制很多搜索引擎的集群其实只是分片或主从复制写流量被限制在单一主节点上。而 Manticore Search 的复制方案由 Galera 库 驱动带来几个对生产环境至关重要的特性 真正的多主随时可对集群中任意节点写入无需选主几乎同步复制无从属延迟节点崩溃后不丢数据热备份节点切换零停机因为根本没有故障转移到主这一步自动节点配置新节点加入时自动拉取数据无需手动备份恢复自动剔除不可靠节点并支持基于认证的复制。 复制支持 Linux 和 macOS覆盖percolate、rt和distributed表Windows 原生版本暂不支持可通过 WSL 使用。完整机制见官方中文手册设置复制。开工前3 个必配的配置项在配置文件的searchd段落中确认以下三项否则复制无法启用data_dir— 数据目录纯内存模式不支持复制listen— 必须有一个带replication类型的端口范围监听器供集群节点间通信server_id可选— 为每个节点设置唯一值保证集群表 Auto ID 不冲突。searchd { listen 9312 listen 192.168.1.101:9360-9370:replication data_dir /var/lib/manticore/ }如果开启了身份验证还要给参与复制的用户授予replication权限如GRANT replication ON posts TO repl_user细节参见 设置复制。五分钟上手4 步搭建高可用集群假设你已有一个名为pq_title的实时表三台机器node-a、node-b、node-c都装好了 Manticore Search。第 1 步在 node-a 上创建集群CREATE CLUSTER posts第 2 步把本地表加入集群ALTER CLUSTER posts ADD pq_title第 3 步让其余节点加入在 node-b、node-c 上分别执行指向任意一个已建集群的节点即可JOIN CLUSTER posts AT node-a:9312新节点加入时会自动进行状态传输SST——由现有节点提供完整数据副本无需你手动备份。传输过程中可通过cluster_posts_sst_total变量查看 0 到 100 的进度说明见 复制集群状态。第 4 步用集群名:表名的方式写入INSERT INTO posts:pq_title VALUES ( 3, test me )这一行会在 node-a 上执行但数据会几乎同步地出现在所有节点上。读取则更灵活——SELECT * FROM pq_title直接查本地表即可任何节点返回的结果都一致。创建、加入集群的完整语法参见创建复制集群、加入复制集群。监控集群健康一条 SHOW STATUS 就够高可用集群最怕带病运行。执行SHOW STATUS可以查看所有集群状态变量重点盯住这几个变量健康值含义cluster_posts_statusprimary集群仲裁存在可正常读写cluster_posts_node_statesynced本节点已完成同步cluster_posts_size3当前在群节点数cluster_posts_nodes_view—本节点实际看到的集群成员此外还能看到 SST 进度、conf_id成员变更次数、last_error等。变量清单的完整解释在 复制集群状态 一节配合仪表盘可以构建完整的集群监控面板。节点故障了怎么办恢复手册多主复制的精髓在于把集群当作一个逻辑系统。按故障场景对号入座即可场景 1单节点崩溃存活节点会短暂保留旧成员列表随后自动剔除故障节点并重算法定人数集群继续可写。故障节点重启后自动重新加入——若错过了的事务还在其他节点的复制缓存里走轻量的增量传输IST追赶否则走重量级的快照传输SST全量拉取。场景 2所有节点干净关闭如机房维护每个节点关闭时会把复制状态写入grastate.dat其中seqno事务序号和safe_to_bootstrap标志决定了谁应该先启动。选seqno最大且safe_to_bootstrap: 1的节点通常是最后关闭的用特殊模式拉起它searchd --new-cluster其余节点再正常启动自动重新加入。systemd 用户可直接用manticore_new_cluster命令。场景 3所有节点崩溃grastate.dat的元数据已不可靠选择数据最新的节点用searchd --new-cluster-force强制引导。场景 4仲裁丢失集群变成 non-primary 拒绝写入在确认另一侧确实离线后只在一侧执行SET CLUSTER posts GLOBAL pc.bootstrap 1⚠️ 切记绝不能在脑裂的两侧都执行该命令否则会形成两个永不自动合并的独立集群。这套恢复决策的完整推演值得精读 集群恢复 与 重启集群 两篇官方文档。实践避坑清单一张表只属于一个集群复制是按表划域的规划好表与集群的归属关系写语句必须带集群前缀漏写posts:前缀会直接报错这是新手最常见的坑端口范围别交叉不同集群的replication监听器端口范围不能重叠每个集群至少预留两个端口节点数建议取奇数3 或 5 个节点的仲裁更稳健偶数集群在分裂时两侧可能同时失去法定人数集群生命周期管理增删节点用ALTER CLUSTER ... UPDATE nodes退出集群用EXIT CLUSTER参考 管理复制节点。写在最后Manticore Search 用SQL Galera的组合把过去需要分片框架、自研中间件才能实现的多主高可用压缩成了几条CREATE CLUSTER/JOIN CLUSTER语句。对于需要实时写入、又不想忍受复制延迟的搜索场景电商、日志、推荐召回这套方案值得直接落地。动手时建议从 3 节点起步配合SHOW STATUS养成日常巡检习惯高可用集群便能长期稳定运行 【免费下载链接】manticoresearchOpen-source search database for full-text, vector, and hybrid search with real-time indexing and SQL.项目地址: https://gitcode.com/gh_mirrors/ma/manticoresearch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考