elasticsearch集群搭建及參數詳解

介紹

elasticsearch集群的搭建教程很多。網上一搜都是,但是,搭建不難。更重要的是明白集群原理,性能以及運維知識點。所以,本文將從這些點著重介紹。

配置參數詳解

在elasticsearch配置文件中有以下這些參數,將逐一介紹(其實配置文件中英文描述已經非常清楚):

  • cluster.name
    集群名,自定義集群名,默認為elasticsearch,建議修改,因為低版本多播模式下同一網段下相同集群名會自動加入同一集群,如生產環境這樣易造成數據運維紊亂。
  • node.name
    節點名,同一集群下要求每個節點的節點名不一致,起到區分節點和辨認節點作用
  • node.master
    是否為主節點,選項為true或false,當為true時在集群啟動時該節點為主節點,在宕機或任務掛掉之後會選舉新的主節點,恢復後該節點依然為主節點
  • node.data
    是否處理數據,選項為true或false。負責數據的相關操作
  • path.data
    默認數據路徑,可用逗號分隔多個路徑
  • path.logs
    默認日誌路徑
  • bootstrap.mlockall

    內存鎖,選項為true或false,用來確保用戶在es-jvm中設置的ES_HEAP_SIZE參數內存可以使用一半以上而又不溢出
  • network.host
    對外暴露的host,0.0.0.0時暴露給外網
  • http.port
    對外訪問的端口號,默認為9200,所以外界訪問該節點一般為http://ip:9200/
  • transport.tcp.port
    集群間通信的端口號,默認為9300
  • discovery.zen.ping.unicast.hosts
    集群的ip集合,可指定端口,默認為9300,如 ["192.168.1.101","192.168.1.102"]
  • discovery.zen.minimum_master_nodes
    最少的主節點個數,為了防止腦裂,最好設置為(總結點數/2 + 1)個
  • discovery.zen.ping_timeout
    主節點選舉超時時間設置
  • gateway.recover_after_nodes
    值為n,網關控制在n個節點啟動之後才恢復整個集群
  • node.max_local_storage_nodes
    值為n,一個系統中最多啟用節點個數為n
  • action.destructive_requires_name
    選項為true或false,刪除indices是否需要現實名字

理解主節點、副節點、分片與複製分片

關係

起初創建節點與分片的關係,設置shards=2,replicas=1

elasticsearch集群搭建及參數詳解

elasticsearch節點與分片的關係圖.png


解析

  • node-master主節點
    集群中用於元數據(metadata)的請求處理,比如確定分片位置,索引的新增、刪除請求分配等
  • node
    包括client node和 data node
1. `client node` node.master=true,node.data=false 用於轉發請求,起到平衡負載的作用
2. `data node` node.master=flase,node.data=true
> 節點上保存了數據分片。它負責數據相關操作,比如分片的 CRUD,以及搜索和整合操作。這些操作都比較消耗 CPU、內存和 I/O 資源
  • shards 分片
    在設置索引時默認(5)或自己設置的分片數量,即indices(1)--shards(n),而每插入一條數據都會在唯一主分片中,即Document(n)--shards(1)
  • replicas 複製分片
    同樣在設置索引時會默認(1)或自定義複製分片數量,該數量對應關係為每個主分片對應的複製分片,即shards(1)--replicas(n)

要點

  1. 當集群健康狀態為yello表示存在複製分片未被分配(unassigned)到節點中(或者分配的複製節點個數少於設置的個數),這時如果硬件有故障將無法找回數據。
  2. 在同一個節點上既保存原始數據又保存副本是沒有意義的,因為一旦失去了那個節點,我們也將丟失該節點上的所有副本數據。
  3. 主分片數量一般是在建立索引時就固定的,一般是不作修改的,如果減少分片數量意味著數據將要丟失
  4. 複製分片一定意義上可以起到負載的功能,提高數據的冗餘量。但如果只是在相同節點數目的集群上增加更多的副本分片並不能提高性能,因為每個分片從節點上獲得的資源會變少。 你需要增加更多的硬件資源來提升吞吐量

節點與分片模型

同樣設置shards=2,replicas=1

elasticsearch集群搭建及參數詳解

elasticsearch節點與分片可分配關係圖.png


elasticsearch集群搭建及參數詳解

elasticsearch節點與分片正常存儲關係圖.png


分佈式文檔存儲的關係原理

這個在官網指南中寫的很清楚了。

集群搭建

配置集群

修改配置文件

# vi /etc/elasticsearch/elasticsearch.yml

# 統一的集群名
cluster.name: syncwt-es
# 當前節點名
node.name: syncwt-es-node-1
# 對外暴露端口使外網訪問
network.host: 0.0.0.0
# 對外暴露端口
http.port: 9200
# ...還有很多可以設置,這些是基礎的。具體看上面的配置參數說明

重啟並查看集群健康狀態:

# sudo systemctl start elasticsearch.service
# curl -XGET 'http://localhost:9200/_cat/health?v'

集群可視化插件安裝elasticsearch-head

# cd ${elasticsearch_HOME}
# ./plugin install mobz/elasticsearch-head

頁面訪問效果(單節點):
http://119.29.248.199:9200/_plugin/head/

elasticsearch集群搭建及參數詳解

elasticsearch_head效果圖.png


注意

  1. 集群中es的版本應保持一致,最好內網部署,外網不是很穩定。
  2. 可用容器(如docker)封裝統一部署集群各節點以保持配置一致性
  3. 可在一臺機器上運行多個節點來構建集群,只是性能會和機器配置相關

總結

  1. 集群中節點選型策略。node-data節點(隨著數據增加而增加),note-client(隨著查詢壓力而增加)節點
  2. 集群節點數量上升時,多關注配置參數,如gateway.recover_after_nodes等,會帶來很多效率的提高
  3. 當集群數量較大時,建議橫向擴展集群。單純增加es節點的內存和CPU不會有很大提升,建議多增加節點
elasticsearch集群搭建及參數詳解


分享到:


相關文章: