1、分佈式ELK平臺java
ELK的介紹:node
ELK 是什麼?web
Sina、餓了麼、攜程、華爲、美團、freewheel、暢捷通 、新浪微博、大講臺、魅族、IBM...... 這些公司都在使用 ELK!ELK!ELK!數據庫
ELK居然重複了三遍,是個什麼鬼?json
ELK 其實並非一款軟件,而是一整套解決方案,是三個軟件產品的首字母縮寫vim
這三款軟件都是開源軟件,一般是配合使用,並且又前後歸於 Elastic.co 公司名下,故被簡稱爲 ELK瀏覽器
ELK 能作什麼?安全
ELK組件在海量日誌系統的運維中,可用於解決:服務器
ELK 是什麼樣子的?架構
ELK 是什麼樣子的?
ELK 是什麼樣子的?
2、Elasticsearch介紹
Elasticsearch是什麼?
ElasticSearch 是一個基於 Lucene 的搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於 RESTful API 的 web 接口。
Elasticsearch 是用Java開發的,並做爲Apache許可條款下的開放源碼發佈,是當前流行的企業級搜索引擎。設計用於雲計算中,可以達到實時搜索,穩定,可靠,快速,安裝使用方便。
Elasticsearch主要特色:
Elasticsearch(簡稱ES)沒有什麼?
ES相關概念:
Node: 裝有一個 ES 服務器的節點。
Cluster: 有多個Node組成的集羣
Document: 一個可被搜素的基礎信息單元
Index: 擁有類似特徵的文檔的集合
Type: 一個索引中能夠定義一種或多種類型
Filed: 是 ES 的最小單位,至關於數據的某一列
Shards: 索引的分片,每個分片就是一個 Shard
Replicas: 索引的拷貝
ES 與關係型數據庫的對比:
在 ES 中,文檔歸屬於一種 類型 (type) ,而這些類型存在於索引 (index) 中,類比傳統關係型數據庫
DB --> Databases --> Tables --> Rows --> Columns
關係型 --> 數據庫 --> 表 --> 行 --> 列
ES --> Indices --> Types --> Documents --> Fields
ES --> 索引 --> 類型 --> 文檔 --> 域(字段)
ES 與關係型數據庫的對比:
Elasticsearch架構圖:
3、Elasticsearch集羣安裝
安裝思路:
安裝步驟:
步驟 1:設置 ip 與主機名稱對應關係
配置 /etc/hosts
192.168.4.11 node1
步驟 2:安裝 JDK
Elasticsearch 要求至少 Java 7,通常推薦使用 OpenJDK 1.8,配置好安裝源之後,咱們先解決依賴關係
yum install -y java-1.8.0-openjdk
步驟 3:安裝 ES
rpm –ivh elasticsearch-2.3.4-1.noarch
步驟 4:修改配置文件
elasticsearch.yml
network.host: 0.0.0.0 //修改後監控範圍爲全部網段主機
步驟 5:啓動服務,設置自啓動
systemctl enable elasticsearch
systemctl start elasticsearch
驗證:
netstat –ltunp
可以看到 9200,9300 被監聽
經過瀏覽器或 curl 訪問 9200 端口
curl http://192.168.4.11:9200/
{
"name" : "node1",
"cluster_name" : "my-es",
"version" : {
"number" : "2.3.4",
...... ...... ......
"build_snapshot" : false,
"lucene_version" : "5.5.0"
},
"tagline" : "You Know, for Search「
}
課堂練習:
1> 準備 1 臺虛擬機
2> 部署 elasticsearch 第一個節點
3> 訪問 9200 端口查看是否安裝成功
ES 集羣配置:
ES 集羣配置也很簡單,只須要對配置文件作少許的修改便可,其餘步驟和單機徹底一致
1> ES 集羣配置文件
cluster.name: my-es
node.name: node1
network.host: 0.0.0.0
discovery.zen.ping.unicast.hosts: ["node1", "node2","node3"]
2> 集羣中的全部節點要相互可以 ping 通,要在全部集羣機器上配置 /etc/hosts 中的主機名與 ip 對應關係;集羣中全部機器都要安裝 java 環境
cluster.name 集羣名稱配置要求徹底一致
node.name 爲當前節點標識,應配置本機的主機名
discovery 爲集羣節點機器,不須要所有配置
3> 配置完成之後啓動全部節點服務(有可能會有必定的延時,須要等待幾十秒)
4> 驗證集羣,使用 ES 內置字段 _cluster/health
curl http://192.168.4.11:9200/_cluster/health?pretty
{
"cluster_name" : "my-es",
"status" : "green",
...... ...... ......
"number_of_nodes" : 5,
"number_of_data_nodes" : 5,
...... ...... ......
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
5> 返回字段解析
"status「 : 」green「 集羣狀態,綠色爲正常,黃色表示有問題但不是很嚴重,紅色表示嚴重故障
「number_of_nodes」 : 5, 表示集羣中節點的數量
"number_of_data_nodes" : 5,
...... ...... ......
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
課堂練習:
一共安裝 5 臺虛擬機
在全部機器中部署 ES
啓動服務查看驗證集羣狀態
4、ES 插件的安裝與使用
ES 經常使用插件:
head 插件:
kopf 插件
是一個ElasticSearch的管理工具,它提供了對ES集羣操做的API
bigdesk 插件
是elasticsearch的一個集羣監控工具,能夠經過它來查看es集羣的各類狀態,如:cpu、內存使用狀況,索引數據、搜索狀況,http鏈接數等
ES 插件安裝、查看
查看安裝的插件:
/usr/share/elasticsearch/bin/plugin list
安裝插件:
/usr/share/elasticsearch/bin/plugin install ftp://192.168.4.254/head.zip //相似yum源的第一種安裝方式
/usr/share/elasticsearch/bin/plugin install file:///tmp/kopf.zip //相似yum源的第二種安裝方式
這裏必須使用 url 的方式進行安裝,若是文件在本地,咱們也須要使用 file:// 的方式指定路徑,例如文件在/tmp/xxx 下面,咱們要寫成 file:///tmp/xxx 刪除使用 remove 指令
ES head 插件
ES kopf 插件
ES bigdesk 插件
############################################################
課堂練習:
ES集羣安裝:
環境要求:6臺機器;5臺裝ES 名稱min{1..5} 內存:1G;1臺裝kibana和logstash 名稱min6 內存:4G
第一步:全部機器都安裝java環境
# yum list |grep java //過濾出java版本,安裝要求至少1.7以上版本
# for i in min{1..6};do ssh ${i} 'yum -y install java-1.8.0-openjdk';done //批量安裝命令,前提密鑰已經傳到各個機子上面了,不然打斷,具體查看ansible裏面將密鑰傳遞到各個被管理機子方法
第二步:全部機器都安裝es集羣環境
# for i in min{2..6};do scp -r elasticsearch-2.3.4.rpm ${i}:/opt;done //將es包批量傳到被管理機器上
# for i in min{2..6};do ssh ${i} 'cd /opt;rpm -ivh elasticsearch-2.3.4.rpm';done //在被管理主機上批量安裝es包
第三步:更改主節點機器的es服務的配置文件
# rpm -qc elasticsearch //查詢es服務配置文件位置
# vim /etc/elasticsearch/elasticsearch.yml //配置文件行要頂格,格式要求很嚴格
17 cluster.name: my-min1 //定義集羣名
23 node.name: min1 //節點主機名,填寫本機自身的hostname名字
54 network.host: 0.0.0.0 //監控的主機爲全部網段主機
68 discovery.zen.ping.unicast.hosts: ["min1", "min2","min3"] //配置集羣的節點主機,不須要所有配置
第四步:將主節點機器es服務的配置文件傳給從節點主機,並關閉、卸載全部節點主機的防火牆
# for i in min{2..5};do scp -r elasticsearch.yml $i:/etc/elasticsearch/ ;done //將主節點機器配置文件傳到從節點主機配置文件對應位置,以便批量更改
# for i in min{1..5};do ssh $i 'systemctl stop firewalld';done //批量關閉防火牆
# for i in min{1..5};do ssh $i 'systemctl mask firewalld';done //批量卸載防火牆
第五步:批量更改從節點機器的es服務的配置文件裏面的節點主機名
# for i in min{2..5};do ssh $i 'sed -i "s/^\(node.name: \).*/\1$HOSTNAME/" /etc/elasticsearch/elasticsearch.yml';done //批量將從節點主機es服務配置文件裏面的節點主機名字改成主機自己名字
第六步:更改節點主機解析地址
# vim /etc/hosts //將節點主機解析地址寫入主機文件,否則啓動是解析報錯
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.4.1 min1
192.168.4.2 min2
192.168.4.3 min3
192.168.4.4 min4
192.168.4.5 min5
192.168.4.6 min6
# for i in min{2..6};do scp -r hosts $i:/etc/;done
# for i in min{1..5};do ssh $i 'systemctl start elasticsearch';done //批量啓動es服務
# for i in min{2..5};do ssh $i 'systemctl status elasticsearch';done //查看節點主機的es服務啓動狀態
第七步:驗證://真機上瀏覽器訪問查看到已鏈接的節點主機
http://192.168.4.1:9200/_cluster/health?pretty
主節點機器min1:
主節點機器min2:
主節點機器min3:
主節點機器min4:
主節點機器min5:
主節點機器min6: //節點機器6沒有開啓,因此沒有狀態,沒法鏈接
ES插件安裝:
# tar -xf elk.tar
# cd /usr/share/elasticsearch/bin/
# ./plugin list
# ./plugin install file:///opt/elk/elasticsearch-head-master.zip
# ./plugin install file:///opt/elk/elasticsearch-kopf-master.zip
# ./plugin install file:///opt/elk/bigdesk-master.zip
驗證:
http://192.168.4.1:9200/_plugin/head
http://192.168.4.1:9200/_plugin/kopf
http://192.168.4.1:9200/_plugin/bigdesk
############################################