分佈式系統的可用性與擴展性
- 高可用性
服務可用性:允許有節點停止服務
數據可用性:部分節點丟失,不會丟失數據 - 可擴展性
請求量/數據的不斷增長時,可將數據分佈到其他節點上
Elasticsearch分佈式架構
1.優點:
可對存儲水平擴容
提高系統可用性、部分節點停止服務,整個集羣服務不受影響
2. 分佈式架構
不同集羣通過集羣名來進行區分
一個集羣可有一個及一個以上的節點
文檔(Document)
- elasticsearch 是面向文檔的,文檔是所有可搜索數據的最小單位
- 文檔會被序列化爲JSON格式,保存在elasticsearch中
- 每個文檔都有一個Unique ID,【可自己指定或通過es自動生成】
文檔的元數據
元數據:用於標註文檔的相關信息
- _index :文檔所屬的索引名
- _type:文檔所屬的類型名
- _id:文檔唯一ID
- _source:文檔的原始JSON數據
- _version:文檔的版本信息 【當有大量數據併發讀寫時,版本信息可以解決讀寫衝突問題】
- _score:相關性打分
索引
- index ——索引 是文檔的容器,是一類文檔的結合
index體現了邏輯空間概念:每個索引都有自己的Mapping定義,用於定義包含的文檔的字段名和字段類型
shard體現了物理空間的概念:索引中的數據分散在shard上 - 索引的mapping與settings
mapping 定義文檔字段的類型
setting定義不同的數據分佈
節點
- 節點是一個es的實例
本質是一個JAVA進程
一個機器可運行多個es進行,建議一個機器只運行一個 - 每個節點都有名字
- 每個節點啓動後,會分配一個UID,保存在data目錄
Master-eligible nodes
- 每個節點啓動後,默認是一個master-eligible節點【可設置禁止】
- master-eligible節點可參加選主流程,成爲master節點
- 第一個節點啓動,會自己選舉爲master節點
- 每個節點都保存了集羣狀態,只有master節點可修改集羣的狀態信息
集羣狀態信息,維護了【所有的節點信息、所有的索引及其相關的mapping和setting的信息、分片的路由信息】
data node
可以保存數據的節點,負責保存分片數據
coordinating node
負責接收client請求,將請求分發到合適的績點,最終將結果彙總返回client
每個節點默認起到了coordinating node的職責
分片
- 主分片,解決數據水平擴展,可將數據分佈到集羣內所有節點上
一個分片是一個運行的lucene的實例
主分片數索引創建時指定,不許修改,除非Reindex - 副本,解決數據高可用,分片是主分片的拷貝
副本數可動態調整
增加副本數,可在一定程度上提高服務的可用性