一、ElasticSearch介紹
- 一個采用RESTful API標准的高擴展性的和高可用性的實時性分析的全文搜索工具
- 基於Lucene[開源的搜索引擎框架]構建
- ElasticSearch是一個面向文檔類型的數據庫
- es為非關系型數據,存儲非結構化的數據
二、ElasticSearch概念
1.節點(node):
- 一個裝有es的服務並且提供故障轉移和擴展的服務器,
- 單獨一個es服務可以存儲數據及搜索功能
- 在集群中一個節點的名稱必須是唯一的
- 如果在集群中,通過節點名稱進行管理
2.集群(cluster):
- 集群就是有多個node組織在一起。共同工作分享整個數據具有負載均衡功能的集群
- 集群里的節點協調工作,共享數據。
- 集群里通過master節點進行集群管理工作
- 集群里通過選舉選出一個matser節點
- 一個集群里只有一個matser節點
- 每一個節點都有成為matser節點的可能
3.索引(Index)
- 索引就是一個擁有幾分相似特征的文檔集合
- 相當於mysql里的database
4.文檔(Document)
- 一個文檔是一個可以被索引的基礎信息單元
- 相當於mysql里的行
- 文檔用json格式來表示
5.類型(type)
- 一個索引中,可以定義一種或者多種數據類型
- 一個類型是你的索引的一個邏輯上的分類/分區
6.字段(field)
- es里的最小單元 相當於數據的某一列
- 類似於json里一個鍵
7.分片(shards)
- es將索引分成若干份 每個部分是一個shards
- 每一個shards存在不同的節點上
- 一個節點上不能存在兩個相同的shards
- 每一個文檔通過文檔id進行hash來確定放在哪一個節點上
- 每一個分片都相當於一個獨立的Lucene實例
8.副本(replicas)
- 索引的一份或者多份拷貝
- 容災作用,防止主分片丟失后,副本分片會作為新的主分片,保證集群的數據完整性
- 提供查詢性能,query的時候,既可以查詢主分片,也可以查詢副本分片
三、ElasticSearch和關系型數據庫對比
關系型數據庫Mysql | 非關系型數據庫es |
---|---|
數據庫 database | 索引 Index |
表tables | 類型 type |
數據行row | 文檔 Documents |
數據列Column | 字段 Fieid |
四、ElasticSearch架構圖
1.Gateway
- gateway是ES數據存儲的格式
- 可以使用hdfs,本地,亞馬遜的s3等多種存儲方式
- 存儲索引信息,集群信息,mapping, 索引碎片信息,以及transaction logs
2.Distributed Lucene Directory
- Lucene框架 es就是基於Lucene框架開發的
- Lucene框架服發現等
3.Index Module
- 創建索引的模塊
4.Search Module
- 搜索模塊
5.Mapping
- 相當於mysql里的schema
6.river
- 從外部獲取異構數據 來創建索引
7.Discovery
- 節點啟動后會互相ping 根據在es.yml配置文件里找到對應的端口
- 進行開始選舉,從各個節點任務的master中選,進行id字典排序,選擇第一個
- 如果各個節點上都沒有認為的master, 那么就從所有節點中選擇
- 如果就一個節點 那么master就是她自己
- ES支持任意數目的集群,通過一個規則,只要所有的節點都遵循同樣的規則,得到的信息都是對等的,選出來的主節點肯定是一致的. 但分布式系統的問題就出在信息不對等的情況,這時候很容易出現腦裂(Split-Brain)的問題,大多數解決方案就是設置一個quorum值,要求可用節點必須大於quorum(一般是超過半數節點),才能對外提供服務。而 Elasticsearch 中,這個quorum的配置就是 discovery.zen.minimum_master_nodes
8.Scriptsing
- 腳本執行功能 對查詢出來的數據進行處理
- 支持多種語言
9.3rdplugins
- 支持安裝第三方插件
10. transport
- 是支持的協議類型 默認使用http進行交互