99re热视频这里只精品,久久久天堂国产精品女人,国产av一区二区三区,久久久精品成人免费看片,99久久精品免费看国产一区二区三区

在SolrCloud模式下添加自定義插件

2018-12-18 14:02 更新

在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選項運行。在啟用此功能之前,用戶應仔細考慮以下"安全運行庫"部分中討論的問題

上傳Jar文件

第一步是使用Blob Store API來上傳你的jar文件。這將把您的罐子.system集合中,并將它們分布在您的SolrCloud節(jié)點上。這些jar被添加到一個單獨的類加載器,并且只可由配置為 runtimeLib = true 的組件訪問。這些組件被惰性加載,因為當一個特定的核心被加載時,.system集合可能不會被加載。

配置使用Jars作為運行時庫的API命令

運行時庫功能為Config API使用一組特殊的命令來將blob存儲中當前可用的jar文件添加、更新或刪除到運行時庫列表中。

以下命令用于管理運行時庫:

  • add-runtimelib
  • update-runtimelib
  • delete-runtimelib
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é)點了。

第1步:生成一個RSA私鑰

第一步是生成一個RSA私鑰。下面的示例使用512位密鑰,但是您應該使用適合您需要的強度。

$ openssl genrsa -out priv_key.pem 512

步驟2:輸出公鑰

密鑰的公共部分應該以DER格式輸出,以便Java可以讀取它。

$ openssl rsa -in priv_key.pem -pubout -outform DER -out pub_key.der

步驟3:將密鑰加載到ZooKeeper

然后, 從步驟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 簽名和使用簽名的過程。

第4步:簽署jar文件

接下來,您需要簽署jar文件的sha1摘要并獲取base64字符串。

$ openssl dgst -sha1 -sign priv_key.pem myjar.jar | openssl enc -base64

此步驟的輸出將是一個字符串,您將需要在下面的步驟6中將該jar添加到您的類路徑中。

第5步:將jar加載到Blob Store

使用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名稱將被用作下一步中的名稱。

第6步:將jar添加到Classpath

最后,使用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=" }
}'
以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號