Manticore Search 分布式表中远程表配置详解
分布式表与远程表基础概念
在 Manticore Search 中,远程表是分布式表架构的核心组成部分。分布式表可以包含本地表和远程表的任意组合,当不包含本地表时,分布式表就成为了纯粹的远程代理表。这种设计为搜索集群提供了极大的灵活性。
远程表通过 agent 前缀在分布式表定义中声明,它们本质上是指向网络表(位于其他服务器上的表)的指针。一个典型的应用场景是:前端 Manticore 实例监听多个端口支持不同协议,然后将查询重定向到仅接受 Manticore 内部二进制协议连接的后端服务器,并使用持久连接来减少建立连接的开销。
远程表的核心配置
agent 指令详解
agent 指令是定义远程表的核心配置项,语法格式如下:
agent = address1[:table-list] [ | address2[:table-list [...]] ]
地址部分可以是以下两种形式之一:
hostname:port
(如 server2:9312)/absolute/unix/socket/path
(如 /var/run/manticore2.sock)
当表名省略时,默认使用与当前分布式表同名的表。端口号省略时默认为 9312。
高级用法示例
- 分片与集群拓扑:
# box1 配置
agent = box2:9312:shard1
agent = box3:9312:shard2
- 高可用与负载均衡:
agent = primary:9312|backup:9312:myindex
- 本地多核利用(虽然更推荐使用多本地表):
agent = 127.0.0.1:9312:shard1
agent = 127.0.0.1:9313:shard2
查询处理机制
远程表查询有几个重要特性:
- 并行查询:所有 agent 并行执行查询
- LIMIT 处理:agent 查询会忽略原始 LIMIT 子句,而是使用 max_matches 值(默认 1000)
- 结果合并:主节点负责合并来自各 agent 的结果并应用最终的 LIMIT
例如,客户端查询:
SELECT * FROM dist LIMIT 10,10
会被转换为:
SELECT * FROM remote_table LIMIT 0,1000
性能优化建议
- 合并同服务器表:
# 推荐做法
agent = remote:9312:idx1,idx2
# 不推荐做法
agent = remote:9312:idx1
agent = remote:9312:idx2
- 使用持久连接(见下文 agent_persistent 配置)
高级配置选项
连接与查询超时
- agent_connect_timeout:连接远程 agent 的超时时间(默认 1000ms)
- agent_query_timeout:远程查询执行的超时时间(默认 3000ms)
示例配置:
agent_connect_timeout = 300ms
agent_query_timeout = 10s # 长查询可设置更长时间
重试机制
- agent_retry_count:连接/查询失败时的重试次数(默认 0)
- mirror_retry_count:同 agent_retry_count,优先级更高
- agent_retry_delay:重试间隔时间(默认 500ms)
特殊用途配置
- agent_blackhole:黑洞代理,用于调试/测试环境
agent_blackhole = testbox:9312:testindex
- agent_persistent:持久连接配置
agent_persistent = remotebox:9312:index2
实例级配置选项
这些选项在 searchd 配置段中设置,影响整个实例:
- persistent_connections_limit:持久连接数上限
persistent_connections_limit = 29
- hostname_lookup:主机名解析策略
hostname_lookup = request # 禁用DNS缓存
- listen_tfo:启用TCP快速打开
listen_tfo = 1
分布式片段创建
分布式表的一种特殊用途是用于分布式片段创建(从文件生成片段)。此时本地表可作为"模板"表,提供分词设置。
配置示例:
snippets_file_prefix = /mnt/common/server1/
分布式Percolate表(DPQ表)
可以创建由多个Percolate表组成的分布式表。这种表支持查询列表和搜索操作,但不支持数据操作语句(如insert、replace等)。
注意事项:
- 不能包含非Percolate表
- 错误的agent配置可能导致结果污染
- 查询方式与普通分布式表不同
最佳实践建议
-
网络优化:
- 在内网环境使用高速网络连接
- 考虑使用Unix域套接字减少TCP开销
- 合理设置超时参数
-
集群设计:
- 为每个分片配置多个镜像实现高可用
- 使用不同的ha_strategy策略满足不同场景
-
监控与调优:
- 监控查询延迟和重试次数
- 根据实际负载调整持久连接数
通过合理配置远程表,Manticore Search可以实现高性能、高可用的分布式搜索架构,满足各种规模的搜索需求。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考