簡介
ElasticSearch是一個基于Lucene的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎从铲,基于RESTful web接口。Elasticsearch是用Java開發(fā)的澄暮,并作為Apache許可條款下的開放源碼發(fā)布名段,是當前流行的企業(yè)級搜索引擎阱扬。設計用于云計算中,能夠達到實時搜索伸辟,穩(wěn)定麻惶,可靠,快速信夫,安裝使用方便窃蹋。
基礎概念
-
Cluster(集群)
cluster(集群)是一個或者多個節(jié)點的集合,它們一起保存數(shù)據(jù)并且提供所有節(jié)點聯(lián)合索引以及搜索功能静稻。集群存在一個唯一的名字且默認為 “elasticsearch”脐彩。這個名字非常重要,因為如果節(jié)點安裝時通過它自己的名字加入到集群中的話姊扔,那么一個節(jié)點只能是一個集群中的一部分惠奸。
請確保您在不同環(huán)境中不要重復使用相同的集群名字,否則您可能最終會將節(jié)點加入到了錯誤的集群中恰梢。 -
Node(節(jié)點)
node(節(jié)點)是一個單獨的服務器佛南,它是集群的一部分,存儲數(shù)據(jù)嵌言,參與集群中的索引和搜索功能嗅回。像一個集群一樣,一個節(jié)點通過一個在它啟動時默認分配的一個隨機的 UUID(通用唯一標識符)名稱來識別摧茴。如果您不想使用默認名稱您也可自定義任何節(jié)點名稱绵载。 -
Index(索引)
index(索引)是具有稍微類似特征文檔的集合。類似關系型數(shù)據(jù)庫中庫的概念苛白。 -
Type(類型)
在 Index(索引)中娃豹,可以定義一個或多個類型。一個類型是索引中一個邏輯的種類/分區(qū)购裙,它的語義完全取決于您自己懂版。類似關系型數(shù)據(jù)庫中表的概念。 -
Document(文檔)
document(文檔)是索引信息的基本單位躏率。該文檔可以使用json來表示躯畴。類似關系型數(shù)據(jù)庫中記錄的概念。 -
Shards (分片 )
索引可以存儲大量數(shù)據(jù)薇芝,可以超過單個節(jié)點的硬件限制蓬抄。例如,十億個文檔占用了 1TB 的磁盤空間的單個索引可能不適合放在單個節(jié)點的磁盤上夯到,并且從單個節(jié)點服務請求會變得很慢嚷缭。
為了解決這個問題,Elasticsearch 提供了把 Index(索引)拆分到多個 Shard(分片)中的能力黄娘。在創(chuàng)建索引時峭状,您可以簡單的定義 Shard(分片)的數(shù)量克滴。 -
Replicas(副本)
為了在 shard或node 故障的情況下提供高可用性和容錯性。所以提供了shard的副本功能优床。
總而言之劝赔,每個索引可以被拆分成多個分片,一個索引可以設置 0 個(沒有副本)或多個副本胆敞。開啟副本后着帽,每個索引將有主分片(被復制的原始分片)和副本分片(主分片的副本)。分片和副本的數(shù)量在索引被創(chuàng)建時都能夠被指定移层。在創(chuàng)建索引后仍翰,您也可以在任何時候動態(tài)的改變副本的數(shù)量,但是不能夠改變分片數(shù)量观话。
默認情況下予借,Elasticsearch 中的每個索引分配了 5 個主分片和 1 個副本,這也就意味著如果您的集群至少有兩個節(jié)點的話频蛔,您的索引將會有 5 個主分片和另外 5 個副本分片(1 個完整的副本)灵迫,每個索引共計 10 個分片。
下載安裝
前提條件:Elasticsearch 是使用 Java 構(gòu)建的晦溪,并且至少需要 Java 8 才能運行瀑粥。 只支持 Oracle 的 Java 和 OpenJDK。在所有 Elasticsearch 節(jié)點和客戶端上應使用相同的 JVM 版本三圆。
cd /opt
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.3.tar.gz #使用wget命令下載
tar -zxvf elasticsearch-6.2.3.tar.gz
cd elasticsearch-6.2.3
#當我們不進行任何配置的時候運行下面的命令就可以啟動一個單節(jié)點的集群狞换。
#當我們在輸出信息中看到started的時候就表示啟動成功了。
#我們可以在瀏覽器地址欄中輸入http://localhost:9200就可以看到相關的信息舟肉。
# 在后面加 -d 參數(shù)可以后臺啟動
./bin/elasticsearch
集群配置
以下我使用三個節(jié)點(192.168.10.104修噪、192.168.10.105、192.168.10.106)來組成一個elasticsearch集群
我們使用scp命令把tar包復制到集群中另外的兩個節(jié)點上度气,并進行解壓操作割按。
scp elasticsearch-6.2.3.tar.gz root@cn05:/opt
scp elasticsearch-6.2.3.tar.gz root@cn06:/opt
首先我們先配置cn04(192.168.10.104)節(jié)點膨报。
配置文件在config目錄下
我們只需配置elasticsearch.yml文件即可磷籍。
cd /opt/elasticsearch-6.2.3/
vim config/elasticsearch.yml
#在文件中添加以下內(nèi)容
cluster.name: elasticsearch_test #集群的名稱。 默認名稱為elasticsearch现柠。
node.name: cn04 #節(jié)點名稱院领。默認情況下,Elasticsearch將使用隨機生成的uuid的第一個字符作為節(jié)點id够吩。
path.data: /var/lib/elasticsearch #數(shù)據(jù)存放目錄比然。默認數(shù)據(jù)目錄是$ES_HOME的子文件夾。
path.logs: /var/log/elasticsearch #日志存放目錄周循。默認日志目錄是$ES_HOME的子文件夾强法。
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 192.168.10.104 #ip
http.port: 9200 #port
node.master: true #標識該節(jié)點為master
discovery.zen.minimum_master_nodes: 2
#保存退出即可万俗。
配置cn05(192.168.10.105)節(jié)點
vim config/elasticsearch.yml
#在文件中添加以下內(nèi)容
cluster.name: elasticsearch_test #集群的名稱。 默認名稱為elasticsearch饮怯。
node.name: cn05 #節(jié)點名稱闰歪。默認情況下,Elasticsearch將使用隨機生成的uuid的第一個字符作為節(jié)點id蓖墅。
path.data: /var/lib/elasticsearch #數(shù)據(jù)存放目錄库倘。默認數(shù)據(jù)目錄是$ES_HOME的子文件夾。
path.logs: /var/log/elasticsearch #日志存放目錄论矾。默認日志目錄是$ES_HOME的子文件夾教翩。
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 192.168.10.105 #ip
http.port: 9200 #port
discovery.zen.ping.unicast.hosts: ["cn04"]
discovery.zen.minimum_master_nodes: 2
配置cn06(192.168.10.106)節(jié)點
vim config/elasticsearch.yml
#在文件中添加以下內(nèi)容
cluster.name: elasticsearch_test #集群的名稱。 默認名稱為elasticsearch贪壳。
node.name: cn06 #節(jié)點名稱饱亿。默認情況下,Elasticsearch將使用隨機生成的uuid的第一個字符作為節(jié)點id闰靴。
path.data: /var/lib/elasticsearch #數(shù)據(jù)存放目錄路捧。默認數(shù)據(jù)目錄是$ES_HOME的子文件夾。
path.logs: /var/log/elasticsearch #日志存放目錄传黄。默認日志目錄是$ES_HOME的子文件夾杰扫。
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 192.168.10.106 #ip
http.port: 9200 #port
discovery.zen.ping.unicast.hosts: ["cn04"]
discovery.zen.minimum_master_nodes: 2
ok,三個節(jié)點全部配置完了膘掰。
當我們啟動cn04節(jié)點的時候啟動不了章姓,出現(xiàn)了幾個Error.
常見的幾個Error信息如下:
- max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
解決辦法:
執(zhí)行命令即可解決:ulimit -n 65536
,不過這只是臨時設置识埋,要想永久生效需要在/etc/security/limits.conf文件中添加配置elasticsearch - nofile 65536
elasticsearch表示用戶名凡伊,在用戶下次打開一個新的會話時才會生效。 - max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
解決方法:
切換到root用戶下窒舟,修改配置文件sysctl.conf
vim /etc/sysctl.conf
添加下面配置:
vm.max_map_count=262144
#保存退出即可
之后執(zhí)行命令:
sysctl -p
- system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
解決辦法:在配置文件中增加如下兩個配置項(我已經(jīng)提前增加進配置文件里了系忙。)
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
- max number of threads [1024] for user [es] likely too low, increase to at least [2048]
解決方法:切換到root用戶,進入limits.d目錄下惠豺,修改90-nproc.conf 配置文件银还。
vim /etc/security/limits.d/90-nproc.conf
#找到如下內(nèi)容:
* soft nproc 1024
#修改為
* soft nproc 2048
解決了以上出現(xiàn)的問題,集群就可以正常啟動洁墙,使用./bin/elasticsearch
命令蛹疯,先啟動cn04節(jié)點,在啟動cn05和cn06兩個節(jié)點热监。
當我們在每個節(jié)點輸出信息中都看到started的時候就表示三個節(jié)點已經(jīng)啟動成功了捺弦。
常用命令
- 我們可以使用命令
curl -XGET 'localhost:9200/_cat/nodes?v&pretty'
獲取集群列表.可以看到有三個節(jié)點的信息。 - 使用命令
curl -XGET 'localhost:9200/_cat/health?v&pretty'
可以查看節(jié)點的健康狀況。當status是green的時候表示是健康的列吼。另外還有yellow和red兩個狀態(tài)表示幽崩。Green 表示一切正常(集群功能齊全), yellow 表示所有數(shù)據(jù)可用寞钥,但是有些副本尚未分配(集群功能齊全)歉铝,red 意味著由于某些原因有些數(shù)據(jù)不可用。注意凑耻,集群是 red太示,它仍然具有部分功能(例如,它將繼續(xù)從可用的分片中服務搜索請求)香浩,但是您可能需要盡快去修復它类缤,因為您已經(jīng)丟失數(shù)據(jù)了。 - 使用命令
curl -XGET 'localhost:9200/_cat/indices?v&pretty'
列出所有索引邻吭。 - 使用命令
curl -XPUT 'localhost:9200/customer?pretty&pretty'
創(chuàng)建一個名為 “customer” 的索引餐弱。 - 使用命令
curl -XPUT 'localhost:9200/customer/external/1?pretty&pretty' -d' { "name": "John Doe" }'
創(chuàng)建一條簡單的文檔到 customer 索引中,“external” 類型囱晴,與一個為 1 的 ID膏蚓。 - 使用命令
curl -XGET 'localhost:9200/customer/external/1?pretty&pretty'
檢索我們剛剛索引的文檔。 - 使用命令
curl -XDELETE 'localhost:9200/customer?pretty&pretty'
刪除剛才創(chuàng)建的索引畸写。
更多的命令可以到官網(wǎng)去學習驮瞧。
elasticsearch只是elastic stack家族中的一個開源框架,家族成員中還有l(wèi)ogstash枯芬、kibana等论笔。了解更多信息的話就可以去官網(wǎng)看看。
有一個中文文檔分享給大家http://cwiki.apachecn.org/pages/viewpage.action?pageId=4260364
END