elasticsearch文档-modules
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
modules
模塊
cluster
原文
基本概念
cluster: 集群,一個(gè)集群通常由很多節(jié)點(diǎn)(node)組成?
node: 節(jié)點(diǎn),比如集群中的每臺機(jī)器可以看做一個(gè)node?
shard: 分片,ES是分布式搜索引擎,會把數(shù)據(jù)拆分成很多個(gè)shard,一個(gè)索引默認(rèn)有5個(gè)shard?
replica: 副本,ES是high availability的, 為了數(shù)據(jù)安全會把同一份數(shù)據(jù)存放在多個(gè)節(jié)點(diǎn),默認(rèn)情況下一個(gè)索引的數(shù)據(jù)會存兩份副本。一份是primary,一份是replica。 primary: 主節(jié)點(diǎn)?
rebalancing: 指數(shù)據(jù)在集群的節(jié)點(diǎn)中重新分配,比如當(dāng)集群中增加或者移除節(jié)點(diǎn)時(shí)就會發(fā)生rebalancing
Shards allocation
Shards allocation是指在各個(gè)節(jié)點(diǎn)分配shard的過程。 在初始化恢復(fù), 分配replica, rebalancing, 新增或移除節(jié)點(diǎn)時(shí)會發(fā)生。
一些基本配置如下
cluster.routing.allocation.allow_rebalance
根據(jù)集群中節(jié)點(diǎn)的狀態(tài)來控制什么時(shí)候可以rebalancing, 可以設(shè)置三種方式。
indices_primaries_active: 僅當(dāng)所有的primary shards是active的時(shí)候才允許rebalancing。
indices_all_active: 僅當(dāng)所有的shards是active的時(shí)候才允許rebalancing。
always: 一組shard、replication是active時(shí)就可以rebalancing。
默認(rèn)值為indices_all_active,可以減少cluster初始化恢復(fù)時(shí)各節(jié)點(diǎn)之間的交互。
cluster.routing.allocation.cluster_concurrent_rebalance
設(shè)置在cluster中最多可以允許幾個(gè)rebalancing同時(shí)進(jìn)行,默認(rèn)為2, 如果設(shè)置為-1則意味著不做限制。
cluster.routing.allocation.node_initial_primaries_recoveries
限制每個(gè)節(jié)點(diǎn)可以同時(shí)初始化恢復(fù)primary shard數(shù)量。
這個(gè)設(shè)置是為了防止同時(shí)進(jìn)行的recovery進(jìn)程太多影響節(jié)點(diǎn)負(fù)載,因?yàn)榇蠖鄶?shù)情況下用的是local gateway,速度相當(dāng)快,所以可以同時(shí)執(zhí)行多個(gè)recovery進(jìn)程而不會造成太多的負(fù)荷,默認(rèn)是4。
cluster.routing.allocation.node_concurrent_recoveries
限制每個(gè)節(jié)點(diǎn)并行recovery的數(shù)量, 默認(rèn)是2。
cluster.routing.allocation.disable_new_allocation
設(shè)置是否禁止分配新的新的primary shard,注意, 設(shè)置為true會阻止新建的索引的shard分配。 因?yàn)槿绻鹥rimary不存在,replica會自動提升為primary, 所以這個(gè)配置通過更新cluster配置的API動態(tài)更新才有意義。
cluster.routing.allocation.disable_allocation
是否禁止分配primary和replica,這個(gè)配置通過更新cluster配置的API動態(tài)更新才有意義。
cluster.routing.allocation.disable_replica_allocation
是否禁止分配replica,和上面的設(shè)置類似, 這個(gè)配置通過更新cluster配置的API動態(tài)更新才有意義。
indices.recovery.concurrent_streams
設(shè)置在從對應(yīng)的shard恢復(fù)一個(gè)shard時(shí),可以同時(shí)打開的數(shù)據(jù)流的數(shù)量(節(jié)點(diǎn)級別),默認(rèn)是3。
Cluster allocation awareness
分片規(guī)則
集群分片規(guī)則(Cluster allocation awareness)允許我們用一些參數(shù)來配置整個(gè)集群中shard和replica的分片規(guī)則。 下面通過一個(gè)例子來解釋一下。
假設(shè)我們有幾個(gè)機(jī)架,我們給一節(jié)點(diǎn)配置一個(gè)名為rack_id的屬性(其他名字也可以), 配置例子如下:
node.rack_id: rack_one
上面例子為這個(gè)節(jié)點(diǎn)配置了一個(gè)名為rack_id的屬性, 值為rack_one。 接下來將rack_id配置為分片規(guī)則所用的屬性(在所有節(jié)點(diǎn)都要設(shè)置)。
cluster.routing.allocation.awareness.attributes: rack_id
上面的配置意味著分片規(guī)則會基于屬性rack_id來做shard和replica分配。 例如,我們有兩個(gè)node.rack_id屬性設(shè)置為rack_one的節(jié)點(diǎn), 部署了一個(gè)有5個(gè)shards和1個(gè)replica的索引, 索引數(shù)據(jù)會分布到這兩個(gè)節(jié)點(diǎn)上(每個(gè)節(jié)點(diǎn)有5個(gè)shard, 1個(gè)replica, 總共10個(gè)shards)。
如果我們再加入兩個(gè)節(jié)點(diǎn),這兩個(gè)節(jié)點(diǎn)的node.rack_id屬性設(shè)置為rack_two, shard會在這些節(jié)點(diǎn)上重新分配, 但是一個(gè)shard和他的replica不會分配到有相同rack_id屬性的節(jié)點(diǎn)上。
可以為分片規(guī)則設(shè)置多個(gè)屬性, 比如:
cluster.routing.allocation.awareness.attributes: rack_id,zone
注意:啟用了分片規(guī)則屬性后,如果一個(gè)節(jié)點(diǎn)沒有配置這些屬性, shard就不會分配到這個(gè)節(jié)點(diǎn)上。
forced awareness
強(qiáng)制行分片規(guī)則
有時(shí)候我們提前知道用來做分片規(guī)則的屬性會有更多的值, 我們不希望一些replica被分配到一組特定節(jié)點(diǎn)上, 對于這種情況, 我們可以針對這些屬性值用強(qiáng)制分片規(guī)則。
例如,我們用屬性zone來做分片規(guī)則屬性,并且我們知道會有兩個(gè)zone:zone1和zone2。 下面是強(qiáng)制分片規(guī)則設(shè)置的例子:
cluster.routing.allocation.awareness.force.zone.values:?zone1,zone2cluster.routing.allocation.awareness.attributes:?zone現(xiàn)在我們先啟用兩個(gè)node.zone屬性設(shè)置成zone1的節(jié)點(diǎn),然后創(chuàng)建一個(gè)有5個(gè)shard和1個(gè)replica的索引。 索引建完后只有5個(gè)shard(沒有replica),要等到我們再啟用更多屬性node.zone為zone2的節(jié)點(diǎn)時(shí),replica才會被分配。
automatic preference when searching / geting
在執(zhí)行search或者執(zhí)行g(shù)et指令時(shí), 接受請求的節(jié)點(diǎn)會優(yōu)先選擇與其有相同屬性值的節(jié)點(diǎn)分片上執(zhí)行請求。
realtime settings update
這些設(shè)置可以通過更新cluster配置的api在一個(gè)運(yùn)行著的cluster上實(shí)時(shí)更新。
shard allocation filtering
可以用include/exclude過濾器控制索引部署到哪些節(jié)點(diǎn)上,過濾器可以設(shè)置在索引級別,也可以設(shè)置在集群級別, 我們先看一下設(shè)置在索引級別的例子。
假設(shè)我們有四個(gè)節(jié)點(diǎn), 每個(gè)節(jié)點(diǎn)配置了一個(gè)名為tag的分片規(guī)則屬性(可以是任何名字),節(jié)點(diǎn)1的tag屬性置為value1, 節(jié)點(diǎn)2的tag屬性設(shè)置為value2,以此類推。
我們可以把配置項(xiàng)index.routing.allocation.include.tag設(shè)置為value1,value2來使創(chuàng)建的索引只部署到哪些tag屬性為value1和value2的節(jié)點(diǎn)上,例如
curl?-XPUT?localhost:9200/test/_settings?-d?'{??????"index.routing.allocation.include.tag"?:?"value1,value2"}'另一方面, 我們將配置項(xiàng)index.routing.allocation.exclude.tag設(shè)置為value3, 這樣創(chuàng)建的索引會被部署到tag屬性為value3之外的那些節(jié)點(diǎn)上,例如
curl?-XPUT?localhost:9200/test/_settings?-d?'{??????"index.routing.allocation.exclude.tag"?:?"value3"}'從0.90版開始, 可以用index.routing.allocation.require.*來設(shè)置一系列規(guī)則, 只有符合全部規(guī)則的節(jié)點(diǎn)才會分配shard, 相對而言include則是只要符合任意一條就可以。
include,?exclude和require的值都支持通配符, 例如value1*。 一個(gè)特殊的節(jié)點(diǎn)名是_ip,可以用來匹配節(jié)點(diǎn)的ip地址. 另外一個(gè)特殊屬性_host可以用來匹配節(jié)點(diǎn)的主機(jī)名和ip地址。
上面說過,一個(gè)節(jié)點(diǎn)可以配置幾個(gè)屬性, 例如
node.group1:?group1_value1node.group2:?group2_value4對應(yīng)的,?include,?exclude?和?require?也可以用幾個(gè)屬性, 例如
curl?-XPUT?localhost:9200/test/_settings?-d?'{????"index.routing.allocation.include.group1"?:?"xxx"????"index.routing.allocation.include.group2"?:?"yyy",????"index.routing.allocation.exclude.group3"?:?"zzz",????"index.routing.allocation.require.group4"?:?"aaa"}'這些設(shè)置可以用更新配置的api實(shí)時(shí)更新, 實(shí)時(shí)移動索引(索引的分片)。
Cluster級別的過濾器可以用更新cluster設(shè)置的api來實(shí)時(shí)定義和更新,這些設(shè)置在解除一個(gè)節(jié)點(diǎn)時(shí)很有用(即使replica數(shù)量設(shè)置為0)。 下面是根據(jù)ip地址解除一個(gè)節(jié)點(diǎn)的例子:
curl?-XPUT?localhost:9200/_cluster/settings?-d?'{????"transient"?:?{????????"cluster.routing.allocation.exclude._ip"?:?"10.0.0.1"????}}'discovery
原文
discovery模塊負(fù)責(zé)發(fā)現(xiàn)集群(cluster)中的節(jié)點(diǎn),以及選舉出主節(jié)點(diǎn)。
注意,ES是一個(gè)基于端到端(p2p)的系統(tǒng),節(jié)點(diǎn)之間直接通信,所有主要的API(index, search, delete)不需要和主節(jié)點(diǎn)(master node)通信。 主節(jié)點(diǎn)的職責(zé)是維護(hù)整個(gè)集群的狀態(tài),并且在節(jié)點(diǎn)加入或者離開集群時(shí)重新分片。 每次集群的狀體改變會通知到集群中的其他節(jié)點(diǎn)(方式取決于discovery模塊的具體實(shí)現(xiàn))。
settings
配置項(xiàng)cluster.name用來給集群設(shè)置一個(gè)名字,以此把一個(gè)集群和其他的集群區(qū)分開。 默認(rèn)的集群名是elasticsearch, 不過推薦改為能反映集群用途的有實(shí)際意義的名字。
ec2 discovery
EC2 discovery機(jī)制使用EC2的API來執(zhí)行自動發(fā)現(xiàn),用不到,不看了。
zen discovery
Zen發(fā)現(xiàn)機(jī)制
zen發(fā)現(xiàn)機(jī)制是ES默認(rèn)的內(nèi)置發(fā)現(xiàn)模塊。 它提供了多播和單播兩種發(fā)現(xiàn)方式,并且能夠很容易的擴(kuò)展以支持云環(huán)境。
zen發(fā)現(xiàn)機(jī)制是和其他模塊集成在一起的,比如所有節(jié)點(diǎn)之間通訊是用trasport模塊來完成。
Zen發(fā)現(xiàn)機(jī)制分為幾個(gè)子模塊,接下來分別做詳細(xì)解釋。
ping
ping是指一個(gè)節(jié)點(diǎn)用發(fā)現(xiàn)機(jī)制發(fā)現(xiàn)其他節(jié)點(diǎn)的過程, 支持多播(multicast)和單播(unicast)兩種方式,也可以組合使用。
multicast
multicast是指發(fā)送一個(gè)或多個(gè)多播請求,存在的節(jié)點(diǎn)會接受并且相應(yīng)請求。 它提供了一組以discovery.zen.ping.multicast為前綴的配置項(xiàng)。
| group | group地址,默認(rèn)值為224.2.2.4 |
| port | 端口,默認(rèn)為54328 |
| ttl | 多播消息的ttl,默認(rèn)是3 |
| address | 綁定地址,默認(rèn)為null,即綁定所有可用的network接口。 |
unicast
在多播禁用的情況下可以使用unicast發(fā)現(xiàn)方式。 它需要一個(gè)主機(jī)列表, 它提供了下面以discovery.zen.ping.unicast為前綴的配置項(xiàng)。
| hosts | 一個(gè)數(shù)組或者以逗號分隔的字符串, 每個(gè)值的格式為host:port或者h(yuǎn)ost[port1-port2] |
unicast發(fā)現(xiàn)方式需要借助transport模塊來實(shí)現(xiàn)。
master election
主節(jié)點(diǎn)選舉
作為ping初始化過程的一部分, 需要選舉出一個(gè)集群的master節(jié)點(diǎn)或者加入到一個(gè)已經(jīng)選出的master節(jié)點(diǎn), 這個(gè)過程是自動完成。 可以通過配置項(xiàng)discovery.zen.ping_timeout來設(shè)置ping的超時(shí)時(shí)間(默認(rèn)是3s)以應(yīng)對網(wǎng)絡(luò)速度慢或者網(wǎng)絡(luò)擁堵的情況。 設(shè)置一個(gè)比較大的值可以減少失敗的幾率。
節(jié)點(diǎn)可以設(shè)置屬性node.master為false來避免被選舉為master節(jié)點(diǎn)。 注意, 如果一個(gè)節(jié)點(diǎn)被設(shè)置為客戶端節(jié)點(diǎn)(node.client屬性設(shè)置為true), 這個(gè)節(jié)點(diǎn)不會被選舉為master節(jié)點(diǎn)(node.master自動設(shè)置為false)。
屬性discovery.zen.minimum_master_nodes設(shè)置一個(gè)集群中最少的合格master節(jié)點(diǎn)數(shù)量, 對于2個(gè)節(jié)點(diǎn)以上的集群,建議設(shè)置為大于1的值。
舉個(gè)例子, 假設(shè)集群有5個(gè)節(jié)點(diǎn),?minimum_master_nodes設(shè)置為3, 如果2個(gè)節(jié)點(diǎn)掉線了,這兩個(gè)節(jié)點(diǎn)不會自己組建一個(gè)集群, 而是嘗試加入另一個(gè)集群。
這個(gè)設(shè)置可以避免網(wǎng)絡(luò)故障時(shí)有些節(jié)點(diǎn)試圖自行組織集群,從而導(dǎo)致整個(gè)集群不穩(wěn)定。
fault detection
錯(cuò)誤檢測
有兩種錯(cuò)誤檢測方式,一種是master節(jié)點(diǎn)ping集群中所有其他的節(jié)點(diǎn)來驗(yàn)證他們是否存活,另一種是每個(gè)節(jié)點(diǎn)ping master節(jié)點(diǎn)來驗(yàn)證它是否存活,或者是否需要初始化一個(gè)選舉。
下面的配置項(xiàng)用于設(shè)置錯(cuò)誤檢測,前綴是discovery.zen.fd:
| ping_interval | ping的頻率, 默認(rèn)1s |
| ping_timeout | ping的超時(shí)時(shí)間, 默認(rèn)30s |
| ping_retries | 如果ping失敗或者超時(shí),重試的次數(shù) |
external multicast
外部多播
multicast 發(fā)現(xiàn)機(jī)制還支持外部多播請求,外部客戶端可以發(fā)送多播請求, 格式為:
{????"request"?:?{????????"cluster_name":?"test_cluster"????}}響應(yīng)格式類似節(jié)點(diǎn)信息的響應(yīng)(只有節(jié)點(diǎn)信息,包括transport/http地址以及節(jié)點(diǎn)的屬性):
{????"response"?:?{????????"cluster_name"?:?"test_cluster",????????"transport_address"?:?"...",????????"http_address"?:?"...",????????"attributes"?:?{????????????"..."????????}????}}注意,可以禁用內(nèi)部multicast發(fā)現(xiàn)機(jī)制,只啟用外部多播發(fā)現(xiàn)機(jī)制。 方式為將discovery.zen.ping.multicast.enabled設(shè)為true(默認(rèn)),但是將discovery.zen.ping.multicast.ping.enabled設(shè)為false。
gateway
原文
gateway模塊存儲集群元數(shù)據(jù)(meta data)的狀態(tài),集群元數(shù)據(jù)主要包括索引的配置和聲明的mapping定義。
每次集群元數(shù)據(jù)發(fā)生變化時(shí)(比如添加或刪除索引),會通過gateway來持久化這些變化。 集群啟動時(shí)會從gateway讀取并且應(yīng)用這些數(shù)據(jù)。
設(shè)置在節(jié)點(diǎn)級別的gateway自動控制索引所用的gateway。 比如節(jié)點(diǎn)用fs?gateway,該節(jié)點(diǎn)創(chuàng)建的索引也自動用fs?gateway。 在這種情況下, 如節(jié)點(diǎn)不應(yīng)該持久化狀態(tài)數(shù)據(jù), 應(yīng)該明確設(shè)置為none(唯一可以設(shè)置的值)。
ES默認(rèn)使用的gateway是local gateway。
recovery after nodes / time
大多數(shù)場景下,集群的元數(shù)據(jù)只能在特定的節(jié)點(diǎn)已經(jīng)啟動后才能被恢復(fù), 或者等待到超時(shí)。 這在集群重啟時(shí)非常有用,此時(shí)每個(gè)節(jié)點(diǎn)的本地索引存儲仍然可用,不需要從gateway恢復(fù)(能夠減少從gateway恢復(fù)的時(shí)間)。
gateway.recover_after_nodes(數(shù)字類型)設(shè)置多少個(gè)合格的data節(jié)點(diǎn)以及master節(jié)點(diǎn)啟動后觸發(fā)recovery。?gateway.recover_after_data_nodes和gateway.recover_after_master_nodes含義類似,只不過分別設(shè)置data節(jié)點(diǎn)和master節(jié)點(diǎn)的數(shù)值。?gateway.recover_after_time(事件類型)設(shè)置在所有的gateway.recover_after...nodes條件滿足后,等待多長時(shí)間再開始recovery。
gateway.expected_nodes設(shè)置預(yù)期多少個(gè)合格的data和master節(jié)點(diǎn)啟動后就開始recovery,一旦滿足條件馬上啟動recovery,recover_after_time設(shè)置會被忽略,對應(yīng)的也支持gateway.expected_data_nodes和gateway.expected_master_nodes這兩個(gè)配置項(xiàng)。 一個(gè)配置的例子如下:
gateway:????recover_after_nodes:?1????recover_after_time:?5m????expected_nodes:?2、這個(gè)例子配置了在一個(gè)預(yù)期兩個(gè)節(jié)點(diǎn)的集群中,在一個(gè)節(jié)點(diǎn)啟動后的5分鐘后執(zhí)行recovery,一旦集群中有已經(jīng)有兩個(gè)節(jié)點(diǎn)啟動了,立即開始recovery(不等待,忽略recover_after_time)。
注意,一旦元數(shù)據(jù)從gateway恢復(fù)了,那么這個(gè)配置就不再有效,直到下次集群完整重啟。
在集群元數(shù)據(jù)沒有恢復(fù)時(shí),為了避免和真實(shí)的集群元數(shù)據(jù)沖突,所有操作都會被阻止。
local gateway
本地網(wǎng)關(guān)
local gateway從每個(gè)節(jié)點(diǎn)的本地存儲中恢復(fù)整個(gè)集群狀態(tài)和索引數(shù)據(jù), 并且不需要節(jié)點(diǎn)級別的共享存儲。
注意,和共享類的gateway不同, local gateway的持久化不是異步的,一單一個(gè)操作被執(zhí)行, 數(shù)據(jù)就會被存儲以備集群恢復(fù)時(shí)使用。
非常重要的一點(diǎn)是在配置gateway.recover_after_nodes時(shí)要包括大多數(shù)在整個(gè)集群重啟后期望啟動的節(jié)點(diǎn), 這可以確保集群恢復(fù)到最新的狀態(tài)。 例如:
gateway:????recover_after_nodes:?1????recover_after_time:?5m????expected_nodes:?2注意,為了能夠備份/快照完整地集群狀態(tài), 建議禁用flush的情況下所有節(jié)點(diǎn)的本地存儲都要有副本(理論上不需要所有的,只需要確保每個(gè)shard的副本被備份,這依賴replication的設(shè)置)。 共享存儲比如S3可以在一個(gè)地方保存不同節(jié)點(diǎn)的拷貝,盡管代價(jià)是帶來了更多的IO。
shared fs gateway
shared FS gateway已經(jīng)廢棄,以后會被移除, 不看了。
hadoop gateway
hadoop gateway以后會被移除, 不看了。
s3 gateway
s3 gateway以后會被移除, 不看了。
http
原文
http模塊允許通過http訪問ES的接口。
http是完全異步的,意味著等待響應(yīng)時(shí)不會阻塞線程。
如果有可能, 考慮使用HTTP keep alive來獲得更好的性能,并且http客戶端不要啟用HTTP chunking。
settings
下面是http模塊的一些設(shè)置。
| http.port | 綁定的端口范圍, 默認(rèn)9200-9300 |
| http.max_content_length | http請求大小的上限, 默認(rèn)100mb |
| http.max_initial_line_length | http url的最大長度, 默認(rèn)4kb |
| http.compression | 是否支持http壓縮, 默認(rèn)是false |
| http.compression_level | http壓縮的級別, 默認(rèn)是6 |
http模塊共享通用的network設(shè)置。
disable http
設(shè)置http.enabled為false可以禁用http模塊,比如創(chuàng)建非數(shù)據(jù)節(jié)點(diǎn)來接收http請求,這些節(jié)點(diǎn)利用內(nèi)部的transport來和數(shù)據(jù)節(jié)點(diǎn)通信。
indices
原文
indices模塊可以對所有索引進(jìn)行全局管理。
indexing buffer
索引緩沖的設(shè)置可以控制多少內(nèi)存分配給索引進(jìn)程。 這是一個(gè)全局配置,會應(yīng)用于一個(gè)節(jié)點(diǎn)上所有不同的分片上。
indices.memory.index_buffer_size接受一個(gè)百分比或者一個(gè)表示字節(jié)大小的值。 默認(rèn)是10%,意味著分配給節(jié)點(diǎn)的總內(nèi)存的10%用來做索引緩沖的大小。 這個(gè)數(shù)值被分到不同的分片(shards)上。 如果設(shè)置的是百分比,還可以設(shè)置min_index_buffer_size?(默認(rèn)48mb)和max_index_buffer_size(默認(rèn)沒有上限)。
indices.memory.min_shard_index_buffer_size設(shè)置分配給每個(gè)分片的索引緩沖內(nèi)存的下限,默認(rèn)4mb。
ttl interval
你可以動態(tài)設(shè)置indices.ttl.interval來控制自動刪除過期documents的檢查間隔,默認(rèn)是60s。
刪除是批量進(jìn)行的,你可以設(shè)置indices.ttl.bulk_size來適應(yīng)你的需要,默認(rèn)值是10000。
其余的參考_ttl的文檔。
recovery
以下設(shè)置用來管理recovery的策略:
| indices.recovery.concurrent_streams | 默認(rèn)是3 |
| indices.recovery.file_chunk_size | 默認(rèn)512kb |
| indices.recovery.translog_ops | 默認(rèn)1000 |
| indices.recovery.translog_size | 默認(rèn)512kb |
| indices.recovery.compress | 默認(rèn)true |
| indices.recovery.max_bytes_per_sec | 默認(rèn)20mb |
| indices.recovery.max_size_per_sec | 0.90.1去掉,用indices.recovery.max_bytes_per_sec代替 |
下面的設(shè)置對存儲進(jìn)行限流:
| indices.store.throttle.type | 可以是merge?(默認(rèn)),?not或者all |
| indices.store.throttle.max_bytes_per_sec | 默認(rèn)20mb |
jmx
removed as of v0.90.
memcached
原文
memcached模塊可以通過memecached協(xié)議來訪問ES的接口。
memcached模塊通過一個(gè)名為transport-memcached插件提供,插件的安裝說明見transport-memcached,也可以下載memcached插件并放在plugins目錄下。
memcached協(xié)議支持二進(jìn)制和文本兩種協(xié)議, 會自動檢測應(yīng)該用哪一種協(xié)議。
mapping rest to memcached protocol
Memcached命令會被映射到REST接口,并且會被同樣的REST層處理,下面是支持的memcached命令列表:
get
memcached的GET命令映射到REST的GET方法。 用URI (帶參數(shù))來做key。 memcached的GET命令不允許在請求中帶body(SET不允許返回結(jié)果), 為此大多數(shù)REST接口(比如search)允許接受一個(gè)"source"作為URI的參數(shù)。
set
memcached的SET命令映射為REST的POST。 用URI (帶參數(shù))來做key, body映射為REST的body。
delete
memcached的DELETE命令映射為REST的DELETE。 用URI (帶參數(shù))來做key。
quit
memcached的QUIT命令用來斷開客戶端鏈接。
settings
以下設(shè)置可以用來配置memcached:
| memcached.port | 綁定端口范圍, 默認(rèn)11211-11311 |
同樣共享通用的network設(shè)置。
disable memcached
設(shè)置memcached.enabled為false可以禁用memcached模塊, 默認(rèn)檢測到該插件即啟用memcached模塊。
network settings
原文
一個(gè)節(jié)點(diǎn)的多個(gè)模塊都用到了網(wǎng)絡(luò)基本配置,例如transport模塊和HTTP模塊。 節(jié)點(diǎn)級別的網(wǎng)絡(luò)配置可以用來設(shè)置所有基于網(wǎng)絡(luò)的模塊的通用配置(除了被每個(gè)模塊明確覆蓋的那些配置項(xiàng))。
network.bind_host用來設(shè)置綁定的ip地址, 默認(rèn)綁定anyLocalAddress?(0.0.0.0或者::0)。
network.publish_host配置其他節(jié)點(diǎn)和本節(jié)點(diǎn)通信的地址。 這個(gè)當(dāng)然不能是anyLocalAddress, 默認(rèn)是第一個(gè)非回環(huán)地址或者本機(jī)地址。
network.host設(shè)置是一個(gè)簡化設(shè)置, 它自動設(shè)置network.bind_host和network.publish_host為同一個(gè)值。
兩個(gè)設(shè)置都可以配置為主機(jī)ip地址或者主機(jī)名, 還可以設(shè)置為下表中列出來的值。
| local | 本機(jī)ip地址 |
| _non_loopback_ | 第一個(gè)非loopback地址 |
| _non_loopback:ipv4_ | 第一個(gè)非loopback的ipv4地址 |
| _non_loopback:ipv6_ | 第一個(gè)非loopback的ipv6地址 |
| [networkInterface] | 指定網(wǎng)卡的IP地址. 例如?en0 |
| [networkInterface]:ipv4 | 指定網(wǎng)卡的IPv4地址. 例如?en0:ipv4 |
| [networkInterface]:ipv6 | 指定網(wǎng)卡的IPv6地址. 例如?en0:ipv6 |
| _non_loopback:ipv6_ | 第一個(gè)非loopback的ipv6地址 |
cloud-aws
如果安裝了cloud-aws插件, 下表列出來值也是有效的設(shè)置:
| ec2:privateIpv4 | The private IP address (ipv4) of the machine |
| ec2:privateDns | The private host of the machines |
| ec2:publicIpv4 | The public IP address (ipv4) of the machine |
| ec2:publicDns | The public host of the machines |
| ec2 | Less verbose option for the private ip address |
| ec2:privateIp | Less verbose option for the private ip address |
| ec2:publicIp | Less verbose option for the public ip address |
tcp settings
任何使用TCP的組件 (比如HTTP, Transport和Memcached)共享下面的設(shè)置:
| network.tcp.no_delay | 啟用或禁用tcp no delay。 默認(rèn)是true. |
| network.tcp.keep_alive | 啟用或禁用tcp keep alive。 默認(rèn)不設(shè)置 |
| network.tcp.reuse_address | 地址是否應(yīng)該被重用,在非windows的機(jī)器上默認(rèn)是true |
| network.tcp.send_buffer_size | tcp發(fā)送緩沖區(qū)的大小。 默認(rèn)不設(shè)置 |
| network.tcp.receive_buffer_size | tcp接收緩沖區(qū)的大小。 默認(rèn)不設(shè)置 |
node
原文
ES可以設(shè)置一個(gè)節(jié)點(diǎn)是否在本地存儲數(shù)據(jù),存儲數(shù)據(jù)意味著不同索引的分片可以分配到這個(gè)節(jié)點(diǎn)上。 默認(rèn)每個(gè)節(jié)點(diǎn)都可以作為數(shù)據(jù)節(jié)點(diǎn)(data node),可以設(shè)置node.data為false來關(guān)閉。
這是一個(gè)很強(qiáng)大的配置, 可以很簡單的來創(chuàng)建一個(gè)智能負(fù)載均衡。
我們可以啟動一個(gè)數(shù)據(jù)節(jié)點(diǎn)的集群而不啟用http模塊, 這可以通過設(shè)置http.enabled為true做到, 這些節(jié)點(diǎn)通過transport模塊相互通信, 在集群的前端可以啟動一個(gè)和或者多個(gè)啟用了http模塊的非數(shù)據(jù)節(jié)點(diǎn), 所有的http通訊由這些非數(shù)據(jù)節(jié)點(diǎn)來執(zhí)行。
這樣做的好處是首先能夠創(chuàng)建一個(gè)智能負(fù)載均衡器。 這些非數(shù)據(jù)節(jié)點(diǎn)仍然是集群的一部分, 他們將請求重定向到那些有相關(guān)數(shù)據(jù)的節(jié)點(diǎn)上。 另一個(gè)好處是對于那些scatter/gather操作(比如search), 這些節(jié)點(diǎn)可以執(zhí)行一部分處理, 因?yàn)樗鼈儐觭catter處理并且執(zhí)行實(shí)際的gather過程。
這樣數(shù)據(jù)節(jié)點(diǎn)可以專注于索引和查詢這類大負(fù)載的工作,而不需要處理http請求, 占用網(wǎng)絡(luò)負(fù)載,或者執(zhí)行g(shù)ather過程。
plugins
原文
Plugins提供了以自定義的方式增強(qiáng)ES基本功能的途徑, 范圍包括添加自定義mapping類型, 自定義分詞, 原生腳本, 自定義discovery等等。
installing plugins
安裝插件可以手工將插件安裝包放到plugins目錄, 也可以用plugin腳本來安裝。 在github的elasticsearch能找到好幾個(gè)插件, 名字以"elasticsearch-"開頭。
從0.90.2開始, 插件可以通過執(zhí)行?plugin --install /<user/component>/的形式來安裝。 插件會從download.elasticsearch.org自動下載, 如果插件不存在的話, 就從maven(central and sonatype)下載。
注意, 如果插件放在maven central或者sonatype的話,?`是groupId,<user/component>是artifactId`。
對于以前的版本, 老的安裝方式是?plugin -install /<user/component>/
一個(gè)插件也可以直接通過指定它的URL來安裝, 例如
bin/plugin --url file://path/to/plugin --install plugin-name
或者對于老版本來說是
bin/plugin -url file://path/to/plugin -install plugin-name
從0.90.2開始, 插件的更新信息可以通過運(yùn)行?bin/plugin -h來獲得。
site plugins
插件可以包含一個(gè)站點(diǎn), 任何位于plugins目錄下的插件如果包含一個(gè)_site目錄, 目錄里的內(nèi)容就可以當(dāng)做靜態(tài)內(nèi)容通過/_plugin/[plugin_name]/url來訪問,在進(jìn)程已經(jīng)開始的情況下也可以向其添加內(nèi)容。
安裝的插件如果不包含任何java相關(guān)的內(nèi)容, 會被自動檢測為site插件, 內(nèi)容會被移動到_site目錄下。
安裝github托管的插件非常簡單, 比如運(yùn)行
#?From?0.90.2bin/plugin?--install?mobz/elasticsearch-headbin/plugin?--install?lukas-vlcek/bigdesk#?From?a?prior?versionbin/plugin?-install?mobz/elasticsearch-headbin/plugin?-install?lukas-vlcek/bigdesk會自動安裝這兩個(gè)site插件,elasticsearch-head插件可以通過?http://localhost:9200/_plugin/head/訪問, bigdesk插件可以通過http://localhost:9200/_plugin/bigdesk/訪問。
mandatory plugins
如果你依賴一些插件, 你可以通過屬性plugin.mandatory來定義這些強(qiáng)制性(mandatory)插件, 下面是一個(gè)配置的例子:
plugin.mandatory:?mapper-attachments,lang-groovy出于安全考慮, 如果mandatory插件沒有安裝, 節(jié)點(diǎn)不會啟動。
installed plugins
當(dāng)前已加載的插件列表可通過Node Info API獲得。
removing plugins
要?jiǎng)h除一個(gè)插件,可以手工將它從plugins目錄移除,也可以用plugin腳本。
刪除一個(gè)插件通常可以用下面的形式:
plugin?--removesilent/verbose mode
運(yùn)行plugin腳本時(shí), 可以加--verbose參數(shù)獲得更多的信息(調(diào)試模式)。 相反的, 如果希望plugin腳本靜默與運(yùn)行可以用--silent選項(xiàng)。
注意, 退出碼可能是:
0:?everything?was?OK64:?unknown?command?or?incorrect?option?parameter74:?IO?error70:?other?errorsbin/plugin?--install?mobz/elasticsearch-head?--verboseplugin?--remove?head?--silentscripting
scripting模塊可以用腳本來執(zhí)行自定義表達(dá)式, 比如可以用腳本將"script fields"作為查詢的一部分返回, 或者用來計(jì)算某個(gè)查詢的自定義評分等。
腳本模塊默認(rèn)用擴(kuò)展過的mvel作為腳本語言, 之所以用是因?yàn)樗浅?於矣闷饋砗芎唵?#xff0c; 大多數(shù)情況下需要的是簡單的表達(dá)式(比如數(shù)學(xué)方程式)。
其他lang插件可以提供執(zhí)行不同語言腳本的能力, 目前支持的腳本插件有javascript的lang-javascript,Groovy的lang-groovy, Python的lang-python。 所有可以用script參數(shù)的地方可以設(shè)置lang參數(shù)來定義腳本所用的語言。?lang的選項(xiàng)可以是mvel,?js,?groovy,?python, 和native。
default scripting language
默認(rèn)的腳本語言是(如果沒有指定lang參數(shù))mvel。 如果要修改默認(rèn)語言的話可以將設(shè)置script.default_lang為合適的語言。
preloaded scripts
腳本可以作為相關(guān)api的一部分, 也可以將腳本放到config/scripts來預(yù)加載這些腳本, 這樣用到這些腳本的地方可以直接引用腳本的名字而不用提供整個(gè)腳本, 這有助于減少客戶端和節(jié)點(diǎn)間的傳輸?shù)臄?shù)據(jù)量。
腳本的名字從其所在的目錄結(jié)構(gòu)繼承,不需要帶文件名的后綴, 例如被放在config/scripts/group1/group2/test.py的腳本會被命名為group1_group2_test。
disabling dynamic scripts
建議ES運(yùn)行在某個(gè)應(yīng)用或者代理的后端,這樣可以將ES和外部隔離, 如果用戶被授權(quán)運(yùn)行動態(tài)腳本(即使在search請求),那么他們就可以訪問ES所在的機(jī)器。
首先, 你不應(yīng)該用root用戶來運(yùn)行ES, 因?yàn)檫@樣會允許腳本在你的服務(wù)器上沒有限制的做任何事, 其次你不應(yīng)該直接將ES暴露給用戶訪問, 如果你打算直接將ES暴露給用戶, 你必須決定是否足夠信任他們在你的服務(wù)器上運(yùn)行腳本。 如果答案是不的話, 即使你有個(gè)代理僅允許GET請求, 你也應(yīng)該在每個(gè)節(jié)點(diǎn)的config/elasticsearch.yml加入如下設(shè)置來禁用動態(tài)腳本:
script.disable_dynamic:?true這樣可以僅允許配置過的命名腳本或者通過插件注冊的原生Java腳本運(yùn)行, 防止用戶通過接口來運(yùn)行任意腳本。
native (java) scripts
即使mvel已經(jīng)相當(dāng)快了,注冊的原生java腳本還能執(zhí)行的更快。
實(shí)現(xiàn)NativeScriptFactory接口的腳本才會被執(zhí)行。 主要有兩種形式,一種是擴(kuò)展AbstractExecutableScript,一種是擴(kuò)展AbstractSearchScript(可能大多數(shù)用戶會選擇這種方式, 可以借助AbstractLongSearchScript,?AbstractDoubleSearchScript,?AbstractFloatSearchScript這幾個(gè)輔助類來實(shí)現(xiàn)擴(kuò)展)。
可以通過配置來注冊腳本, 例如:script.native.my.type設(shè)為sample.MyNativeScriptFactory將注冊一個(gè)名為my的腳本。 另一個(gè)途徑是插件中訪問ScriptModule的registerScript方法注冊腳本。
設(shè)置lang為native并且提供腳本的名字就可以執(zhí)行注冊的腳本。
注意, 腳本需要位于ES的classpath下, 一個(gè)簡單方法是在plugins目錄下創(chuàng)建一個(gè)目錄(選擇一個(gè)描述性的名字),將jar/classes文件放在這個(gè)目錄,他們就會被自動加載。
score
所有的腳本都可以在facets中使用, 可以通過doc.score訪問當(dāng)前文檔的評分。
document fields
大多數(shù)腳本都會用到document的字段,?doc['field_name']可以用來訪問document中的某個(gè)字段(document通常通過腳本的上下文傳給腳本)。 訪問document的字段非???#xff0c; 因?yàn)樗麄儠患虞d到內(nèi)存中(所有相關(guān)的字段值/token會被加載到內(nèi)存中)。
下表是能夠從字段上拿到的數(shù)據(jù):
| doc['field_name'].value | 字段的原生值, 比如,如果是字段short類型,就返回short類型的值 |
| doc['field_name'].values | 字段的原生值的數(shù)組, 比如,如果字段是short類型,就返回short[]類型的數(shù)組。 記住,單個(gè)文檔中的一個(gè)字段可以有好幾個(gè)值,如果字段沒有值就返回空數(shù)組 |
| doc['field_name'].empty | boolean值, 表明文檔的字段是否有值 |
| doc['field_name'].multiValued | boolean值, 表明文檔的字段是否有多個(gè)值 |
| doc['field_name'].lat | geo point類型的維度值 |
| doc['field_name'].lon | geo point類型的經(jīng)度值 |
| doc['field_name'].lats | geo point類型的維度數(shù)組 |
| doc['field_name'].lons | geo point類型的經(jīng)度數(shù)組 |
| doc['field_name'].distance(lat, lon) | geo point類型的字段到給定坐標(biāo)的plane距離(單位是miles) |
| doc['field_name'].arcDistance(lat, lon) | geo point類型的字段到給定坐標(biāo)的arc距離(單位是miles) |
| doc['field_name'].distanceInKm(lat, lon) | geo point類型的字段到給定坐標(biāo)的plane距離(單位是km) |
| doc['field_name'].arcDistanceInKm(lat, lon) | geo point類型的字段到給定坐標(biāo)的arc距離(單位是km) |
| doc['field_name'].geohashDistance(geohash) | geo point類型的字段到給定geohash的距離(單位是miles) |
| doc['field_name'].geohashDistanceInKm(geohash) | geo point類型的字段到給定geohash的距離(單位是km) |
stored fields
執(zhí)行腳本時(shí)也可以訪問存儲的字段(Stored), 注意,因?yàn)樗麄儾粫挥涊d到內(nèi)存,所以訪問速度與訪問document字段相比慢很多。 可以用_fields['my_fields_name'].value或_fields['my_fields_name'].values的形式來訪問。
source field
執(zhí)行腳本時(shí)也可以獲取源字段(source)。 每個(gè)文檔的源字段會被加載,解析,然后提供給腳本計(jì)算。 可以通過上下文的_source來訪問源字段,例如_source.obj2.obj1.fields3。
mvel built in functions
以下是腳本中可以使用的內(nèi)置函數(shù):
| time() | The current time in milliseconds. |
| sin(a) | Returns the trigonometric sine of an angle. |
| cos(a) | Returns the trigonometric cosine of an angle. |
| tan(a) | Returns the trigonometric tangent of an angle. |
| asin(a) | Returns the arc sine of a value. |
| acos(a) | Returns the arc cosine of a value. |
| atan(a) | Returns the arc tangent of a value. |
| toRadians(angdeg) | Converts an angle measured in degrees to an approximately equivalent angle measured in radians. |
| toDegrees(angrad) | Converts an angle measured in radians to an approximately equivalent angle measured in degrees. |
| exp(a) | Returns Euler’s number e raised to the power of value. |
| log(a) | Returns the natural logarithm (base e) of a value. |
| log10(a) | Returns the base 10 logarithm of a value. |
| sqrt(a) | Returns the correctly rounded positive square root of a value. |
| cbrt(a) | Returns the cube root of a double value. |
| IEEEremainder(f1, f2) | Computes the remainder operation on two arguments as prescribed by the IEEE 754 standard. |
| ceil(a) | Returns the smallest (closest to negative infinity) value that is greater than or equal to the argument and is equal to a mathematical integer. |
| floor(a) | Returns the largest (closest to positive infinity) value that is less than or equal to the argument and is equal to a mathematical integer. |
| rint(a) | Returns the value that is closest in value to the argument and is equal to a mathematical integer. |
| atan2(y, x) | Returns the angle theta from the conversion of rectangular coordinates (x, y) to polar coordinates (r,theta). |
| pow(a, b) | Returns the value of the first argument raised to the power of the second argument. |
| round(a) | Returns the closest int to the argument. |
| random() | Returns a random double value. |
| abs(a) | Returns the absolute value of a value. |
| max(a, b) | Returns the greater of two values. |
| min(a, b) | Returns the smaller of two values. |
| ulp(d) | Returns the size of an ulp of the argument. |
| signum(d) | Returns the signum function of the argument. |
| sinh(x) | Returns the hyperbolic sine of a value. |
| cosh(x) | Returns the hyperbolic cosine of a value. |
| tanh(x) | Returns the hyperbolic tangent of a value. |
| hypot(x, y) | Returns sqrt(x2 + y2) without intermediate overflow or underflow. |
arithmetic precision in mvel
用基于MVEL的腳本做兩個(gè)數(shù)的除法時(shí), 引擎遵循java的默認(rèn)規(guī)則, 這意味著如果你把兩個(gè)整數(shù)相除(你可以在mapping里配置字段為integer類型), 結(jié)果仍然是整數(shù)。 也就是說如果你在腳本中計(jì)算1/num這樣的表達(dá)式, 如果num是整數(shù)8的話,結(jié)果是0而不是你可能期望的0.125,你需要明確用doubel來指定精度以獲得期望的結(jié)果,用比如1.0/num。
thread pool
為了提高線程管理和內(nèi)存使用的效率, 一個(gè)節(jié)點(diǎn)會用到好幾個(gè)線程池, 比較重要的是以下幾個(gè)。
| index | 用于index/delete, 默認(rèn)是fixed, 大小為# of available processors, queue_size是200 |
| search | 用于count/search, 默認(rèn)是fixed, 大小為3x # of available processors, queue_size是1000 |
| suggest | 用于suggest, 默認(rèn)是fixed, 大小為# of available processors, queue_size是1000 |
| geting | 用于get, 默認(rèn)是fixed, 大小為# of available processors, queue_size是1000 |
| bulk | 用于bulk, 默認(rèn)是fixed, 大小為# of available processors, queue_size是50 |
| percolate | 用于percolate, 默認(rèn)是fixed, 大小為# of available processors, queue_size是1000 |
| warmer | 用于warm-up, 默認(rèn)是scaling, keep-alive是5m |
| refresh | 用于refresh, 默認(rèn)是fixed, keep-alive是5m |
| percolate | 用于percolate, 默認(rèn)是fixed, 大小為# of available processors, queue_size是1000 |
可以通過設(shè)置線程池的類型以及參數(shù)來修改指定的線程池,下面的例子配置index線程池可以用更多的線程:
threadpool:????index:????????type:?fixed????????size:?30注意, 可以通過Cluster Update Settings接口在運(yùn)行期間修改線程池的設(shè)置。
thread pool types
以下是線程池的類型以及對應(yīng)的參數(shù)。
cache
cache線程池是沒有大小限制的, 只要有請求就會啟動一個(gè)線程, 下面是設(shè)置的例子:
threadpool:????index:????????type:?cachedfixed
fixed線程池有固定的大小, 如果當(dāng)前沒有可用的線程時(shí),就把請求放到一個(gè)隊(duì)列里, 隊(duì)列可以設(shè)置大小。
size參數(shù)設(shè)置線程的數(shù)量, 默認(rèn)是cpu內(nèi)核數(shù)乘以5。
queue_size設(shè)置存放掛起請求的隊(duì)列的大小, 默認(rèn)是-1, 即沒有大小限制。 如果一個(gè)請求進(jìn)來而隊(duì)列已經(jīng)滿了的情況下, 這個(gè)請求會被舍棄。
配置例子如下:
threadpool:????index:????????type:?fixed????????size:?30????????queue_size:?1000processors setting
ES會自動檢測處理器的數(shù)量, 并且會自動根據(jù)處理器的數(shù)量來設(shè)置線程池。 有時(shí)候可能檢測出來的處理器數(shù)量是錯(cuò)的, 這種情況下可以設(shè)置processors?來聲明處理器的數(shù)量。
可以用帶os參數(shù)的nodes info接口來檢查自動檢測出來的處理器數(shù)量。
thrift
thrift傳輸模塊允許通過thrift協(xié)議對外暴露REST接口, Thrift協(xié)議可以提供比http協(xié)議更好的性能。 因?yàn)閠hrift既提供了協(xié)議,也提供了傳輸?shù)膶?shí)現(xiàn)方式, 用起來應(yīng)該很簡單(盡管缺乏相關(guān)文檔)。
使用thrift需要安裝transport-thrift插件?。
thrift schema可以用來生成thrift的客戶端代碼。
thrift的相關(guān)配置如下:
| thrift.port | 綁定的端口, 默認(rèn)9500-9600 |
| thrift.frame | 默認(rèn)-1, 即不分frame, 可以設(shè)置比較大的值來指定frame的大小(比如15mb)。 |
transport
傳輸模塊用于集群內(nèi)節(jié)點(diǎn)間的內(nèi)部通訊。 每次跨節(jié)點(diǎn)的調(diào)用都會用到transport模塊(比如某個(gè)節(jié)點(diǎn)接受http GET請求,實(shí)際執(zhí)行處理的是另一個(gè)持有數(shù)據(jù)的節(jié)點(diǎn))。
transport機(jī)制是完全異步的, 即等待響應(yīng)時(shí)不會阻塞線程, 異步通信的好處首先是解決了C10k問題, 另外也是scatter(broadcast)/gather操作(比如搜索)的方案。
tcp transport
TCP transport是用TCP實(shí)現(xiàn)傳輸模塊, 允許如下設(shè)置:
| transport.tcp.port | 綁定的端口范圍, 默認(rèn)9300-9400 |
| transport.tcp.connect_timeout | socket鏈接的超時(shí)時(shí)間, 默認(rèn)2s |
| transport.tcp.compress | 設(shè)置為true可以啟用壓縮(LZF), 默認(rèn)是false。 |
tcp transport共享通用網(wǎng)絡(luò)設(shè)置。
local transport
這在JVM內(nèi)做集成測試時(shí)非常有用。 當(dāng)使用NodeBuilder#local(true)時(shí)會自動啟用。
?
補(bǔ)充說明:
Gateway
Gateway是一種存儲集群中各節(jié)點(diǎn)元數(shù)據(jù)(meta data)的狀態(tài)方式,這里的元數(shù)據(jù)主要用來記錄所有的索引在創(chuàng)建時(shí)各自的設(shè)置和明確的類型映射。每次當(dāng)元數(shù)據(jù)改變,比如一個(gè)索引被加入或被刪除,這些變化都會通過gateway存儲起來。當(dāng)集群啟動時(shí),這些狀態(tài)將會從gateway中讀取并應(yīng)用。
gateway.type
gateway類型,默認(rèn)是local,也是es官方強(qiáng)烈建議的。
gateway.recover_after_nodes
在多少個(gè)節(jié)點(diǎn)啟動后,允許數(shù)據(jù)恢復(fù)進(jìn)程啟動,默認(rèn)是1
gateway.recover_after_time
設(shè)置數(shù)據(jù)恢復(fù)進(jìn)程初始化的超時(shí)時(shí)間,默認(rèn)是5分鐘
gateway.expected_nodes
設(shè)置在集群中的多少個(gè)節(jié)點(diǎn)啟動后馬上開始數(shù)據(jù)恢復(fù)進(jìn)程(不用等到gateway.recover_after_time這個(gè)屬性設(shè)置的時(shí)間到)
?? Recovery Throttling
這里的設(shè)置是用來控制分片分配的進(jìn)程,當(dāng)各節(jié)點(diǎn)間進(jìn)行初始化恢復(fù)、索引拷貝分配、再次負(fù)載均衡,或再增加或去掉節(jié)點(diǎn)的時(shí)候。
cluster.routing.allocation.node_initial_primaries_recoveries
初始化數(shù)據(jù)恢復(fù)時(shí),并發(fā)恢復(fù)線程的個(gè)數(shù),默認(rèn)為4。
cluster.routing.allocation.node_concurrent_recoveries
添加刪除節(jié)點(diǎn)或負(fù)載均衡時(shí)并發(fā)恢復(fù)線程的個(gè)數(shù),默認(rèn)為4
indices.recovery.max_size_per_sec
設(shè)置數(shù)據(jù)恢復(fù)時(shí)限制的帶寬,默認(rèn)為0,表示無限制。
indices.recovery.concurrent_streams
這個(gè)參數(shù)來限制從其它分片恢復(fù)數(shù)據(jù)時(shí)最大同時(shí)打開并發(fā)流的個(gè)數(shù),默認(rèn)為5
?? Discovery
discovery.zen.minimum_master_nodes
設(shè)置這個(gè)參數(shù)來保證集群中的節(jié)點(diǎn)可以知道其它N個(gè)有master資格的節(jié)點(diǎn)。默認(rèn)為1,對于大的集群來說,可以設(shè)置大一點(diǎn)的值(2-4)。
discovery.zen.ping.timeout
設(shè)置集群中自動發(fā)現(xiàn)其它節(jié)點(diǎn)時(shí)ping連接超時(shí)時(shí)間,默認(rèn)為3秒,對于比較差的網(wǎng)絡(luò)環(huán)境可以高點(diǎn)的值來防止自動發(fā)現(xiàn)時(shí)出錯(cuò)
discovery.zen.ping.multicast.enabled
設(shè)置是否打開多播來發(fā)現(xiàn)來發(fā)現(xiàn)節(jié)點(diǎn),默認(rèn)是true
discovery.zen.ping.unicast.hosts
設(shè)置集群中master節(jié)點(diǎn)的初始列表,可以通過這些節(jié)點(diǎn)來自動發(fā)現(xiàn)新加入集群的節(jié)點(diǎn)。
轉(zhuǎn)載于:https://my.oschina.net/u/1024514/blog/467761
總結(jié)
以上是生活随笔為你收集整理的elasticsearch文档-modules的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 38Exchange 2010升级到Ex
- 下一篇: 获取日志$6到$NF的字段