首先注意:在配置ACL的时候,请关闭solr运行实例!!不然可能对集群形成不可恢复的损坏web
开始:apache
1.修改solr.xml,在solrCloud节点添加,告诉solr要使用的provider:ide
<!--zkACL--> <str name="zkCredientialsProvider">org.apache.solr.common.cloud.VMParamsSingleSetCredentialsDigestZkCredentialsProvider</str> <str name="zkACLProvider">org.apache.solr.common.cloud.VMParamsAllAndReadonlyDigestZkACLProvider</str>
2.给zkcli.sh添加两个变量,并把变量加到PATH变量中,这样使用zkcli.sh访问zk的时候,就提供了provider和相关用户名密码测试
添加的内容:spa
#ZK_ACLS SOLR_ZK_CREDS_AND_ACLS="-DzkDigestUsername=admin-user -DzkDigestPassword=admin-password -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=readonly-password" SOLR_ZK_PROVIDERS="-DzkACLProvider=org.apache.solr.common.cloud.VMParamsAllAndReadonlyDigestZkACLProvider -DzkCredentialsProvider=org.apache.solr.common.cloud.VMParamsSingleSetCredentialsDigestZkCredentialsProvider"
修改的内容:命令行
3.在bin/solr.in.sh底部添加以下用户名密码的配置,目的是为了让bin/solr 脚本可以有访问zk配置文件的权限(也就是说让solr的web界面里可以显示zk配置文件)code
#ZK ACLS SOLR_ZK_CREDS_AND_ACLS="-DzkDigestUsername=admin-user -DzkDigestPassword=admin-password -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=readonly-password" SOLR_OPTS="$SOLR_OPTS $SOLR_ZK_CREDS_AND_ACLS"
好了,配置完成。xml
下面咱们来测试一下,blog
假设咱们本来的zk里面文件夹节点/collections,咱们来给它添加权限,执行:继承
sh zkcli.sh -zkhost 10.172.85.105 -cmd updateacls /collections
执行完成后咱们进入zk客户端命令行,执行:
ls /collections,结果以下:
证实咱们成功给/collections这个节点添加了权限。
咱们来查看一下/collections这个节点的权限设置:
如图中所示,表明有两个用户admin-user和readonly-user拥有这个节点的权限,admin-user的权限是cdrwa,readonly-user的权限是r。
咱们授予权限admin-user,而后再查看,这时候就能够查看了:
接下来咱们启动solr,在solr admin的管理页面里查看zk的配置文件:
如图,查当作功,这说明以前咱们配置的solr.xml和solr.in.sh成功的在solr启动时给予solr集群访问zk的权限。
备注:
1.上述咱们是手动给/collections添加了权限,对于solr自动建立的文件,若是是在咱们配置ACL以前已经生成的文件,都须要咱们手动添加权限,对于配置ACL以后生成的文件,所有会自动添加solr.in.sh中配置的权限。
2.zk的权限设置是非继承的,也就是说若是A文件夹节点里有子文件夹节点B,咱们在zk的客户端命令行中给A设置权限,那么B不会受影响,任意用户均可以访问B。然而上述咱们用zkcli.sh的updateacls命令给/collections目录节点设置权限时,实际上solr内部的org.apache.solr.cloud.ZkCLI 会递归地将collections下的所有文件夹节点/文件节点都设置上权限。