Solr教程:高级练习 - SolrCloud集群

本练习介绍SolrCloud的高级操作,包括向集群添加节点、配置管理和生产环境准备。

什么是SolrCloud?

SolrCloud是Solr的分布式架构模式,提供:

  • 高可用性:自动故障转移和恢复
  • 水平扩展:轻松添加节点扩容
  • 分布式索引:数据自动分片
  • 负载均衡:查询自动分发
  • 集中配置:通过ZooKeeper管理

核心概念

集群组件

  • 节点(Node):运行Solr实例的服务器
  • 集合(Collection):逻辑上的完整索引
  • 分片(Shard):集合的水平分区
  • 副本(Replica):分片的复制
  • ZooKeeper:协调服务,管理配置和状态

副本类型

  • NRT(Near Real Time):可以成为主副本,处理更新
  • TLOG(Transaction Log):维护事务日志,可以成为主副本
  • PULL:只能从主副本拉取数据,不能成为主副本

向集群添加节点

步骤1:创建新的Solr主目录

1
2
# 为新节点创建目录
mkdir -p example/cloud/node3/solr

步骤2:启动新节点并加入集群

1
2
3
4
bin/solr start --cloud \
--solr-home example/cloud/node3/solr \
-p 8987 \
-z localhost:9983

参数说明:

  • --cloud:以云模式启动
  • --solr-home:指定Solr主目录
  • -p:指定端口(8987)
  • -z:ZooKeeper连接字符串

步骤3:验证节点加入

1
2
3
4
5
# 检查集群状态
bin/solr status

# 查看集群详细信息
curl "http://localhost:8983/solr/admin/collections?action=CLUSTERSTATUS"

集合管理操作

创建集合

创建带有自定义分片和副本的集合:

1
curl "http://localhost:8983/solr/admin/collections?action=CREATE&name=products&numShards=3&replicationFactor=2&maxShardsPerNode=2"

参数说明:

  • numShards:分片数量
  • replicationFactor:每个分片的副本数
  • maxShardsPerNode:每个节点的最大分片数

添加副本

为现有集合添加副本:

1
curl "http://localhost:8983/solr/admin/collections?action=ADDREPLICA&collection=products&shard=shard1&node=localhost:8987_solr"

分片拆分

当分片变得过大时,可以拆分:

1
curl "http://localhost:8983/solr/admin/collections?action=SPLITSHARD&collection=products&shard=shard1"

集合别名

创建集合别名便于管理:

1
2
3
4
5
# 创建别名
curl "http://localhost:8983/solr/admin/collections?action=CREATEALIAS&name=current_products&collections=products_v2"

# 更新别名(无缝切换)
curl "http://localhost:8983/solr/admin/collections?action=CREATEALIAS&name=current_products&collections=products_v3"

禁用无模式功能

生产环境中,建议禁用自动字段创建:

使用V1 API

1
2
3
4
5
curl http://localhost:8983/solr/mycollection/config -d '{
"set-user-property": {
"update.autoCreateFields": "false"
}
}'

使用V2 API

1
2
3
4
5
curl http://localhost:8983/api/collections/mycollection/config -d '{
"set-user-property": {
"update.autoCreateFields": "false"
}
}'

高级配置管理

上传配置集

1
2
3
4
5
# 上传新配置集到ZooKeeper
bin/solr zk upconfig -n myconfig -d /path/to/config/dir -z localhost:9983

# 使用配置集创建集合
curl "http://localhost:8983/solr/admin/collections?action=CREATE&name=newcollection&numShards=2&configName=myconfig"

更新配置

1
2
3
4
5
6
7
8
9
10
11
# 下载当前配置
bin/solr zk downconfig -n myconfig -d /tmp/config -z localhost:9983

# 编辑配置文件
vim /tmp/config/solrconfig.xml

# 重新上传配置
bin/solr zk upconfig -n myconfig -d /tmp/config -z localhost:9983

# 重新加载集合
curl "http://localhost:8983/solr/admin/collections?action=RELOAD&name=mycollection"

监控和健康检查

集群状态监控

1
2
3
4
5
6
7
8
# 获取集群状态
curl "http://localhost:8983/solr/admin/collections?action=CLUSTERSTATUS"

# 检查特定集合健康状态
bin/solr healthcheck -c products

# 查看节点状态
curl "http://localhost:8983/solr/admin/info/system"

设置监控告警

监控关键指标:

  • 节点可用性
  • 副本同步状态
  • 查询响应时间
  • 索引大小和增长
  • JVM内存使用

故障处理

节点故障恢复

当节点故障时,SolrCloud自动:

  1. 检测节点下线
  2. 选举新的主副本
  3. 继续提供服务

手动干预:

1
2
# 强制主副本选举
curl "http://localhost:8983/solr/admin/collections?action=FORCELEADER&collection=products&shard=shard1"

副本恢复

1
2
# 手动触发副本恢复
curl "http://localhost:8983/solr/admin/cores?action=REQUESTRECOVERY&core=products_shard1_replica_n1"

数据修复

1
2
# 修复索引
curl "http://localhost:8983/solr/products/update?optimize=true&maxSegments=1"

性能优化

1. 分片策略

1
2
3
4
5
# 根据数据量选择分片数
# 经验法则:每个分片 25-50GB

# 预分片以避免后期拆分
curl "http://localhost:8983/solr/admin/collections?action=CREATE&name=logs&numShards=12&replicationFactor=2"

2. 副本放置策略

1
2
3
4
5
<!-- 在solrconfig.xml中配置 -->
<replicaPlacementFactory class="org.apache.solr.cluster.placement.plugins.AffinityPlacementFactory">
<str name="minimalFreeDiskGB">10</str>
<str name="prioritizedFreeDiskGB">50</str>
</replicaPlacementFactory>

3. 负载均衡

1
2
3
4
5
6
# 使用负载均衡器(如HAProxy)配置
backend solr_cluster
balance roundrobin
server solr1 localhost:8983 check
server solr2 localhost:7574 check
server solr3 localhost:8987 check

生产环境最佳实践

1. ZooKeeper集群

生产环境应使用独立的ZooKeeper集群:

1
2
3
4
5
# 启动3节点ZooKeeper集群
# zoo1.cfg, zoo2.cfg, zoo3.cfg配置示例
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888

2. JVM调优

1
2
3
# 生产环境JVM参数示例
SOLR_JAVA_MEM="-Xms8g -Xmx8g"
GC_TUNE="-XX:+UseG1GC -XX:MaxGCPauseMillis=250"

3. 安全配置

1
2
3
4
5
# 启用基本认证
bin/solr auth enable -prompt true -z localhost:9983

# 启用SSL
bin/solr create_collection -c secure -s 2 -rf 2 -p 8984

4. 备份策略

1
2
3
4
5
# 创建备份
curl "http://localhost:8983/solr/admin/collections?action=BACKUP&name=products&collection=products&location=/backup/solr"

# 恢复备份
curl "http://localhost:8983/solr/admin/collections?action=RESTORE&name=products&collection=products_restored&location=/backup/solr"

容量规划

硬件建议

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
小型集群(<100GB数据):
节点数: 3
CPU: 4
内存: 16GB
磁盘: SSD 200GB

中型集群(100GB-1TB):
节点数: 5-10
CPU: 8
内存: 32GB
磁盘: SSD 500GB

大型集群(>1TB):
节点数: 10+
CPU: 16
内存: 64GB+
磁盘: SSD 1TB+

分片数量计算

1
2
3
4
5
6
分片数 = 总数据量 / 单分片目标大小

示例:
- 总数据:500GB
- 目标分片大小:50GB
- 推荐分片数:10

迁移到SolrCloud

从单机迁移步骤

  1. 评估数据量和查询负载
  2. 设计集群架构
  3. 准备硬件和网络
  4. 安装和配置ZooKeeper
  5. 启动SolrCloud节点
  6. 创建集合和配置
  7. 迁移数据
  8. 验证和切换

数据迁移策略

1
2
3
4
5
6
7
8
9
# 方法1:使用备份恢复
bin/solr create_backup -c old_core -d /backup
bin/solr restore_backup -c new_collection -location /backup

# 方法2:重新索引
curl "http://localhost:8983/solr/new_collection/dataimport?command=full-import"

# 方法3:使用流式更新
curl "http://localhost:8983/solr/new_collection/update?commit=true" --data-binary @data.json

故障排除清单

常见问题

  1. 节点无法加入集群

    • 检查ZooKeeper连接
    • 验证网络连通性
    • 查看防火墙设置
  2. 副本不同步

    • 检查事务日志
    • 验证网络带宽
    • 查看错误日志
  3. 查询性能下降

    • 检查缓存配置
    • 优化分片数量
    • 平衡副本分布

有用的管理命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看所有集合
curl "http://localhost:8983/solr/admin/collections?action=LIST"

# 获取集合配置
curl "http://localhost:8983/solr/products/config"

# 查看实时节点
curl "http://localhost:8983/solr/admin/collections?action=CLUSTERSTATUS" | jq '.cluster.live_nodes'

# 检查分片状态
curl "http://localhost:8983/solr/admin/collections?action=CLUSTERSTATUS&collection=products" | jq '.cluster.collections.products.shards'

# 停止所有节点
bin/solr stop --all

总结

SolrCloud提供了企业级的分布式搜索能力:

  • 高可用性:自动故障转移确保服务连续性
  • 可扩展性:轻松扩展以处理更多数据和请求
  • 灵活性:动态管理集合和配置
  • 可靠性:数据复制和恢复机制

关键要点:

  • 合理规划分片和副本策略
  • 使用独立的ZooKeeper集群
  • 实施完善的监控和备份
  • 定期测试故障恢复流程

下一步

  • 深入学习ZooKeeper管理
  • 探索更多集群优化技术
  • 实施自动化运维
  • 构建多数据中心部署

相关资源

© 2025 Solr Community of China All Rights Reserved. 本站访客数人次 本站总访问量
Theme by hiero