一、ES相關知識
ES基於RESTful web接口並且構建在Apache lucene之上的開源分佈式搜索引擎。同時ES是一個分佈式文檔數據庫,每個字段均可被索引、每個字段數據均可被搜索,能夠橫向擴展數以百計的服務器存儲以及處理PB級的數據。
1. 可以在極短時間內存儲、搜索和分析大量的數據
2. 通常作爲具有複雜搜索場景下的核心發動機
ES高可用且高擴展。一方面同升級硬件完成系統擴展,稱爲垂直或向上擴展,另一方面,則增加更過的服務器來完成系統擴展,稱爲水平擴展或橫向擴展。
ES架構組成:
Gateway,代表ES索引的持久化存儲方式。ES默認將數據存入內存,當內存滿後在持久化到Gateway中。當ES集羣關閉或重啓後,從Geteway裏讀取索引數據。
Distributed Lucene Directory,Lucene裏的索引文件組成的目錄,負責管理索引文件,包括數據的讀入、寫入以及索引的添加合併等。
River,代表數據源,以插件形式存在於ES。
Mapping,映射。
Search Module,搜索模塊、支持搜索常用操作。
Index Module,索引模塊、支持索引常用操作。
Discovery,負責集羣的master節點發現。其發現機制:默認實現方式是單播和多播的形式,同時支持點對點的實現。
Scripting,腳本語言。
Transport,代表ES內部節點,跟集羣的客戶端交互。
RESTful Style API,通過RESTful方式實現的API。
3rd plugins,第三方插件。
Java(Netty),開發框架。
JMX,監控。
二、ES的搭建
搜索引擎,作用:更快的找到我們所要的,方式:生成索引,步驟:(1)把資料編號(2)把每篇資料的內容切詞(3)處理成“詞--》資料”的關係
Lucene:搜索引擎的類庫,由Java開發
solr:開源項目,底層基於Lucene實現的搜索引擎產品
ElasticSearch:開源項目,提供了RESTful API(直接通過HTTP協議收發請求和響應,接口清晰簡單)的服務
1. Linux單節點配置ES(安裝ES版本6.4.1)
(1)添加用戶
groupadd es
useradd es -g es -p password(指定密碼)
chown -R es:es elasticsearch-6.4.1(賦予該目錄下所有文件可操作權限)
(2)切換用戶,並修改配置問健
su es
vi elasticsearch.yml 修改配置文件參數值 network.host:Linux的ip
(3)啓動ES
前端啓動:cd elasticsearch-6.4.1
./bin/elasticsearch
後端啓動:cd elasticsearch-6.4.1
./bin/elasticsearch -d
本地測試:curl -X 127.0.0.1:9200
注意:啓動過程中可能會顯示報錯
解決辦法:
ERROR: [3] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
解決辦法:
編輯 /etc/security/limits.conf,追加以下內容;
* soft nofile 65536
* hard nofile 65536
此文件修改後需要重新登錄用戶,纔會生效
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解決辦法:
編輯 /etc/sysctl.conf,追加以下內容:
vm.max_map_count=655360
保存後,執行:
sysctl -p
[3]: max number of threads [2048] for user [tongtech] is too low, increase to at least [4096]
錯誤原因:啓動檢查未通過
elasticsearch用戶的最大線程數太低
解決辦法:
vim /etc/security/limits.conf
* soft nproc 4096
* hard nproc 4096
2. ES的集羣部署
1)時鐘同步
# 設置本地時間
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 集羣時間日期同步NTP
yum install ntp
ntpdate pool.ntp.org
2)修改hosts文件
vim /etc/hosts
192.168.10.129 ES_01
192.168.10.130 ES_02
192.168.10.131 ES_03
3)關閉防火牆
4)修改elasticsearch.yml配置文件,如下:
cluster.name: es-group #集羣名稱,可以自行修改
node.name: node-1 #節點名稱,自行修改
network.host: 172.27.1.1 #主機地址,這裏寫本機IP
# 是否參與master選舉和是否存儲數據;這裏根據你們具體部署的機子自行調整,下面默認爲master節點
node.master: true # 節點類型,若三臺一般部署爲 master[true] client[true] data[false]
node.data: true # 節點類型,若三臺一般部署爲 master[true] client[false] data[true]
# master選舉最少的節點數,這個一定要設置爲N/2+1,其中N是:具有master資格的節點的數量,而不是整個集羣節點個數
discovery.zen.minimum_master_nodes: 2
# discovery ping的超時時間,擁塞網絡,網絡狀態不佳的情況下設置高一點
# discovery.zen.ping.timeout: 3s
# [單播] 注意,分佈式系統整個集羣節點個數N要爲奇數個!!
discovery.zen.ping.unicast.hosts: ["172.27.1.1:9300", "172.27.1.2:9300", "172.27.1.3:9300"]
5)啓動ES集羣
3. 安裝Kibana插件
1)修改kibana.yml配置文件,如下:
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://192.168.10.129:9200"
2)啓動Kibana
bin/kibana,瀏覽器訪問http://IP:5601