1. 什么是ElasticSearch
1.1 概念及特點
-
Elasticsearch和MongoDB/Redis/Memcache一樣,是非關(guān)系型數(shù)據(jù)庫。是一個接近實時的搜索平臺,從索引這個文檔到這個文檔能夠被搜索到只有一個輕微的延遲,企業(yè)應(yīng)用定位:采用Restful API標準的可擴展和高可用的實時數(shù)據(jù)分析的全文搜索工具。
-
可拓展:支持一主多從且擴容簡易,只要cluster.name一致且在同一個網(wǎng)絡(luò)中就能自動加入當前集群;本身就是開源軟件,也支持很多開源的第三方插件。
-
高可用:在一個集群的多個節(jié)點中進行分布式存儲,索引支持shards和復(fù)制,即使部分節(jié)點down掉,也能自動進行數(shù)據(jù)恢復(fù)和主從切換。
-
數(shù)據(jù)存儲的最小單位是文檔,本質(zhì)上是一個JSON 文本:
1.2 ElasticSearch適用場景概述
-
維基百科,類似百度百科,全文檢索,高亮,搜索推薦
-
The Guardian(國外新聞網(wǎng)站),類似搜狐新聞,用戶行為日志(點擊,瀏覽,收藏,評論)+社交網(wǎng)絡(luò)數(shù)據(jù)(對某某新聞的相關(guān)看法),數(shù)據(jù)分析,給到每篇新聞文章的作者,讓他知道他的文章的公眾反饋(好,壞,熱門,垃圾,鄙視,崇拜)
-
Stack Overflow(國外的程序異常討論論壇),IT問題,程序的報錯,提交上去,有人會跟你討論和回答,全文檢索,搜索相關(guān)問題和答案,程序報錯了,就會將報錯信息粘貼到里面去,搜索有沒有對應(yīng)的答案
-
GitHub(開源代碼管理),搜索上千億行代碼
-
電商網(wǎng)站,檢索商品
-
國內(nèi):站內(nèi)搜索(電商,招聘,門戶,等等),IT系統(tǒng)搜索(OA,CRM,ERP,等等),數(shù)據(jù)分析(ES熱門的一個使用場景)
2. 安裝ElasticSearch
2.1 下載安裝包
官網(wǎng)下載地址:
https://www.elastic.co/cn/downloads/past-releases
2.2 環(huán)境說明
//系統(tǒng)版本
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
//關(guān)閉防火墻
[root@localhost ~]# systemctl stop firewalld && systemctl disable firewalld
[root@localhost ~]# sed -i '7s/enforcing/disabled/g' /etc/selinux/config
[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce
Permissive
2.3 創(chuàng)建es的用戶
[root@localhost ~]# groupadd es
[root@localhost ~]# useradd -g es -s /bin/bash -md /home/es es
2.4 創(chuàng)建es存儲位置
//存放在/var/es(根據(jù)實際需求)
[root@localhost ~]# mkdir /var/es && cd /var/es
[root@localhost es]# mkdir data && mkdir log
[root@localhost es]# chown -Rf es:es /var/es/
2.5 安裝es
//創(chuàng)建文件夾,并將安裝包上傳到這里
[root@localhost ~]# mkdir /usr/local/es && cd /usr/local/es
//上傳安裝包
[root@localhost src]# ls
debug elasticsearch-6.8.20.tar.gz kernels
//解壓安裝包
[root@localhost src]# tar xf elasticsearch-6.8.20.tar.gz -C /usr/local/es/
[root@localhost src]# cd /usr/local/es/
[root@localhost es]# chown -Rf es:es /usr/local/es/elasticsearch-6.8.20/
2.5 修改配置文件
//編輯配置文件
[root@localhost es]# vim /usr/local/es/elasticsearch-6.8.20/config/elasticsearch.yml
//取消cluster.name前的#號注釋,改成自己起的名字。(注意前面的數(shù)字代表行號)
17 cluster.name: my-application
//node.name取消#號
23 node.name: node-1
//設(shè)置path.data,取消#號,改為如下的
33 path.data: /var/es/data
//設(shè)置path.logs,取消#號,改為如下的
37 path.logs: /var/es/log
//network.host取消#號,改為0.0.0.0(允許所有ip訪問)
55 network.host: 0.0.0.0
//取消http.port#
59 http.port: 9200
//在文件的最后添加以下配置
89 bootstrap.memory_lock: false
90 bootstrap.system_call_filter: false
2.6 系統(tǒng)優(yōu)化
//修改文件1
[root@localhost es]# vi /etc/security/limits.conf
末尾添加
62 es soft nofile 65536
63 es hard nofile 65536
64 es soft nproc 4096
65 es hard nproc 4096
//修改文件2
[root@localhost es]# vim /etc/sysctl.conf
末尾添加
11 vm.max_map_count = 655360
[root@localhost es]# sysctl -p
vm.max_map_count = 655360
2.7 安裝jdk環(huán)境
//上傳jdk安裝包
[root@localhost src]# ls
debug elasticsearch-6.8.20.tar.gz jdk-8u131-linux-x64.tar.gz kernels
//解壓安裝包
[root@localhost src]# tar xf jdk-8u131-linux-x64.tar.gz -C /usr/local/
//添加環(huán)境變量
[root@localhost src]# vim /etc/profile
末尾添加
78 #JAVA_HOME
79 export JAVA_HOME=/usr/local/java
80 #JRE_HOME
81 export JRE_HOME=/usr/local/java/jre
82 #CALSSPATH
83 export CLASSPATH=$CLASSPATH:${JAVA_HOME}/lib:${JRE_HOME}/lib
84 #PATH
85 export PATH=$PATH:${JAVA_HOME}/bin:${JRE_HOME}/bin
//重命名
[root@localhost ~]# mv /usr/local/jdk1.8.0_131/ /usr/local/java
[root@localhost ~]# source /etc/profile
[root@localhost ~]# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
2.8 切換es用戶啟動數(shù)據(jù)庫
[root@localhost ~]# su es
[es@localhost root]$ /usr/local/es/elasticsearch-6.8.20/bin/elasticsearch &
2.9 systemctl管理
2.10 訪問
用瀏覽器訪問ip:9200(安裝的設(shè)備9200端口),看到如下的說明安裝成功:
3. kibana
3.1 kibana介紹
Kibana
是一個開源的分析與可視化平臺,設(shè)計出來用于和Elasticsearch
一起使用的。你可以用kibana
搜索、查看存放在Elasticsearch
中的數(shù)據(jù)。Kibana
與Elasticsearch
的交互方式是各種不同的圖表、表格、地圖等,直觀的展示數(shù)據(jù),從而達到高級的數(shù)據(jù)分析與可視化的目的。Elasticsearch
、Logstash
和Kibana
這三個技術(shù)就是我們常說的ELK技術(shù)棧,可以說這三個技術(shù)的組合是大數(shù)據(jù)領(lǐng)域中一個很巧妙的設(shè)計。一種很典型的MVC思想,模型持久層,視圖層和控制層。Logstash擔任控制層的角色,負責(zé)搜集和過濾數(shù)據(jù)。Elasticsearch
擔任數(shù)據(jù)持久層的角色,負責(zé)儲存數(shù)據(jù)。而我們這章的主題Kibana
擔任視圖層角色,擁有各種維度的查詢和分析,并使用圖形化的界面展示存放在Elasticsearch中的數(shù)據(jù)。
3.2 安裝kibana
官網(wǎng)下載地址:
https://www.elastic.co/cn/downloads/past-releases#kibana
3.3 上傳安裝包
//使用rz命令或者xftp上傳
[root@localhost src]# ls
debug elasticsearch-6.8.20.tar.gz jdk-8u131-linux-x64.tar.gz kernels kibana-6.8.20-linux-x86_64.tar.gz
3.4 解壓文件
[root@localhost src]# tar xf kibana-6.8.20-linux-x86_64.tar.gz -C /usr/local/
3.5 修改配置文件
//下列的序號為行號
[root@localhost src]# vim /usr/local/kibana-6.8.20-linux-x86_64/config/kibana.yml
7 server.host: "192.168.5.55" //ES服務(wù)器主機地址
28 elasticsearch.hosts: ["http://192.168.5.55:9200"] //ES服務(wù)器地址
3.6 啟動
[root@localhost src]# cd /usr/local/kibana-6.8.20-linux-x86_64/
[root@localhost kibana-6.8.20-linux-x86_64]# ./bin/kibana &
3.7 瀏覽器訪問
http://192.168.5.55:5601/app/kibana
4. Elasticsearch高可用集群
4.1 ES是如何解決高并發(fā)
ES是一個分布式全文檢索框架,隱藏了復(fù)雜的處理機制,核心內(nèi)容 分片機制、集群發(fā)現(xiàn)、分片負載請求路由。
4.2 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ù)。
4.3 ES為什么要實現(xiàn)集群
ES集群中索引可能由多個分片構(gòu)成,并且每個分片可以擁有多個副本。通過將一個單獨的索引分為多個分片,我們可以處理不能在一個單一的服務(wù)器上面運行的大型索引,簡單的說就是索引的大小過大,導(dǎo)致效率問題。不能運行的原因可能是內(nèi)存也可能是存儲。由于每個分片可以有多個副本,通過將副本分配到多個服務(wù)器,可以提高查詢的負載能力。
ES集群核心原理分析:
-
每個索引會被分成多個分片shards進行存儲,默認創(chuàng)建索引是分配5個分片進行存儲。
每個分片都會分布式部署在多個不同的節(jié)點上進行部署,該分片成為primary shards。
注意:索引的主分片primary shards定義好后,后面不能做修改。 -
為了實現(xiàn)高可用數(shù)據(jù)的高可用,主分片可以有對應(yīng)的備分片replics shards,replic shards分片承載了負責(zé)容錯、以及請求的負載均衡。
注意: 每一個主分片為了實現(xiàn)高可用,都會有自己對應(yīng)的備分片,主分片對應(yīng)的備分片不能存放同一臺服務(wù)器上(單臺ES沒有備用分片的)。主分片primary shards可以和其他replics shards存放在同一個node節(jié)點上。
在往主分片服務(wù)器存放數(shù)據(jù)時候,會對應(yīng)實時同步到備用分片服務(wù)器:
但是查詢時候,所有(主、備)都進行查詢。
主的可以存放副的:
Node1 :P1+P2+R3組成了完整 的數(shù)據(jù)! 分布式存儲
ES核心存放的核心數(shù)據(jù)是索引!
如果ES實現(xiàn)了集群的話,會將單臺服務(wù)器節(jié)點的索引文件使用分片技術(shù),分布式存放在多個不同的物理機器上。
分片就是將數(shù)據(jù)拆分成多臺節(jié)點進行存放
在ES分片技術(shù)中,分為主(primary)分片、副(replicas)分片。這樣做是為了容錯性
5. 高可用ES集群部署
5.1 環(huán)境說明
系統(tǒng)環(huán)境:
[es@localhost root]$ cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
主機:
IP地址 | 節(jié)點 | 數(shù)據(jù)庫版本 | 可視化工具 |
---|---|---|---|
192.168.5.55 | node1(主) | elasticsearch-6.8.20 | kibana-6.8.20 |
192.168.5.56 | node2 | elasticsearch-6.8.20 | |
192.168.5.100 | node3 | elasticsearch-6.8.20 |
5.2 安裝過程
需要準備好三臺主機已經(jīng)安裝好ES數(shù)據(jù)庫,安裝的過程請查看目錄第二節(jié)
注:關(guān)閉防火墻
5.3 修改配置文件
修改192.168.5.55配置文件
[root@localhost config]# pwd
/usr/local/es/elasticsearch-6.8.20/config
[root@localhost config]# vim elasticsearch.yml
注:前面的序號為行號,標記多少行
前面省略……
17 cluster.name: myes //集群名稱,保證三臺集群名字相同
23 node.name: node-1 //當前節(jié)點名稱,集群內(nèi)節(jié)點名字不能相同
33 path.data: /var/es/data //數(shù)據(jù)存放目錄
37 path.logs: /var/es/log //日志存放目錄
55 network.host: 0.0.0.0 //主機
59 http.port: 9200 //端口號
68 discovery.zen.ping.unicast.hosts: ["192.168.5.55", "192.168.5.56","192.168.5.100"] //多個服務(wù)集群ip
72 discovery.zen.minimum_master_nodes: 1 //最少主節(jié)點數(shù)量
89 bootstrap.memory_lock: false //添加以下兩行,開放網(wǎng)絡(luò)權(quán)限
90 bootstrap.system_call_filter: false
剩下的兩臺利用scp命令遠程覆蓋配置文件
注意:記得修改節(jié)點名稱,集群內(nèi)節(jié)點名字不能相同
[root@localhost ~]# cd /usr/local/es/elasticsearch-6.8.20/config/
[root@localhostconfig]# scp elasticsearch.yml root@192.168.5.56:/usr/local/es/
elasticsearch-6.8.20/config/
5.4 啟動es數(shù)據(jù)庫
三臺依次啟動
[root@localhost config]# su es
[es@localhost config]$ /usr/local/es/elasticsearch-6.8.20/bin/elasticsearch &
5.5 集群測試
通過瀏覽器訪問如下地址查看集群啟動狀態(tài)
192.168.5.55:9200/_cat/health?v
//查看集群信息
[root@localhost config]# curl 192.168.5.55:9200/_cat/nodes
192.168.5.56 14 96 1 0.05 0.15 0.13 mdi - node-2
192.168.5.100 14 90 0 0.00 0.06 0.06 mdi - node-3
192.168.5.55 23 97 2 0.00 0.04 0.05 mdi * node-1 帶*號表示主節(jié)點
//檢查分片是否正常
[root@localhost ~]# curl 192.168.5.55:9200/_cat/shards
.kibana_task_manager 0 p STARTED 2 6.8kb 192.168.5.55 node-1
.kibana_task_manager 0 r STARTED 2 6.8kb 192.168.5.56 node-2
.kibana_1 0 p STARTED 4 19.8kb 192.168.5.56 node-2
.kibana_1 0 r STARTED 4 19.8kb 192.168.5.100 node-3
.monitoring-kibana-6-2023.05.15 0 p STARTED 2194 747.9kb 192.168.5.55 node-1
.monitoring-kibana-6-2023.05.15 0 r STARTED 2194 680.4kb 192.168.5.100 node-3
.monitoring-kibana-6-2023.05.12 0 p STARTED 1180 420kb 192.168.5.56 node-2
.monitoring-kibana-6-2023.05.12 0 r STARTED 1180 420kb 192.168.5.100 node-3
.monitoring-es-6-2023.05.15 0 p STARTED 28065 14mb 192.168.5.55 node-1
.monitoring-es-6-2023.05.15 0 r STARTED 28065 14mb 192.168.5.56 node-2
.monitoring-es-6-2023.05.12 0 p STARTED 11490 5.6mb 192.168.5.55 node-1
.monitoring-es-6-2023.05.12 0 r STARTED 11490 5.6mb 192.168.5.100 node-3
P 表示primar shard 主分片,前面的數(shù)字表示分片數(shù)量
R 表示 replica shard 副本分片
5.6 驗證ES集群故障轉(zhuǎn)移
注意實心星號的是主節(jié)點,我們嘗試將 192.168.5.55 節(jié)點服務(wù)關(guān)閉,驗證,主節(jié)點是否進行重新選舉,并再次啟動 192.168.5.55,看看是否變成候選節(jié)點:
[root@localhost ~]# ps -ef | grep /usr/local/es/ela
[root@localhost ~]# kill -9 3184
[es@localhost config]$ curl 192.168.5.56:9200/_cat/nodes
192.168.5.56 21 96 1 0.03 0.02 0.05 mdi - node-2
192.168.5.100 24 95 1 0.30 0.10 0.07 mdi * node-3
發(fā)現(xiàn) 192.168.5.100變成了主節(jié)點,然后啟動 192.168.5.55,驗證其是否變成了候選節(jié)點
[root@localhost ~]# curl 192.168.5.55:9200/_cat/nodes
192.168.5.100 27 94 2 0.08 0.08 0.07 mdi * node-3
192.168.5.55 26 96 1 0.97 0.25 0.12 mdi - node-1
192.168.5.56 22 96 1 0.03 0.03 0.05 mdi - node-2
6. 配置kibana監(jiān)控集群
6.1 修改配置文件
安裝過程請查看目錄第三部分
修改配置kibana配置文件
[root@localhost ~]# vim /usr/local/kibana-6.8.20-linux-x86_64/config/kibana.yml
7 server.host: "0.0.0.0" //服務(wù)器主機地址
//集群ip端口號
28 elasticsearch.hosts: ["http://192.168.5.55:9200","http://192.168.5.56:9200",
"http://192.168.5.100:9200"]
[root@localhost ~]# cd /usr/local/kibana-6.8.20-linux-x86_64/bin/
[root@localhost bin]# ./bin/kibana &
6.2 訪問
成功監(jiān)控到整個集群
6.3 驗證分片
三個節(jié)點正常的時候下面顯示是16個分片
Node1:5個
Node2: 6個
Node3:5個
模擬故障:
現(xiàn)在把node1節(jié)點關(guān)掉,正常應(yīng)該是node1節(jié)點的五個分片會重新分配給剩下的兩個節(jié)點,使總數(shù)到達16個分片文章來源:http://www.zghlxwxcb.cn/news/detail-440092.html
[root@localhost kibana-6.8.20-linux-x86_64]# netstat –tunlp
[root@localhost kibana-6.8.20-linux-x86_64]# kill -9 2036
驗證成功,可以看到node1掛了,剩下的兩個節(jié)點各自分配了8個分片文章來源地址http://www.zghlxwxcb.cn/news/detail-440092.html
到了這里,關(guān)于Elasticsearch數(shù)據(jù)庫的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!