W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
本節(jié)介紹如何在Solr中使用ZooKeeper訪問(wèn)控制列表(ACL)。有關(guān)ZooKeeper ACL的信息,請(qǐng)參閱:http://zookeeper.apache.org/doc/r3.4.10/zookeeperProgrammers.html#sc_ZooKeeperAccessControl 的ZooKeeper文檔。
SolrCloud使用ZooKeeper來(lái)共享信息和進(jìn)行協(xié)調(diào)。
本節(jié)介紹如何配置Solr以將更多限制性的ACL添加到其創(chuàng)建的ZooKeeper內(nèi)容,以及如何告知Solr有關(guān)訪問(wèn)ZooKeeper中內(nèi)容所需的憑據(jù)。如果你想在你的ZooKeeper節(jié)點(diǎn)中使用ACL,你必須激活這個(gè)功能。默認(rèn)情況下,Solr行為是開(kāi)放不安全的ACL,并且不使用任何憑據(jù)。
存儲(chǔ)在ZooKeeper中的內(nèi)容對(duì)于SolrCloud集群的運(yùn)行至關(guān)重要。開(kāi)放訪問(wèn)ZooKeeper上的SolrCloud內(nèi)容可能會(huì)導(dǎo)致各種問(wèn)題。例如:
如果您將ZooKeeper集合的訪問(wèn)權(quán)限授予您不信任的實(shí)體,或者您希望減少由于下列原因?qū)е碌腻e(cuò)誤操作的風(fēng)險(xiǎn),則可能需要使用Solr啟用ZooKeeper ACL:
如果你認(rèn)為ZooKeeper中有些東西不是每個(gè)人都應(yīng)該知道的,你甚至可能想要限制讀取權(quán)限。或者你可能只是在需要知道的基礎(chǔ)上進(jìn)行一般性的工作。
保護(hù)ZooKeeper本身可能意味著許多不同的事情。本節(jié)是關(guān)于保護(hù)ZooKeeper中的Solr內(nèi)容。ZooKeeper內(nèi)容基本上一直存在于磁盤(pán)上,部分地存在于ZooKeeper進(jìn)程的內(nèi)存中。本節(jié)不涉及在存儲(chǔ)或ZooKeeper進(jìn)程級(jí)別保護(hù)ZooKeeper數(shù)據(jù) - 這是ZooKeeper需要處理的。
但是這個(gè)內(nèi)容也可以通過(guò)ZooKeeper API“外部”提供。外部進(jìn)程可以連接到ZooKeeper并創(chuàng)建/更新/刪除/讀取內(nèi)容;例如,SolrCloud集群中的Solr節(jié)點(diǎn)想要?jiǎng)?chuàng)建/更新/刪除/讀取,并且SolrJ客戶端想要從集群中讀取。創(chuàng)建/更新內(nèi)容來(lái)設(shè)置內(nèi)容的ACL是外部進(jìn)程的責(zé)任。ACL描述誰(shuí)可以讀取,更新,刪除,創(chuàng)建等。ZooKeeper中的每個(gè)信息(znode / content)都有自己的一組ACL,并且不可能繼承或共享。Solr中的默認(rèn)行為是在其創(chuàng)建的所有內(nèi)容上添加一個(gè)ACL - 一個(gè)允許任何人執(zhí)行任何操作的權(quán)限(在ZooKeeper術(shù)語(yǔ)中稱為“開(kāi)放式不安全ACL(open-unsafe ACL)”)。
我們希望能夠:
Solr節(jié)點(diǎn),客戶端和工具(例如ZkCLI)總是使用一個(gè)稱為SolrZkClient的java類(lèi)來(lái)處理他們的ZooKeeper的東西。這里所描述的解決方案的實(shí)現(xiàn)就是要改變的SolrZkClient。如果您在您的應(yīng)用程序中使用SolrZkClient,則下面的描述也適用于您的應(yīng)用程序。
通過(guò)在solr.xml的<solrcloud>部分中配置zkCredentialsProvider屬性到類(lèi)的名稱(在類(lèi)別路徑上)來(lái)實(shí)現(xiàn) zkCredentialsProvider 接口,這可以控制將使用哪個(gè)憑據(jù)提供程序。在Solr分布中的server/solr/solr.xml,定義了zkCredentialsProvider如果定義了它,它將采用同名zkCredentialsProvider系統(tǒng)屬性的值(例如,通過(guò)取消注釋在solr.in.sh/.cmd中的SOLR_ZK_CREDS_AND_ACLS環(huán)境變量定義-
參見(jiàn)下文),或者如果不定義,則默認(rèn)為DefaultZkCredentialsProvider實(shí)現(xiàn)。
你總是可以自己實(shí)現(xiàn),但Solr有兩個(gè)實(shí)現(xiàn):
通過(guò)在solr.xml的<solrcloud>部分中配置zkACLProvider屬性到類(lèi)的名稱(在類(lèi)別路徑上)來(lái)實(shí)現(xiàn) ZkACLProvider 接口,將會(huì)控制要添加的ACL。在Solr分布中的server/solr/solr.xml,定義了zkACLProvider,如果定義了它,它將采用同名zkACLProvider系統(tǒng)屬性的值(例如,通過(guò)取消注釋在solr.in.sh/.cmd中的SOLR_ZK_CREDS_AND_ACLS環(huán)境變量定義 - 參見(jiàn)下文),或者如果不定義,則默認(rèn)DefaultZkACLProvider執(zhí)行。
你總是可以讓你自己實(shí)現(xiàn),但Solr有兩個(gè)實(shí)現(xiàn):
如果沒(méi)有上述ACL添加到列表中,則默認(rèn)情況下將使用 DefaultZkACLProvider 的(空)ACL列表。
注意系統(tǒng)屬性名稱與證書(shū)提供程序VMParamsSingleSetCredentialsDigestZkCredentialsProvider(如上所述)重疊。這是為了讓兩個(gè)供應(yīng)商以一種很好的方式進(jìn)行協(xié)作:通過(guò)限制兩個(gè)用戶(一個(gè)管理員用戶和一個(gè)只讀用戶),我們始終保護(hù)對(duì)內(nèi)容的訪問(wèn)權(quán)限,而且我們始終使用與相同管理員用戶相對(duì)應(yīng)的憑據(jù)進(jìn)行連接,基本上這樣我們可以對(duì)我們自己創(chuàng)建的內(nèi)容/ znode做任何事情。
您可以將只讀憑據(jù)提供給SolrCloud群集的“客戶端” - 例如,供SolrJ客戶端使用。他們將能夠讀取運(yùn)行SolrJ客戶端所需的任何內(nèi)容,但是他們將無(wú)法修改ZooKeeper中的任何內(nèi)容。
有兩個(gè)影響ZooKeeper ACL的腳本:
這些Solr腳本可以通過(guò)設(shè)置相應(yīng)的系統(tǒng)屬性來(lái)啟用ZK ACL:取消注釋以下內(nèi)容,并將密碼替換為您選擇的密碼,以便在以下文件中啟用上述VM參數(shù)ACL和憑證提供程序:
solr.in.sh:
# Settings for ZK ACL
#SOLR_ZK_CREDS_AND_ACLS="-DzkACLProvider=org.apache.solr.common.cloud.VMParamsAllAndReadonlyDigestZkACLProvider \
# -DzkCredentialsProvider=org.apache.solr.common.cloud.VMParamsSingleSetCredentialsDigestZkCredentialsProvider \
# -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD \
# -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD"
#SOLR_OPTS="$SOLR_OPTS $SOLR_ZK_CREDS_AND_ACLS"
solr.in.cmd:
REM Settings for ZK ACL
REM set SOLR_ZK_CREDS_AND_ACLS=-DzkACLProvider=org.apache.solr.common.cloud.VMParamsAllAndReadonlyDigestZkACLProvider ^
REM -DzkCredentialsProvider=org.apache.solr.common.cloud.VMParamsSingleSetCredentialsDigestZkCredentialsProvider ^
REM -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD ^
REM -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD
REM set SOLR_OPTS=%SOLR_OPTS% %SOLR_ZK_CREDS_AND_ACLS%
zkcli.sh:
# Settings for ZK ACL
#SOLR_ZK_CREDS_AND_ACLS="-DzkACLProvider=org.apache.solr.common.cloud.VMParamsAllAndReadonlyDigestZkACLProvider \
# -DzkCredentialsProvider=org.apache.solr.common.cloud.VMParamsSingleSetCredentialsDigestZkCredentialsProvider \
# -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD \
# -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD"
zkcli.bat:
REM Settings for ZK ACL
REM set SOLR_ZK_CREDS_AND_ACLS=-DzkACLProvider=org.apache.solr.common.cloud.VMParamsAllAndReadonlyDigestZkACLProvider ^
REM -DzkCredentialsProvider=org.apache.solr.common.cloud.VMParamsSingleSetCredentialsDigestZkCredentialsProvider ^
REM -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD ^
REM -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD
在運(yùn)行Solr集群的整個(gè)過(guò)程中,您可能決定從一個(gè)不安全的ZooKeeper移動(dòng)到一個(gè)安全的實(shí)例。更改在在solr.xml中配置的zkACLProvider將確保新創(chuàng)建的節(jié)點(diǎn)是安全的,但不會(huì)保護(hù)已有的數(shù)據(jù)。要修改所有現(xiàn)有的ACL,可以在Solr的ZkCLI中使用該updateacls命令。首先對(duì)定義在server/scripts/cloud-scripts/zkcli.sh(或在Windows上的zkcli.bat)上的SOLR_ZK_CREDS_AND_ACLS環(huán)境變量取消注釋?zhuān)缓筇顚?xiě)admin-user和readonly-user的密碼
- 見(jiàn)上面 - 然后運(yùn)行server/scripts/cloud-scripts/zkcli.sh -cmd updateacls /zk-path,或者在Windows上運(yùn)行:server\scripts\cloud-scripts\zkcli.bat cmd updateacls /zk-path。
在ZK中更改ACL時(shí),只能在SolrCloud群集停止時(shí)執(zhí)行。嘗試在Solr運(yùn)行時(shí)執(zhí)行此操作可能會(huì)導(dǎo)致?tīng)顟B(tài)不一致,并且某些節(jié)點(diǎn)無(wú)法訪問(wèn)。
VM屬性:zkACLProvider和zkCredentialsProvider(包含在zkcli.sh/.bat的SOLR_ZK_CREDS_AND_ACLS環(huán)境變量中)控制著轉(zhuǎn)換:
zkcli.sh/.bat中未注釋的SOLR_ZK_CREDS_AND_ACLS環(huán)境變量將憑據(jù)和ACL提供程序設(shè)置為VMParamsSingleSetCredentialsDigestZkCredentialsProvider和VMParamsAllAndReadonlyDigestZkACLProvider實(shí)現(xiàn)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: