W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
在SolrCloud模式下,自定義插件需要在群集的所有節(jié)點之間共享。
當在SolrCloud模式下運行Solr并且想要使用自定義代碼(例如自定義分析器、標記器、查詢解析器和其他插件)時,將jar添加到群集中所有節(jié)點上的類路徑可能非常麻煩。使用 Blob Store API和Config API的特殊命令,您可以將jar上傳到一個特定的系統(tǒng)級集合,并在運行時從它們中動態(tài)加載插件,而無需重新啟動任何節(jié)點。
默認情況下禁用此功能,除了通過在 SolrCloud 模式下運行來要求該 solr 之外,默認情況下此功能也是禁用的,除非所有Solr節(jié)點在啟動時都使用該-Denable.runtime.lib=true
選項運行。在啟用此功能之前,用戶應仔細考慮以下"安全運行庫"部分中討論的問題
第一步是使用Blob Store API來上傳你的jar文件。這將把您的罐子.system集合中,并將它們分布在您的SolrCloud節(jié)點上。這些jar被添加到一個單獨的類加載器,并且只可由配置為 runtimeLib = true 的組件訪問。這些組件被惰性加載,因為當一個特定的核心被加載時,.system集合可能不會被加載。
運行時庫功能為Config API使用一組特殊的命令來將blob存儲中當前可用的jar文件添加、更新或刪除到運行時庫列表中。
以下命令用于管理運行時庫:
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存儲區(qū)時指定的blob的名稱。您還應該包含您要使用的blob存儲區(qū)中找到的jar版本。這些細節(jié)信息被添加到configoverlay.json中。
默認 SolrResourceLoader 對已定義為運行庫的 jar 沒有可見性。有一個類加載器可以訪問這些只能提供給特殊注釋的組件的jar。
每個可插入組件都可以有一個稱為runtimeLib=true的可選的額外屬性,這意味著組件在核心加載時不會被加載。相反,他們將被按需加載。如果組件加載時所有依賴的jar都不可用,則會拋出錯誤。
這個例子顯示了使用已經(jīng)加載到Blob存儲的jar創(chuàng)建一個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 }
}'
此功能的一個缺點是可以用來把惡意的可執(zhí)行代碼加載到系統(tǒng)中。但是,可以通過使用 PKI 來限制系統(tǒng)只加載受信任的 jar,以驗證加載到系統(tǒng)中的可執(zhí)行文件是否可信。
以下步驟將允許您啟用此功能的安全性。這些指令假設您已經(jīng)使用-Denable.runtime.lib=true啟動了所有的Solr節(jié)點了。
第一步是生成一個RSA私鑰。下面的示例使用512位密鑰,但是您應該使用適合您需要的強度。
$ openssl genrsa -out priv_key.pem 512
密鑰的公共部分應該以DER格式輸出,以便Java可以讀取它。
$ openssl rsa -in priv_key.pem -pubout -outform DER -out pub_key.der
然后, 從步驟2輸出的. der 文件應加載到一個節(jié)點/密鑰/exe 下的管理員, 以便在每個節(jié)點中都可用。您可以將任意數(shù)量的公鑰加載到該節(jié)點上, 并且全部都是有效的。如果從目錄中刪除了某個密鑰, 則該密鑰的簽名將不再有效。因此, 在刪除密鑰之前, 請確保使用更新 runtimelib 命令更新運行庫配置, 并使用有效的簽名。
在目前的時間, 你只能使用動物園管理員 zkCli (或 zkCli 在 Windows 上) 腳本來發(fā)出這些命令 (Solr 版本具有相同的名稱, 但不相同)。如果你有自己的動物園管理員合奏已經(jīng)運行, 你可以找到腳本在 $ZK _install/斌/zkCli (或 zkCli, 如果您正在使用的 Windows)。
完成第二步后應該將從步驟2輸出的.der文件加載到/keys/exe節(jié)點下的ZooKeeper中,以便在每個節(jié)點中都可用。您可以將任意數(shù)量的公鑰加載到該節(jié)點,并且全部都是有效的。如果從目錄中刪除一個密鑰,該密鑰的簽名將不再有效。因此,在刪除密鑰之前,請確保使用該update-runtimelib命令更新運行時庫配置的有效簽名。
目前,您只能使用ZooKeeper zkCli.sh(或Windows中的zkCli.cmd)腳本來發(fā)出這些命令(Solr版本具有相同的名稱,但不一樣)。如果您已經(jīng)擁有自己的ZooKeeper集成,則可以在其中找到該腳本$ZK_INSTALL/bin/zkCli.sh(或者zkCli.cmd,如果您使用的是Windows)。
如果您正在運行的是包含在 Solr 中的嵌入式ZooKeeper,則您已經(jīng)沒有此腳本;為了使用它,您將需要從 http://zookeeper.apache.org/下載一個ZooKeeper v3.4.10的副本。不用擔心配置下載,您只是想獲取命令行實用程序腳本。當您啟動腳本時,您將連接到嵌入式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 必須與您的一個私鑰簽名,以便Solr信任它。在步驟4-6中概述了為 jar 簽名和使用簽名的過程。
接下來,您需要簽署jar文件的sha1摘要并獲取base64字符串。
$ openssl dgst -sha1 -sign priv_key.pem myjar.jar | openssl enc -base64
此步驟的輸出將是一個字符串,您將需要在下面的步驟6中將該jar添加到您的類路徑中。
使用Blob Store API將您的jar加載到Blob存儲區(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號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: