ELK 是 elastic 公司旗下三款產品 ElasticSearch 、Logstash 、Kibana 的首字母組合。
ElasticSearch 是一個基於 Lucene 構建的開源,分佈式,RESTful 搜索引擎。
ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。Elasticsearch是用Java開發的,並作爲Apache許可條款下的開放源碼發佈,是當前流行的企業級搜索引擎。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。我們建立一個網站或應用程序,並要添加搜索功能,但是想要完成搜索工作的創建是非常困難的。我們希望搜索解決方案要運行速度快,我們希望能有一個零配置和一個完全免費的搜索模式,我們希望能夠簡單地使用JSON通過HTTP來索引數據,我們希望我們的搜索服務器始終可用,我們希望能夠從一臺開始並擴展到數百臺,我們要實時搜索,我們要簡單的多租戶,我們希望建立一個雲的解決方案。因此我們利用Elasticsearch來解決所有這些問題及可能出現的更多其它問題 --------百度百科
Logstash 傳輸和處理你的日誌、事務或其他數據。
Kibana 將 Elasticsearch 的數據分析並渲染爲可視化的報表。
下載包到服務器 /home/software 目錄下
進行解壓 tar -xf *.gz unzip *.zip
修改配置
ElasticSearch安裝
官網:https://www.elastic.co/downloads 下載包 rz -E 把包傳到服務器或者直接在服務器下載
解壓
啓動 elasticsearch 後臺啓動 elasticsearch -d
因爲elasticsearch是無權限啓動,因此root超管啓存在風險,用普通用戶啓動
增加用戶組:groupadd pz
增加普通用戶 useradd name -g pz所要加的用戶組方便管理) -p pass
添加權限 chown -R 組:名 elasticsearch
切換用戶 su name進行啓動 在elasticsearch的bin目錄下啓動
啓動成功最後一行顯示recovered[0] indices into cluster_state 成功
輸入curl localhost:9200 或curl ip:9200 只要可以訪問就是成功
jps 查看進程或者ps
配置在elasticsearch/config/elasticsearch.yml中配置 IP和PORT 以及集羣名和節點信息
cluster.name: 集羣名稱
node.name: 節點名稱 集羣最少三個不同節點,意思是三太服務器 集羣名相同,節點名不同
network.host: ip
http.port: 9200 端口 沒改過
HEAD插件安裝:基於HTML5編寫的集羣操作和管理工具,可現實集羣拓撲結構,進行一些操作
安裝node 環境基於jdk
創建一個文件與software同級
安裝jdk
安裝node 下載地址https://nodejs.org/en/download/
解壓
進入bin目錄執行npm命令 npm install -g grunt-cli
node -v npm -v gnunt -version 檢查各個版本
安裝head插件
下載包 wget https://github.com/mobz/elasticsearch-head/archive/master.zip 從網上找的
解壓包unzip
在elasticsearch.yml末端下添加兩個命令 開啓http對外服務,讓head插件能夠訪問集羣
http.cors.enabled: true
http.cors.allow-origin: "*"
修改head插件配置文件 Gruntifile.js
connection屬性:options裏面添加 hostname: 'ip', 逗號不能少
完成後配置node的環境變量
在vim /etc/profiel
添加 NODE_HOME=/home/software/node6 裏面的jdk要一致 JAVA_HOME=/home/software/jdk版本
保持 source /etc/profile 配置生效命令
進入head根目錄 啓動 grunt server
出現 Start connect web server on http://ip:9100 成功
若提示Unbale to find local grunt 執行npm install -g grunt
grunt是基於Node.js的項目構建工具,可以進行打包壓縮、測試、執行等等的工作,head插件就是通過grunt啓動
在瀏覽器啓動 若訪問不到可能是沒有開啓對外訪問,在elasticsearch.yml裏面配置
IK中文分詞器安裝
獲取ik安裝包 elasticsearch-analysic-ik-版本.zip
解壓到elasticsearch的plugins的目錄下改名爲ik mv elasticsearch ik
OK
Logstash的安裝基本一致
安裝包放到software,解壓
運行測試 logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}' 收集控制檯打印內容,並抓化成固定格式的字符串在控制檯輸出
運行命令後 隨便輸字符串 等待幾秒 出現像鍵值對一樣的數據就正確了
就是把數據庫數據幫到logstash上了
進入mysql 執行set names utf8; 先編碼一下
mysql數據導入索引(IK分詞器使用)需要安裝jdbc input插件logstash-input-jdbc的包放到logstash的plugins下(沒有就創建)
解壓 這個包的作用就是可以使用logstash從mysql導入數據到路徑在配置文件中指定
logstash啓動加載的文件(導入的數據源制定,導入的屬性指定) 網上找 jdbc.conf 放到bin目錄下
jdbc.sql 一條搜索語句: 表示要把那張表裏的數據導入到IK進行分詞搜索
啓動 logstash -f jdbc.conf 出現數據說明正在導入
集羣搭建在elasticsearch.yml配置文件中
集羣名,節點名 ip, port, 發現節點
discovery.zen.ping.unicast.hosts: ["本ip","其他節點ip"]
discovery.zen.minimum_master_nodes: 這是個數字 用來防止腦裂(就是一臺服務器因爲網絡波動而使集羣中其他節點認爲它宕機了,其實沒宕機,而出現兩個master控制,造成數據不一致現象)的出現 用過半算法(mastere/2+1)防止出現腦裂
筆記
集羣分佈式個高可用在ES中都是默認配置和計算
集羣的分佈式,es的所有數據默認5個分片,每個分片默認一個副本(總共每個分片有2分,一份值主分片,一份是副分片)
集羣配置完成後,啓動所有集羣節點, 分片和副本的數據將會自動計算分配到不同的 節點存儲,只有從少到多的移動,沒有從多到少的移動
分配默認5片,副本默認1片,自動根據集羣節點數量最優的分配,分片越多,節點越多,副本越多,整個集羣的分佈式性能越高,高可用能力越高
配置的自動發現的list和最大的mster數量
集羣的節點角色
master:負責管理集羣,掌握信息元數據(所有的索引的分片數量,副本數量,分片的存儲位置)所有的操作都是通過master完成的
data:數據節點,保存數據,被讀,被寫
負載均衡節點:既不管理集羣,也不存儲數據,只負責請求的轉發,分擔連接的壓力
配置文件中node.master.true 表示主節點能力
node.data:true 表示數據存儲能力
當都是false表示負載均衡
index.number_of_shards:5 默認是5 可以調節,一旦數據已經分片落地,
則不能改變
index.number_of_replicas: 1 值越大高可用能力越高,一旦落地,數據就不能改動
ES的腦裂 最小的master數量可以防止腦裂產生
計算公式:master數/2+1 過半
元數據:描述數據的數據(描述分片的數據)
master通信過程保持元數據一直,網絡波動造成master之間的通信障礙,一旦超時
不管集羣中的master如何出現腦裂的情況,只要按照過半配置
邏輯不是很清晰,存在問題,請百度解決,謝謝。