本教程将指导您在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. 创建集合、索引文档并查询系统
- 创建包含多个分片和副本的集合
- 向新建集合索引文档
- 通过查询集合验证文档存在
开始之前
使用本教程前,您必须具备:
- 一个AWS账户
- 熟悉在本地机器上设置单节点SolrCloud的过程
- 如果之前从未使用过Solr,请先参考Solr入门:5分钟快速上手
第一步:启动EC2实例
创建新的安全组
导航至AWS控制台
- 访问AWS EC2控制台
- 选择您偏好的地区
配置安全组
安全组将限制对安装的访问,并允许我们启动的EC2实例之间无限制地相互通信。
- 从EC2仪表板,在左侧菜单”Network & Security”下点击Security Groups
- 在Security Groups部分点击Create Security Group
- 为安全组取一个描述性的名称
- 您可以选择现有的VPC或创建新的
配置端口规则
我们需要开放两个端口:
端口 用途 说明 8983 Solr端口 Solr的默认端口 9983 ZooKeeper端口 Solr内嵌ZooKeeper的默认端口 设置入站规则
- 点击Inbound设置入站网络规则
- 选择Add Rule
- 选择”Custom TCP”类型
- 端口范围输入
8983
,来源选择”My IP”并输入您的公共IP - 创建第二条规则,同样的类型和来源,但端口输入
9983
安全提示:这将限制只有您的机器可以访问。如果需要与他人协作,可以指定更广泛的访问,但请确保只允许必要的访问。Solr实例绝不应该暴露给整个互联网。
添加SSH访问规则
- 添加另一条规则用于SSH访问
- 选择”SSH”类型,来源再次选择”My IP”并输入您的公共IP
- 所有实例都需要SSH访问以安装和配置Solr
完成初始创建
您的组配置应该如下所示:
1
2
3
4Type Protocol Port Range Source
Custom TCP TCP 8983 Your IP/32
Custom TCP TCP 9983 Your IP/32
SSH TCP 22 Your IP/32添加内部通信规则
创建完成后,需要修改规则以允许同组实例间的通信:
- 在安全组概览表中选择新创建的组
- 在”Inbound”标签页下,点击Edit
- 点击Add rule
- 从下拉列表选择
All TCP
,端口范围输入0-65535
- 来源指定当前安全组的名称(如
solr-sample
)
最终配置应该包含:
1
2
3
4
5Type 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)
配置实例并启动
启动实例向导
- 从左侧导航菜单选择Instances
- 点击Launch Instance按钮并按向导步骤操作
选择Amazon机器映像(AMI)
- 选择Amazon Linux AMI, SSD Volume Type作为AMI
- 这是一个适合我们用途的优秀AMI
- 点击所选映像旁的Select
选择实例类型
- t2.medium类型就足够了
- 从列表中选择,然后点击Configure Instance Details
配置实例
- 在”Number of instances”字段中输入2
- 确保”Auto-assign Public IP”设置为”Enabled”
- 完成后点击Add Storage
配置存储
- 默认的8 GB大小和General Purpose SSD卷类型足够运行此快速入门
- 如果确定终止实例后不需要保存Solr索引中的数据,可选择”Delete on termination”
- 完成后点击Add Tags
添加标签(可选)
- 此快速入门不必添加任何标签,但如果需要可以添加
- 点击Configure Security Group
配置安全组
- 选择Select an existing security group
- 选择之前创建的安全组:
solr-sample
- 页面底部应显示预期的入站规则
审查并启动
- 点击Review
- 如果一切正确,点击Launch
- 选择现有的”私钥文件”或创建新的并下载到本地机器,以便能够通过SSH登录实例
等待实例启动
- 在实例列表中,观察状态变化
- 只有当实例变为**”running”**状态时才能使用
第二步:安装、配置并启动Solr
SSH连接到实例
获取公共DNS记录
- 从实例列表中选择实例,找到Public DNS记录
- 逐一登录每台机器
使用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 | # 检查AWS实例是否已安装Java |
下载并配置Solr
1 | # 下载所需版本的Solr |
配置主机名解析
为了简化主机名管理,假设EC2实例的公共DNS主机名和IPv4地址如下:
节点1:
ec2-101-1-2-3.us-east-2.compute.amazonaws.com
- 公共IP:
101.1.2.3
- 私有IP:
172.16.2.3
- 公共IP:
节点2:
ec2-101-4-5-6.us-east-2.compute.amazonaws.com
- 公共IP:
101.4.5.6
- 私有IP:
172.16.5.6
- 公共IP:
在每个实例上编辑/etc/hosts
,添加以下条目:
1 | $ sudo vim /etc/hosts |
配置Solr网络绑定
在这个案例中,其中一台机器将托管内嵌ZooKeeper和Solr节点,比如solr-node-1
。
在两台机器上,编辑solr.in.sh
脚本,配置环境变量,允许Solr和内嵌ZooKeeper监听所有网络接口,而不仅仅是127.0.0.1:
1 | $ cd $SOLR_HOME |
更多详情请参见网络配置
启动SolrCloud集群
在第一个节点(solr-node-1
)上:
1 | $ cd $SOLR_HOME |
在第二个节点(solr-node-2
)上:
1 | $ cd $SOLR_HOME |
检查和验证
从本地机器的浏览器检查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 | $ curl --request POST \ |
索引文档:
1 | $ curl --request POST \ |
查询文档:
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,需要对上述步骤进行以下调整:
配置调整
安全组端口修改
- 创建安全组时,不开放端口
9983
,而是开放2181
(或您用于ZooKeeper的端口:默认是2181)
- 创建安全组时,不开放端口
实例数量调整
- 配置启动实例数量时,选择启动3个实例而不是2个
主机映射调整
- 修改每台机器上的
/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 | # 下载稳定版本的ZooKeeper |
配置ZooKeeper:
1 | $ cd $ZOO_HOME |
启动ZooKeeper:
1 | $ cd $ZOO_HOME |
启动Solr节点并连接外部ZooKeeper:
1 | # 在第一个Solr节点上 |
最佳实践和注意事项
安全考虑
网络安全
- 限制安全组规则只允许必要的访问
- 定期审查和更新安全配置
- 考虑使用VPN或私有子网
认证和授权
- 生产环境启用Solr安全功能
- 配置SSL/TLS加密
- 实施访问控制
性能优化
实例规格
- 根据数据量和查询负载选择适当的EC2实例类型
- 考虑使用SSD存储提高I/O性能
JVM设置
- 调整堆内存大小
- 配置垃圾收集器参数
监控和维护
日志管理
1
2
3
4
5# 查看Solr日志
$ tail -f $SOLR_HOME/server/logs/solr.log
# 查看ZooKeeper日志
$ tail -f $ZOO_HOME/logs/zookeeper.log健康检查
1
2
3
4
5# 检查Solr状态
$ curl "http://solr-node-1:8983/solr/admin/info/system"
# 检查ZooKeeper状态
$ echo ruok | nc zookeeper-node 2181
故障排除
常见问题
连接超时
- 检查安全组配置
- 验证主机名解析
- 确认服务正在运行
节点无法加入集群
- 验证ZooKeeper连接
- 检查网络配置
- 查看日志文件
性能问题
- 监控资源使用情况
- 检查GC日志
- 优化查询和索引策略
清理资源
完成测试后清理AWS资源:
1 | # 停止Solr |
生产部署建议
重要提示:如前所述,单个ZooKeeper节点不足以用于生产安装。
一旦EC2实例启动运行,有关在生产中部署Solr的更多信息,请参见以下资源:
总结
本教程展示了如何在AWS EC2上快速搭建SolrCloud集群用于开发和测试。关键步骤包括:
✅ AWS环境配置 - 安全组、实例启动、网络设置
✅ Solr集群搭建 - 多节点SolrCloud部署
✅ 服务配置优化 - Java环境、网络绑定、主机解析
✅ ZooKeeper选择 - 内嵌vs外部ZooKeeper配置
通过本教程,您已经掌握了在云环境中部署分布式搜索集群的基本技能,为后续的生产部署奠定了基础。
下一步学习
- Solr入门:管理界面详解 - 通过Web界面管理集群
- Solr概念:SolrCloud分布式架构 - 深入理解分布式原理
- Solr部署:生产环境部署指南 - 生产级部署最佳实践
- Solr部署:ZooKeeper集群配置 - 高可用ZooKeeper配置