引言
一伐蒋、ES中的基本概念
cluster
代表一個集群宵膨,集群中有多個節(jié)點,其中有一個為主節(jié)點诸狭,這個主節(jié)點是可以通過選舉產(chǎn)生的券膀,主從節(jié)點是對于集群內(nèi)部來說的君纫。
es
的一個概念就是去中心化,字面上理解就是無中心節(jié)點芹彬,這是對于集群外部來說的蓄髓。因為從外部來看es
集群,在邏輯上是個整體舒帮,你與任何一個節(jié)點的通信和與整個es
集群通信是相同的会喝。
shards
代表索引分片,es
可以把一個完整的索引分成多個分片玩郊,這樣的好處是可以把一個大的索引拆分成多個肢执,分布到不同的節(jié)點上。構(gòu)成分布式搜索译红。分片的數(shù)量只能在索引創(chuàng)建前指定预茄,并且索引創(chuàng)建后不能更改。
replicas
代表索引副本侦厚,es
可以設(shè)置多個索引的副本耻陕,副本的作用一是提高系統(tǒng)的容錯性,當某個節(jié)點某個分片損壞或丟失時可以從副本中恢復(fù)刨沦。二是提高es
的查詢效率淮蜈,es
會自動對搜索請求進行負載均衡。
recovery
代表數(shù)據(jù)恢復(fù)或叫數(shù)據(jù)重新分布已卷,es
在有節(jié)點加入或退出時會根據(jù)機器的負載對索引分片進行重新分配梧田,掛掉的節(jié)點重新啟動時也會進行數(shù)據(jù)恢復(fù)。
river
代表es
的一個數(shù)據(jù)源侧蘸,也是其它存儲方式(如:數(shù)據(jù)庫)同步數(shù)據(jù)到es
的一個方法裁眯。它是以插件方式存在的一個es
服務(wù),通過讀取river
中的數(shù)據(jù)并把它索引到es
中讳癌,官方的river
有couchDB
的穿稳,RabbitMQ
的,Twitter
的晌坤,Wikipedia
的逢艘。
gateway
代表es
索引快照的存儲方式,es
默認是先把索引存放到內(nèi)存中骤菠,當內(nèi)存滿了時再持久化到本地硬盤它改。gateway
對索引快照進行存儲,當這個es
集群關(guān)閉再重新啟動時就會從gateway
中讀取索引備份數(shù)據(jù)商乎。es
支持多種類型的gateway
央拖,有本地文件系統(tǒng)(默認),分布式文件系統(tǒng),Hadoop
的HDFS
和amazon
的s3
云存儲服務(wù)鲜戒。
discovery.zen
代表es
的自動發(fā)現(xiàn)節(jié)點機制专控,es
是一個基于p2p
的系統(tǒng),它先通過廣播尋找存在的節(jié)點遏餐,再通過多播協(xié)議來進行節(jié)點之間的通信伦腐,同時也支持點對點的交互。
Transport
代表es
內(nèi)部節(jié)點或集群與客戶端的交互方式失都,默認內(nèi)部是使用tcp
協(xié)議進行交互蔗牡,同時它支持http
協(xié)議(json
格式)、thrift
嗅剖、servlet
辩越、memcached
、zeroMQ
等的傳輸協(xié)議(通過插件方式集成)信粮。
二黔攒、部署環(huán)境
采用三臺CentOS7.3
部署ElasticSearch
集群,部署ElasticSearch
集群就不得不提索引分片强缘,以下是索引分片的簡單介紹督惰。
系統(tǒng) | 節(jié)點名 | IP |
---|---|---|
CentOS7.3 | els1 | 172.18.68.11 |
CentOS7.3 | els2 | 172.18.68.12 |
CentOS7.3 | els3 | 172.18.68.13 |
ES
集群中索引可能由多個分片構(gòu)成,并且每個分片可以擁有多個副本旅掂。通過將一個單獨的索引分為多個分片赏胚,我們可以處理不能在一個單一的服務(wù)器上面運行的大型索引,簡單的說就是索引的大小過大商虐,導(dǎo)致效率問題觉阅。
不能運行的原因可能是內(nèi)存也可能是存儲。由于每個分片可以有多個副本秘车,通過將副本分配到多個服務(wù)器典勇,可以提高查詢的負載能力。
三叮趴、部署Elasticsearch集群
1. 安裝JDK
Elasticsearch
是基于Java
開發(fā)的一個Java
程序割笙,運行在Jvm
中,所以第一步要安裝JDK
yum install -y java-1.8.0-openjdk-devel
2. 下載ElasticSearch
ElasticSearch Download 是ELasticSearch
的中文官方站點眯亦。
下載您所需要的版本伤溉,我這里是elasticsearch-6.4.2-linux-x86_64.tar.gz
[root@hadoop1 ~]# tar -zxvf elasticsearch-6.4.2-linux-x86_64.tar.gz
# 因為執(zhí)行./bin/elasticsearch -d需要非root用戶,因此需要創(chuàng)建elastic用戶
[root@hadoop1 ~]# adduser elastic
# 修改elastic用戶擁有root權(quán)限
[root@hadoop1 ~]# vim /etc/sudoers
# 添加權(quán)限
elastic ALL=(ALL) ALL
:wq!保存
#授權(quán)
[root@hadoop1 ~]# chmod 775 elasticsearch-6.4.2
[root@hadoop1 ~]# chown -R elastic:elastic elasticsearch-6.4.2
[root@hadoop1 ~]# mv elasticsearch-6.4.2 /home/elastic/
[root@hadoop1 ~]# su - elastic
[elastic@hadoop1 ~]$ cd
[elastic@hadoop1 ~]$ ll
drwxrwxr-x 8 elastic elastic 4096 Sep 26 2018 elasticsearch-6.4.2
3. 配置目錄
安裝完畢后會生成很多文件妻率,包括配置文件乱顾、日志文件等等,下面幾個是最主要的配置文件路徑:
# ES的配置文件
/etc/elasticsearch/elasticsearch.yml
# JVM相關(guān)的配置舌涨,內(nèi)存大小等等
/etc/elasticsearch/jvm.options
# 日志系統(tǒng)定義
/etc/elasticsearch/log4j2.properties
# 數(shù)據(jù)的默認存放位置
/var/lib/elasticsearch
4. 創(chuàng)建用于存放數(shù)據(jù)與日志的目錄
數(shù)據(jù)文件會隨著系統(tǒng)的運行飛速增長糯耍,所以默認的日志文件與數(shù)據(jù)文件的路徑不能滿足我們的需求扔字,那么手動創(chuàng)建日志與數(shù)據(jù)文件路徑囊嘉,可以使用NFS
(Network File System
)温技、可以使用Raid
(磁盤陣列)等等方便以后的管理與擴展。
mkdir {logs,data}
5. 集群配置
集群配置中最重要的兩項是node.name
與network.host
扭粱,每個節(jié)點都必須不同舵鳞。其中node.name
是節(jié)點名稱,主要是在Elasticsearch
自己的日志加以區(qū)分每一個節(jié)點信息琢蛤。
discovery.zen.ping.unicast.hosts
是集群中的節(jié)點信息蜓堕,可以使用IP
地址、可以使用主機名(必須可以解析)博其。
vim /home/elastic/elasticsearch-6.4.2/config/elasticsearch.yml
cluster.name: your-self-cluster
node.name: es-node1 # 節(jié)點名稱套才,僅僅是描述名稱,用于在日志中區(qū)分
path.data: /home/ozan/elasticsearch-6.4.2/data # 數(shù)據(jù)的默認存放路徑
path.logs: /home/ozan/elasticsearch-6.4.2/logs # 日志的默認存放路徑
network.host: 192.168.0.1 # 當前節(jié)點的IP地址
http.port: 9200 # 對外提供服務(wù)的端口慕淡,9300為集群服務(wù)的端口
discovery.zen.ping.unicast.hosts: ["172.18.68.11", "172.18.68.12","172.18.68.13"]
# 集群個節(jié)點IP地址背伴,也可以使用els、els.shuaiguoxia.com等名稱峰髓,需要各節(jié)點能夠解析
discovery.zen.minimum_master_nodes: 2 # 為了避免腦裂傻寂,集群節(jié)點數(shù)最少為 半數(shù)+1
在最后加上這兩句,要不然携兵,外面瀏覽器就訪問不了哈
http.cors.enabled: true
http.cors.allow-origin: "*"
6. JVM配置
由于Elasticsearch
是Java
開發(fā)的疾掰,所以可以通過/etc/elasticsearch/jvm.options
配置文件來設(shè)定JVM
的相關(guān)設(shè)定。如果沒有特殊需求按默認即可徐紧。
不過其中還是有兩項最重要的-Xmx
1g
與-Xms
1g
JVM的最大最小內(nèi)存静檬。如果太小會導(dǎo)致Elasticsearch
剛剛啟動就立刻停止,太大會拖慢系統(tǒng)本身并级。
vim /etc/elasticsearch/jvm.options
-Xms1g # JVM最大使用內(nèi)存
-Xmx1g # JVM最小使用內(nèi)存
7. 啟動Elasticsearch
由于啟動Elasticsearch
會自動啟動daemon-reload
所以最后一項可以省略巴柿。
[elastic@hadoop1 bin]$ ./elasticsearch -d
查看elasticsearch
的logs
:
8. 測試
Elasticsearch
提供了http
接口調(diào)用,所以直接使用curl
命令就可以查看到一些集群相關(guān)的信息死遭。
可以使用curl命令來獲取集群的相關(guān)的信息
_cat:代表查看信息
nodes:為查看節(jié)點信息广恢,默認會顯示為一行,所以就用?preety讓信息更友好的顯示
?preety:讓輸出信息更友好的顯示