Solr入门:AWS云端SolrCloud部署教程

本教程将指导您在Amazon Web Services (AWS) EC2实例上搭建多节点SolrCloud集群,适用于早期开发和设计阶段。

重要说明

本教程不适用于生产环境。 主要原因包括:

  • 使用了Solr内嵌的ZooKeeper实例
  • 生产环境至少需要3个ZooKeeper节点组成集群
  • 生产部署需要更多配置步骤,详见Solr生产部署指南

教程目标

本教程将完成以下任务:

1. 启动多个AWS EC2实例

  • 创建新的安全组(Security Group)
  • 配置实例并启动

2. 在EC2实例上安装、配置并启动Solr

  • 安装系统前置条件:Java 11或更高版本
  • 下载最新版本的Solr
  • 以SolrCloud模式启动Solr节点

3. 创建集合、索引文档并查询系统

  • 创建包含多个分片和副本的集合
  • 向新建集合索引文档
  • 通过查询集合验证文档存在

开始之前

使用本教程前,您必须具备:

第一步:启动EC2实例

创建新的安全组

  1. 导航至AWS控制台

  2. 配置安全组

    安全组将限制对安装的访问,并允许我们启动的EC2实例之间无限制地相互通信。

    • 从EC2仪表板,在左侧菜单”Network & Security”下点击Security Groups
    • 在Security Groups部分点击Create Security Group
    • 为安全组取一个描述性的名称
    • 您可以选择现有的VPC或创建新的
  3. 配置端口规则

    我们需要开放两个端口:

    端口 用途 说明
    8983 Solr端口 Solr的默认端口
    9983 ZooKeeper端口 Solr内嵌ZooKeeper的默认端口
  4. 设置入站规则

    • 点击Inbound设置入站网络规则
    • 选择Add Rule
    • 选择”Custom TCP”类型
    • 端口范围输入8983,来源选择”My IP”并输入您的公共IP
    • 创建第二条规则,同样的类型和来源,但端口输入9983

    安全提示:这将限制只有您的机器可以访问。如果需要与他人协作,可以指定更广泛的访问,但请确保只允许必要的访问。Solr实例绝不应该暴露给整个互联网。

  5. 添加SSH访问规则

    • 添加另一条规则用于SSH访问
    • 选择”SSH”类型,来源再次选择”My IP”并输入您的公共IP
    • 所有实例都需要SSH访问以安装和配置Solr
  6. 完成初始创建

    您的组配置应该如下所示:

    1
    2
    3
    4
    Type          Protocol  Port Range  Source
    Custom TCP TCP 8983 Your IP/32
    Custom TCP TCP 9983 Your IP/32
    SSH TCP 22 Your IP/32
  7. 添加内部通信规则

    创建完成后,需要修改规则以允许同组实例间的通信:

    • 在安全组概览表中选择新创建的组
    • 在”Inbound”标签页下,点击Edit
    • 点击Add rule
    • 从下拉列表选择All TCP,端口范围输入0-65535
    • 来源指定当前安全组的名称(如solr-sample

    最终配置应该包含:

    1
    2
    3
    4
    5
    Type          Protocol  Port Range  Source
    Custom TCP TCP 8983 Your IP/32
    Custom TCP TCP 9983 Your IP/32
    SSH TCP 22 Your IP/32
    All TCP TCP 0-65535 solr-sample (self)

配置实例并启动

  1. 启动实例向导

    • 从左侧导航菜单选择Instances
    • 点击Launch Instance按钮并按向导步骤操作
  2. 选择Amazon机器映像(AMI)

    • 选择Amazon Linux AMI, SSD Volume Type作为AMI
    • 这是一个适合我们用途的优秀AMI
    • 点击所选映像旁的Select
  3. 选择实例类型

    • t2.medium类型就足够了
    • 从列表中选择,然后点击Configure Instance Details
  4. 配置实例

    • 在”Number of instances”字段中输入2
    • 确保”Auto-assign Public IP”设置为”Enabled”
    • 完成后点击Add Storage
  5. 配置存储

    • 默认的8 GB大小和General Purpose SSD卷类型足够运行此快速入门
    • 如果确定终止实例后不需要保存Solr索引中的数据,可选择”Delete on termination”
    • 完成后点击Add Tags
  6. 添加标签(可选)

    • 此快速入门不必添加任何标签,但如果需要可以添加
    • 点击Configure Security Group
  7. 配置安全组

    • 选择Select an existing security group
    • 选择之前创建的安全组:solr-sample
    • 页面底部应显示预期的入站规则
  8. 审查并启动

    • 点击Review
    • 如果一切正确,点击Launch
    • 选择现有的”私钥文件”或创建新的并下载到本地机器,以便能够通过SSH登录实例
  9. 等待实例启动

    • 在实例列表中,观察状态变化
    • 只有当实例变为**”running”**状态时才能使用

第二步:安装、配置并启动Solr

SSH连接到实例

  1. 获取公共DNS记录

    • 从实例列表中选择实例,找到Public DNS记录
    • 逐一登录每台机器
  2. 使用SSH连接

    假设AWS身份密钥文件是aws-key.pem,AMI使用ec2-user作为登录用户:

    1
    2
    $ ssh-add aws-key.pem
    $ ssh -A ec2-user@<instance-public-dns>

配置Java环境和下载Solr

在每个AWS EC2实例上登录后:

1
2
3
4
5
6
7
8
9
10
11
# 检查AWS实例是否已安装Java
$ java -version

# 安装JDK 11
$ sudo yum install java-11

# 配置JDK 11为默认版本
$ sudo /usr/sbin/alternatives --config java

# 验证默认Java版本现在是11
$ java -version

下载并配置Solr

1
2
3
4
5
6
7
8
9
10
11
12
# 下载所需版本的Solr
$ wget https://archive.apache.org/dist/solr/solr/9.9.0/solr-9.9.0.tgz

# 解压档案
$ tar -zxvf solr-9.9.0.tgz

# 配置SOLR_HOME环境变量
$ export SOLR_HOME=$PWD/solr-9.9.0

# 将环境变量添加到.bashrc
$ vim ~/.bashrc
export SOLR_HOME=/home/ec2-user/solr-9.9.0

配置主机名解析

为了简化主机名管理,假设EC2实例的公共DNS主机名和IPv4地址如下:

  • 节点1ec2-101-1-2-3.us-east-2.compute.amazonaws.com

    • 公共IP:101.1.2.3
    • 私有IP:172.16.2.3
  • 节点2ec2-101-4-5-6.us-east-2.compute.amazonaws.com

    • 公共IP:101.4.5.6
    • 私有IP:172.16.5.6

在每个实例上编辑/etc/hosts,添加以下条目:

1
2
3
$ sudo vim /etc/hosts
172.16.2.3 solr-node-1
172.16.5.6 solr-node-2

配置Solr网络绑定

在这个案例中,其中一台机器将托管内嵌ZooKeeper和Solr节点,比如solr-node-1

在两台机器上,编辑solr.in.sh脚本,配置环境变量,允许Solr和内嵌ZooKeeper监听所有网络接口,而不仅仅是127.0.0.1:

1
2
3
4
5
6
$ cd $SOLR_HOME

# 取消注释并编辑两个变量
$ vim bin/solr.in.sh
SOLR_JETTY_HOST="0.0.0.0"
SOLR_ZK_EMBEDDED_HOST="0.0.0.0"

更多详情请参见网络配置

启动SolrCloud集群

在第一个节点(solr-node-1)上:

1
2
3
4
$ cd $SOLR_HOME

# 在8983端口启动Solr节点,ZooKeeper将在9983端口启动(8983+1000)
$ bin/solr start -c -p 8983 --host solr-node-1

在第二个节点(solr-node-2)上:

1
2
3
4
$ cd $SOLR_HOME

# 在8983端口启动Solr节点并连接到第一个节点运行的ZooKeeper
$ bin/solr start -c -p 8983 --host solr-node-2 -z solr-node-1:9983

检查和验证

从本地机器的浏览器检查Solr节点状态:

  • 访问:http://ec2-101-1-2-3.us-east-2.compute.amazonaws.com:8983/solr
  • 访问:http://ec2-101-4-5-6.us-east-2.compute.amazonaws.com:8983/solr

您应该能看到两个节点的Solr管理界面仪表板。

第三步:创建集合、索引和查询

关于创建多分片和副本集合、通过不同方法索引数据以及相应查询文档的详细演练,请参考Solr入门:5分钟快速上手教程。

快速示例

创建集合:

1
2
3
4
5
6
7
8
$ curl --request POST \
--url http://ec2-101-1-2-3.us-east-2.compute.amazonaws.com:8983/api/collections \
--header 'Content-Type: application/json' \
--data '{
"name": "aws_demo",
"numShards": 2,
"replicationFactor": 2
}'

索引文档:

1
2
3
4
5
6
7
8
$ curl --request POST \
--url 'http://ec2-101-1-2-3.us-east-2.compute.amazonaws.com:8983/api/collections/aws_demo/update?commit=true' \
--header 'Content-Type: application/json' \
--data '{
"id": "aws-doc-1",
"title": "AWS上的Solr",
"content": "在Amazon EC2上运行SolrCloud集群"
}'

查询文档:

1
$ curl 'http://ec2-101-1-2-3.us-east-2.compute.amazonaws.com:8983/solr/aws_demo/select?q=*:*'

使用外部ZooKeeper部署

如果您想配置外部ZooKeeper集群以避免使用与Solr节点运行在同一JVM中的内嵌单实例ZooKeeper,需要对上述步骤进行以下调整:

配置调整

  1. 安全组端口修改

    • 创建安全组时,不开放端口9983,而是开放2181(或您用于ZooKeeper的端口:默认是2181)
  2. 实例数量调整

    • 配置启动实例数量时,选择启动3个实例而不是2个
  3. 主机映射调整

    • 修改每台机器上的/etc/hosts时,为第三个实例添加第三行并给它一个可识别的名称:
    1
    2
    3
    4
    $ sudo vim /etc/hosts
    172.16.2.3 solr-node-1
    172.16.5.6 solr-node-2
    172.16.8.9 zookeeper-node

安装ZooKeeper

这些步骤将帮助您在AWS上安装和配置单实例ZooKeeper。但这对生产使用来说是不够的,生产环境建议至少有三个节点的ZooKeeper集群。

下载和安装:

1
2
3
4
5
6
7
8
9
10
11
12
# 下载稳定版本的ZooKeeper
$ wget https://archive.apache.org/dist/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz

# 解压档案
$ tar -zxvf apache-zookeeper-3.8.4-bin.tar.gz

# 设置环境变量
$ export ZOO_HOME=$PWD/apache-zookeeper-3.8.4-bin

# 将环境变量添加到.bashrc
$ vim ~/.bashrc
export ZOO_HOME=/home/ec2-user/apache-zookeeper-3.8.4-bin

配置ZooKeeper:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ cd $ZOO_HOME

# 使用zoo_sample.cfg创建ZooKeeper配置
$ cp conf/zoo_sample.cfg conf/zoo.cfg

# 创建数据目录并编辑配置
$ mkdir data
$ vim conf/zoo.cfg

# -- 取消注释 --
autopurge.snapRetainCount=3
autopurge.purgeInterval=1

# -- 编辑 --
dataDir=data

# -- 添加 --
4lw.commands.whitelist=mntr,conf,ruok

启动ZooKeeper:

1
2
3
4
$ cd $ZOO_HOME

# 启动ZooKeeper,默认端口:2181
$ bin/zkServer.sh start

启动Solr节点并连接外部ZooKeeper:

1
2
3
4
5
6
7
# 在第一个Solr节点上
$ cd $SOLR_HOME
$ bin/solr start -c -p 8983 --host solr-node-1 -z zookeeper-node:2181

# 在第二个Solr节点上
$ cd $SOLR_HOME
$ bin/solr start -c -p 8983 --host solr-node-2 -z zookeeper-node:2181

最佳实践和注意事项

安全考虑

  1. 网络安全

    • 限制安全组规则只允许必要的访问
    • 定期审查和更新安全配置
    • 考虑使用VPN或私有子网
  2. 认证和授权

    • 生产环境启用Solr安全功能
    • 配置SSL/TLS加密
    • 实施访问控制

性能优化

  1. 实例规格

    • 根据数据量和查询负载选择适当的EC2实例类型
    • 考虑使用SSD存储提高I/O性能
  2. JVM设置

    • 调整堆内存大小
    • 配置垃圾收集器参数

监控和维护

  1. 日志管理

    1
    2
    3
    4
    5
    # 查看Solr日志
    $ tail -f $SOLR_HOME/server/logs/solr.log

    # 查看ZooKeeper日志
    $ tail -f $ZOO_HOME/logs/zookeeper.log
  2. 健康检查

    1
    2
    3
    4
    5
    # 检查Solr状态
    $ curl "http://solr-node-1:8983/solr/admin/info/system"

    # 检查ZooKeeper状态
    $ echo ruok | nc zookeeper-node 2181

故障排除

常见问题

  1. 连接超时

    • 检查安全组配置
    • 验证主机名解析
    • 确认服务正在运行
  2. 节点无法加入集群

    • 验证ZooKeeper连接
    • 检查网络配置
    • 查看日志文件
  3. 性能问题

    • 监控资源使用情况
    • 检查GC日志
    • 优化查询和索引策略

清理资源

完成测试后清理AWS资源:

1
2
3
4
5
6
7
8
9
# 停止Solr
$ bin/solr stop -all

# 停止ZooKeeper(如果使用外部)
$ $ZOO_HOME/bin/zkServer.sh stop

# 在AWS控制台中终止EC2实例
# 删除安全组
# 释放其他相关资源

生产部署建议

重要提示:如前所述,单个ZooKeeper节点不足以用于生产安装。

一旦EC2实例启动运行,有关在生产中部署Solr的更多信息,请参见以下资源:

总结

本教程展示了如何在AWS EC2上快速搭建SolrCloud集群用于开发和测试。关键步骤包括:

AWS环境配置 - 安全组、实例启动、网络设置
Solr集群搭建 - 多节点SolrCloud部署
服务配置优化 - Java环境、网络绑定、主机解析
ZooKeeper选择 - 内嵌vs外部ZooKeeper配置

通过本教程,您已经掌握了在云环境中部署分布式搜索集群的基本技能,为后续的生产部署奠定了基础。

下一步学习

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