SolrCloud模式下Solr集成PostgreSQL的认证配置及security.json部署疑问
SolrCloud模式下Solr集成PostgreSQL的认证配置及security.json部署疑问
嗨,我来帮你梳理下SolrCloud模式下security.json的正确部署方式,以及你当前遇到的问题:
核心结论:把security.json放进配置集上传是错误的
首先得明确:SolrCloud的security.json是全局集群级别的安全配置,用来管控整个SolrCloud的认证、授权规则,它不属于任何一个集合的配置集(configset)。配置集是给单个/多个集合用的业务配置(比如solrconfig、schema、data-config这些),两者完全是不同层级的东西,不能混在一起。
正确部署security.json到ZK的步骤
既然你用的是SolrCloud模式,所有集群级配置都存在ZK里,直接用Solr自带的ZK客户端工具操作就行,步骤如下:
准备好正确的security.json文件
先写好你的认证授权规则,比如启用Basic认证、给操作DataImport的用户分配权限。举个简单的示例片段:{ "authentication": { "class": "org.apache.solr.security.BasicAuthPlugin", "credentials": { "admin": "IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c=" } }, "authorization": { "class": "org.apache.solr.security.RuleBasedAuthorizationPlugin", "permissions": [ { "name": "dataimport", "role": "data-importer" }, { "name": "collection-admin-read", "role": "admin" } ], "user-role": { "admin": ["admin"], "pg-importer": ["data-importer"] } } }(注:上面的密码是用Solr的
bin/solr create-user命令生成的加密值,不要直接写明文)用Solr的ZK命令上传到指定节点
Solr自带了操作ZK的工具,直接在Solr服务器上执行以下命令(替换成你的ZK地址和本地security.json路径):# 上传security.json到ZK的/solr/security.json节点(默认Solr在ZK的根节点是/solr) bin/solr zk putfile -z zk-host:2181 /solr/security.json /path/to/your/local/security.json触发Solr集群重载安全配置
如果集群已经在运行,上传完后需要让Solr重新加载安全配置,用API请求即可:curl -X POST http://solr-host:8983/api/cluster/security/reload(如果已经启用认证,记得加
-u username:password参数)
关于你之前的配置集的补充说明
你的自定义配置集只需要包含集合级的业务配置,也就是:
solrconfig.xml:引入DataImport Handler的依赖jar,配置/dataimport请求处理器data-config.xml:配置PostgreSQL的数据源、实体映射规则managed-schema(或schema.xml):定义索引字段- 相关依赖jar:比如PostgreSQL驱动jar、Solr DataImport Handler的jar(可以放到配置集的
lib目录一起上传)
举个solrconfig.xml里引入DataImport Handler的示例:
<!-- 引入DataImport Handler依赖 --> <lib dir="${solr.config.dir}/lib" regex="solr-dataimporthandler-.*\.jar" /> <lib dir="${solr.config.dir}/lib" regex="postgresql-42.6.0.jar" /> <!-- 配置DataImport请求处理器 --> <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler>
额外注意事项
- 确保你有ZK的操作权限:SolrCloud模式下,通常只有集群管理员能操作ZK的核心节点
- 如果是全新的SolrCloud集群,第一次上传
security.json会直接启用认证,之后所有Solr请求都需要带认证信息 - 配置
security.json时,一定要给执行DataImport的用户分配dataimport权限,否则会出现权限报错
备注:内容来源于stack exchange,提问作者Kit Neoh
相关产品推荐
相关产品推荐

