W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
在SolrCloud模式下,自定義插件需要在群集的所有節(jié)點(diǎn)之間共享。
當(dāng)在SolrCloud模式下運(yùn)行Solr并且想要使用自定義代碼(例如自定義分析器、標(biāo)記器、查詢解析器和其他插件)時(shí),將jar添加到群集中所有節(jié)點(diǎn)上的類路徑可能非常麻煩。使用 Blob Store API和Config API的特殊命令,您可以將jar上傳到一個(gè)特定的系統(tǒng)級(jí)集合,并在運(yùn)行時(shí)從它們中動(dòng)態(tài)加載插件,而無需重新啟動(dòng)任何節(jié)點(diǎn)。
默認(rèn)情況下禁用此功能,除了通過在 SolrCloud 模式下運(yùn)行來要求該 solr 之外,默認(rèn)情況下此功能也是禁用的,除非所有Solr節(jié)點(diǎn)在啟動(dòng)時(shí)都使用該-Denable.runtime.lib=true
選項(xiàng)運(yùn)行。在啟用此功能之前,用戶應(yīng)仔細(xì)考慮以下"安全運(yùn)行庫"部分中討論的問題
第一步是使用Blob Store API來上傳你的jar文件。這將把您的罐子.system集合中,并將它們分布在您的SolrCloud節(jié)點(diǎn)上。這些jar被添加到一個(gè)單獨(dú)的類加載器,并且只可由配置為 runtimeLib = true 的組件訪問。這些組件被惰性加載,因?yàn)楫?dāng)一個(gè)特定的核心被加載時(shí),.system集合可能不會(huì)被加載。
運(yùn)行時(shí)庫功能為Config API使用一組特殊的命令來將blob存儲(chǔ)中當(dāng)前可用的jar文件添加、更新或刪除到運(yùn)行時(shí)庫列表中。
以下命令用于管理運(yùn)行時(shí)庫:
curl http://localhost:8983/solr/techproducts/config -H 'Content-type:application/json' -d '{
"add-runtimelib": { "name":"jarblobname", "version":2 },
"update-runtimelib": { "name":"jarblobname", "version":3 },
"delete-runtimelib": "jarblobname"
}'
要使用的名稱是您將jar上傳到blob存儲(chǔ)區(qū)時(shí)指定的blob的名稱。您還應(yīng)該包含您要使用的blob存儲(chǔ)區(qū)中找到的jar版本。這些細(xì)節(jié)信息被添加到configoverlay.json中。
默認(rèn) SolrResourceLoader 對(duì)已定義為運(yùn)行庫的 jar 沒有可見性。有一個(gè)類加載器可以訪問這些只能提供給特殊注釋的組件的jar。
每個(gè)可插入組件都可以有一個(gè)稱為runtimeLib=true的可選的額外屬性,這意味著組件在核心加載時(shí)不會(huì)被加載。相反,他們將被按需加載。如果組件加載時(shí)所有依賴的jar都不可用,則會(huì)拋出錯(cuò)誤。
這個(gè)例子顯示了使用已經(jīng)加載到Blob存儲(chǔ)的jar創(chuàng)建一個(gè)ValueSourceParser。
curl http://localhost:8983/solr/techproducts/config -H 'Content-type:application/json' -d '{
"create-valuesourceparser": {
"name": "nvl",
"runtimeLib": true,
"class": "solr.org.apache.solr.search.function.NvlValueSourceParser,
"nvlFloatValue": 0.0 }
}'
此功能的一個(gè)缺點(diǎn)是可以用來把惡意的可執(zhí)行代碼加載到系統(tǒng)中。但是,可以通過使用 PKI 來限制系統(tǒng)只加載受信任的 jar,以驗(yàn)證加載到系統(tǒng)中的可執(zhí)行文件是否可信。
以下步驟將允許您啟用此功能的安全性。這些指令假設(shè)您已經(jīng)使用-Denable.runtime.lib=true啟動(dòng)了所有的Solr節(jié)點(diǎn)了。
第一步是生成一個(gè)RSA私鑰。下面的示例使用512位密鑰,但是您應(yīng)該使用適合您需要的強(qiáng)度。
$ openssl genrsa -out priv_key.pem 512
密鑰的公共部分應(yīng)該以DER格式輸出,以便Java可以讀取它。
$ openssl rsa -in priv_key.pem -pubout -outform DER -out pub_key.der
然后, 從步驟2輸出的. der 文件應(yīng)加載到一個(gè)節(jié)點(diǎn)/密鑰/exe 下的管理員, 以便在每個(gè)節(jié)點(diǎn)中都可用。您可以將任意數(shù)量的公鑰加載到該節(jié)點(diǎn)上, 并且全部都是有效的。如果從目錄中刪除了某個(gè)密鑰, 則該密鑰的簽名將不再有效。因此, 在刪除密鑰之前, 請(qǐng)確保使用更新 runtimelib 命令更新運(yùn)行庫配置, 并使用有效的簽名。
在目前的時(shí)間, 你只能使用動(dòng)物園管理員 zkCli (或 zkCli 在 Windows 上) 腳本來發(fā)出這些命令 (Solr 版本具有相同的名稱, 但不相同)。如果你有自己的動(dòng)物園管理員合奏已經(jīng)運(yùn)行, 你可以找到腳本在 $ZK _install/斌/zkCli (或 zkCli, 如果您正在使用的 Windows)。
完成第二步后應(yīng)該將從步驟2輸出的.der文件加載到/keys/exe節(jié)點(diǎn)下的ZooKeeper中,以便在每個(gè)節(jié)點(diǎn)中都可用。您可以將任意數(shù)量的公鑰加載到該節(jié)點(diǎn),并且全部都是有效的。如果從目錄中刪除一個(gè)密鑰,該密鑰的簽名將不再有效。因此,在刪除密鑰之前,請(qǐng)確保使用該update-runtimelib命令更新運(yùn)行時(shí)庫配置的有效簽名。
目前,您只能使用ZooKeeper zkCli.sh(或Windows中的zkCli.cmd)腳本來發(fā)出這些命令(Solr版本具有相同的名稱,但不一樣)。如果您已經(jīng)擁有自己的ZooKeeper集成,則可以在其中找到該腳本$ZK_INSTALL/bin/zkCli.sh(或者zkCli.cmd,如果您使用的是Windows)。
如果您正在運(yùn)行的是包含在 Solr 中的嵌入式ZooKeeper,則您已經(jīng)沒有此腳本;為了使用它,您將需要從 http://zookeeper.apache.org/下載一個(gè)ZooKeeper v3.4.10的副本。不用擔(dān)心配置下載,您只是想獲取命令行實(shí)用程序腳本。當(dāng)您啟動(dòng)腳本時(shí),您將連接到嵌入式ZooKeeper。
要加載密鑰,您需要使用zkCli.sh連接到ZooKeeper,創(chuàng)建目錄,然后創(chuàng)建密鑰文件,如下例所示:
# Connect to ZooKeeper
# Replace the server location below with the correct ZooKeeper connect string for your installation.
$ .bin/zkCli.sh -server localhost:9983
# After connection, you will interact with the ZK prompt.
# Create the directories
[zk: localhost:9983(CONNECTED) 5] create /keys
[zk: localhost:9983(CONNECTED) 5] create /keys/exe
# Now create the public key file in ZooKeeper
# The second path is the path to the .der file on your local machine
[zk: localhost:9983(CONNECTED) 5] create /keys/exe/pub_key.der /myLocal/pathTo/pub_key.der
在此之后,任何加載jar的嘗試都將失敗。您的所有 jar 必須與您的一個(gè)私鑰簽名,以便Solr信任它。在步驟4-6中概述了為 jar 簽名和使用簽名的過程。
接下來,您需要簽署jar文件的sha1摘要并獲取base64字符串。
$ openssl dgst -sha1 -sign priv_key.pem myjar.jar | openssl enc -base64
此步驟的輸出將是一個(gè)字符串,您將需要在下面的步驟6中將該jar添加到您的類路徑中。
使用Blob Store API將您的jar加載到Blob存儲(chǔ)區(qū)。這一步不需要簽名;您將需要在步驟6中的簽名將其添加到您的類路徑中。
curl -X POST -H 'Content-Type: application/octet-stream' --data-binary @{filename}
http://localhost:8983/solr/.system/blob/{blobname}
您在此步驟中給出jar文件的blob名稱將被用作下一步中的名稱。
最后,使用Config API將jar添加到類路徑,如上所述。在這一步中,您將需要提供您在步驟4中獲得的jar的簽名。
curl http://localhost:8983/solr/techproducts/config -H 'Content-type:application/json' -d '{
"add-runtimelib": {
"name":"blobname",
"version":2,
"sig":"mW1Gwtz2QazjfVdrLFHfbGwcr8xzFYgUOLu68LHqWRDvLG0uLcy1McQ+AzVmeZFBf1yLPDEHBWJb5KXr8bdbHN/
PYgUB1nsr9pk4EFyD9KfJ8TqeH/ijQ9waa/vjqyiKEI9U550EtSzruLVZ32wJ7smvV0fj2YYhrUaaPzOn9g0=" }
}'
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)系方式:
更多建議: