首先注意:在配置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下的所有文件夾節點/文件節點都設置上權限。