摘要:Elasticsearch(簡稱ES)是一個基于Lucene的開源搜索引擎,它提供了全文搜索、結構化搜索以及分析功能。為了支持大規模數據處理和高效查詢,ES支持集群部署。本文將詳細介紹如何配置ES集群,包括es安裝、節點配置、集群發現、JVM參數調優等。
一、相關概念
集群(Cluster):一個或多個節點組成的集合,共同提供數據存儲和搜索服務。
節點(Node):ES實例運行在一個JVM進程中,稱為一個節點。
索引(Index):文檔的集合,類似于數據庫中的表。
分片(Shard):索引可以被分為多個分片,每個分片是一個Lucene實例,用于存儲數據。
副本(Replica):為了提高查詢性能和容錯性,可以為每個分片創建多個副本。
二、安裝ES
1.下載
https://www.elastic.co/cn/downloads/past-releases/ 或者使用命令: wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.7.1-linux-x86_64.tar.gz 解壓: tar -zxvf elasticsearch-7.7.1-linux-x86_64.tar.gz
2.添加用戶
ES不能使用root啟動,需創建普通用戶 #創建新用戶elasticsearch ,設置用戶組為elasticsearch ,密碼123456 useradd elasticsearch -g elasticsearch -p 123456
3.配置集群
# 新增es目錄 mkdir /data/elasticsearch/data /data/elasticsearch/logs # 修改文件擁有者 chown -R elasticsearch:elasticsearch /data/elasticsearch # 到es目錄的config目錄下修改配置文件 vim ./config/elasticsearch.yml
elasticsearch.yml配置
# 集群名稱 cluster.name: my-application # 節點名稱 node.name: node-1 # 是否有資格被選舉為master,ES默認集群中第一臺機器為主節點 # node.master: true # 是否存儲數據,默認情況下,所有的節點都被認為是數據節點 # node.data: true # 數據目錄 path.data: /data/elasticsearch/data # 日志目錄 path.logs: /data/elasticsearch/logs # 0.0.0.0,表示對外開放,如對特定ip開放則改為指定ip network.host: 0.0.0.0 # 對外服務http端口,默認為9200 http.port: 9200 # 內部節點之間溝通端? transport.tcp.port: 9300 # 集群中 node 節點發現列表 discovery.seed_hosts: ["172.16.130.138", "172.16.130.168", "172.16.130.243"] # 集群初始化那些節點可以被選舉為 master cluster.initial_master_nodes: ["node-1", "node-2", "node-3"] # 解決跨域問題,該配置在elasticsearch-head的時候會用到 http.cors.enabled: true http.cors.allow-origin: "*"
在其它節點的配置文件中你只需要修改:
node.name: node-1
最后修改權限
chown -R elasticsearch:elasticsearch /usr/share/elasticsearch-7.7.1
4.打開防火墻
sudo firewall-cmd --zone=public --add-port=9200/tcp --permanent sudo firewall-cmd --zone=public --add-port=9300/tcp --permanent sudo firewall-cmd --reload
5.啟動
#切換到elasticsearch用戶 su elasticsearch #啟動 ./elasticsearch-7.7.1/bin/elasticsearch #加參數 -d 表示后臺啟動: ./elasticsearch-7.7.1/bin/elasticsearch -d #查看elasticsearch進程 ps aux|grep elasticsearch
6.解決報錯
[1]:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535] ES因為需要大量的創建索引文件,需要大量的打開系統的文件,所以我們需要解除linux系統當中打開文件最大數目的限制,不然ES啟動就會拋錯 sudo vim /etc/security/limits.conf elasticsearch soft nofile 65535 elasticsearch hard nofile 65535 #修改后重啟Linux生效 reboot [2]:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 最大虛擬內存太小,調大系統的虛擬內存 vim /etc/sysctl.conf vm.max_map_count=655360 #執行以下命令生效 sysctl -p
7.其他
查看集群中各個節點的基本情況 http://172.16.130.168:9200/_cat/nodes 查看集群健康狀態: http://172.16.130.168:9200/_cluster/health 調整JVM參數:根據硬件配置和工作負載,調整Elasticsearch的JVM參數以優化性能。 sudo vim ./config/jvm.options -Xms31g -Xmx31g
三、注意事項
所有節點集群名稱必須一致: cluster.name
每個節點必須有一個唯一名字: node.name
開啟每個節點遠程連接: network.host: 0.0.0.0
指定集群中所有節點通信列表:
discovery.seed_hosts: ["172.16.130.138", "172.16.130.168", "172.16.130.243"]
集群初始化那些節點可以被選舉為 master:
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]