前言
在当今数据密集的时代,对数据的快速检索和高效管理变得至关重要。Elasticsearch(ES)是一个高度可扩展的开源全文搜索和分析引擎,它允许你实时地存储、搜索和分析大量数据。它被广泛用于各种应用,如日志和事件数据分析、实时应用监控、全文搜索等。本教程将引导您如何在Linux环境下部署一个基本的Elasticsearch集群。
部署Elasticsearch集群涉及到多个步骤,从软件的下载和安装到配置和优化,每一个步骤都需要细心的操作来确保系统的稳定和高效。通过本教程,我们将详细介绍如何在多台机器上配置和启动Elasticsearch服务,以及如何进行基本的集群健康检查和状态监控。
我们将从下载和安装Elasticsearch开始,接着会涉及到配置文件的修改,如jvm.options
和elasticsearch.yml
,这些配置将直接影响到集群的性能和行为。此外,我们还将介绍如何在集群的每个节点上设置和启动服务,以及如何通过简单的命令行工具检查和验证集群的状态。
本教程适用于需要在服务器集群上部署Elasticsearch的系统管理员、开发人员和技术爱好者。无论您是Elasticsearch的新手还是有一定经验的用户,都能从本教程中找到有用的信息来帮助您构建和维护Elasticsearch集群。
让我们开始吧,一步步构建您的Elasticsearch集群,以满足您的企业或个人项目需求。
环境准备
- 关闭防火墙
- 新建普通用户
lbs
- 阿里云时钟同步服务器
- 配置免密登陆
- 永久关闭
selinux
- 永久关闭
swap
分区 - 永久调整句柄数和进程限制
- 永久调整虚拟内存区域限制
- 配置
xsync
、xcall
同步脚本 - 配置
jdk8
环境
环境准备可以参考我下面的博文:
集群规则
说明:
- 除特别说明外,本文的所有操作均在
node-1
节点、使用me这个非root用户执行- 命令中出现的IP,均需要替换为自己集群中的IP【必须】
- 命令中出现的
/home/lbs/software
路径,可选择替换为自定义路径【可选】
节点名称 | IP |
---|---|
node-1 | 10.0.0.87 |
node-2 | 10.0.0.81 |
node-3 | 10.0.0.82 |
正式安装
-
下载资源包,并解压到指定安装路径
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.2-linux-x86_64.tar.gz tar -zxvf elasticsearch-7.6.2-linux-x86_64.tar.gz -C /home/lbs/software mv /home/lbs/software/elasticsearch-7.6.2 /home/lbs/software/elasticsearch
-
配置
jvm.options
文件vim /home/lbs/software/elasticsearch/config/jvm.options # 修改内容如下(默认值为1g,根据服务器资源设置即可): -Xms4g -Xmx4g
-
配置
elasticsearch.yml
文件vim /home/lbs/software/elasticsearch/config/elasticsearch.yml # 集群名称,同一集群下每台服务器的名称要一致否则会报错 cluster.name: my-application # 节点名称,集群下每台机的节点名称唯一(举例的机器节点名称设为node-1,其他分别为node-2,node-3) node.name: node-1 # ES数据储存路径(保证该目录存在不存在则报错) path.data: /home/lbs/software/elasticsearch/data # ES运行日志文件路径(保证该目录存在不存在则报错) path.logs: /home/lbs/software/elasticsearch/logs # 外界访问ES ip地址(设置0.0.0.0表示可以通过该机器的任何ip访问) network.host: 0.0.0.0 # ES的访问端口号(不设置则默认为9200) http.port: 9200 # 集群下所有机器的访问ES的url集合 discovery.seed_hosts: ["10.0.0.87:9300", "10.0.0.81:9300", "10.0.0.82:9300"] # 集群下所有节点集合 cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
后续分发到集群中的其他机器上修改配置文件时,要注意
node.name
、discovery.seed_hosts
和cluster.initial_master_nodes
的要一一对应 -
创建存储数据的
data
和日志logs
目录mkdir -p /home/lbs/software/elasticsearch/data mkdir -p /home/lbs/software/elasticsearch/logs
-
分发
elasticsearch
文件夹到集群中的其他机器上xsync /home/lbs/software/elasticsearch
-
分别登录到其他的两台机器上,修改
/home/lbs/software/elasticsearch/config/elasticsearch.yml
中的node.name
配置项为各自的值,要满足上述说过的对应关系。
集群管理
对于es集群的启动、停止都是基于
elasticsearch-cluster.sh
的,请务必先执行创建脚本的命令。
脚本
cat > /home/lbs/software/elasticsearch/bin/elasticsearch-cluster.sh <<EOF
#!/bin/bash
case $1 in
"start")
for i in 10.0.0.87 10.0.0.81 10.0.0.82
do
echo -------------------------------- $i Elasticsearch 启动 ---------------------------
ssh $i "source /etc/profile; /home/lbs/software/elasticsearch/bin/elasticsearch -d"
done
;;
"stop")
for i in 10.0.0.87 10.0.0.81 10.0.0.82
do
echo -------------------------------- $i Elasticsearch 停止 ---------------------------
pid=$(ssh $i "source /etc/profile; ps -ef | grep 'org.elasticsearch.bootstrap.Elasticsearch' | grep -v grep | awk '{print $2}'")
if [[ -z "$pid" ]]
then
echo "Elasticsearch not running on $i"
else
ssh $i "kill -9 $pid"
echo "Elasticsearch stopped on $i"
fi
done
;;
"status")
for i in 10.0.0.87 10.0.0.81 10.0.0.82
do
echo -------------------------------- $i Elasticsearch 状态 ---------------------------
status=$(ssh $i "source /etc/profile; ps -ef | grep 'org.elasticsearch.bootstrap.Elasticsearch' | grep -v grep | awk '{print $2}'")
if [[ -z "$status" ]]
then
echo "Elasticsearch not running on $i"
else
echo "Elasticsearch running on $i with PID(s): $status"
fi
done
;;
*)
echo "Usage: $0 {start|stop|status}"
;;
esac
EOF
chmod +x /home/lbs/software/elasticsearch/bin/elasticsearch-cluster.sh
启动
/home/lbs/software/elasticsearch/bin/elasticsearch-cluster.sh start
提示:
future versions of Elasticsearch will require Java 11; your Java version from [/home/lbs/software/jdk/jre] does not meet this requirement
无需理会,不影响使用
停止
/home/lbs/software/elasticsearch/bin/elasticsearch-cluster.sh stop
验证
启动后,需多等待一会儿
-
查看各节点日志信息最后的部分是否有报错
tail -fn 200 /home/lbs/software/elasticsearch/logs/my-application.log
-
查看各节点信息
curl -X GET "10.0.0.87:9200" curl -X GET "10.0.0.81:9200" curl -X GET "10.0.0.82:9200"
-
查看集群状态信息
[lbs@master logs]$ curl -X GET "http://localhost:9200/_cluster/health?pretty" { "cluster_name" : "my-application", # 集群名称 "status" : "green", # green表示健康 "timed_out" : false, "number_of_nodes" : 3, # 节点数量 "number_of_data_nodes" : 3, "active_primary_shards" : 0, "active_shards" : 0, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 100.0 }
-
查看集群节点信息
[lbs@master logs]$ curl -X GET "http://localhost:9200/_cat/nodes?v&pretty" ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name 10.0.0.82 9 58 0 0.29 0.22 0.17 dilm - node-3 10.0.0.81 10 58 0 0.02 0.11 0.16 dilm - node-2 10.0.0.87 13 64 0 0.19 0.28 0.30 dilm * node-1
安装kibana
-
下载资源包
kibana-7.6.2-linux-x86_64.tar.gz
https://artifacts.elastic.co/downloads/kibana/kibana-7.6.2-linux-x86_64.tar.gz
-
上传资源包到
node-1
机器,并解压到指定安装路径tar -zxvf kibana-7.6.2-linux-x86_64.tar.gz -C /home/lbs/software mv /home/lbs/software/kibana-7.6.2-linux-x86_64 /home/lbs/software/kibana
-
修改
kibana.yml
配置文件vim /home/lbs/software/kibana/config/kibana.yml #配置端口号 server.port: 5601 #配置网络访问地址 server.host: "0.0.0.0" #配置es链接地址(es集群,可以用逗号分隔) elasticsearch.hosts: ["http://10.0.0.87:9200","http://10.0.0.81:9200","http://10.0.0.82:9200"] #配置中文语言界面 i18n.locale: "zh-CN"
-
执行以下命令创建
manage_script.sh
管理脚本cat > /home/lbs/software/kibana/bin/kibana.sh <<EOF #!/bin/bash KIBANA_HOME="/home/lbs/software/kibana" # Kibana安装目录 KIBANA_BIN="$KIBANA_HOME/bin/kibana" # Kibana 可执行文件路径 LOG_FILE_PATH="$KIBANA_HOME/logs" start_kibana() { if pgrep -f "$KIBANA_HOME/src/cli" > /dev/null; then echo "Kibana is already running." else echo "Starting Kibana..." mkdir -p ${LOG_FILE_PATH} nohup $KIBANA_BIN > "${LOG_FILE_PATH}/kibana.log" 2>&1 & echo "Kibana started." fi } stop_kibana() { if pgrep -f "kibana" > /dev/null; then echo "Stopping Kibana..." pkill -f "kibana" echo "Kibana stopped." else echo "Kibana is not running." fi } status_kibana() { if pgrep -f "$KIBANA_HOME/../src/cli" > /dev/null; then PID=$(pgrep -f "$KIBANA_HOME/../src/cli") echo "Kibana is running. PID: $PID" else echo "Kibana is not running." fi } case "$1" in start) start_kibana ;; stop) stop_kibana ;; status) status_kibana ;; *) echo "Usage: $0 {start|stop|status}" exit 1 esac EOF chmod +x /home/lbs/software/kibana/bin/kibana.sh
-
启动
kibana
/home/lbs/software/kibana/bin/manage_script.sh start
-
查看
kibana
状态/home/lbs/software/kibana/bin/manage_script.sh status
-
浏览器访问
10.0.0.87:5601
-
停止
kibana
【可选】/home/lbs/software/kibana/bin/manage_script.sh stop
安装IK
分词器
-
下载资源包
https://github.com/infinilabs/analysis-ik/releases/download/v7.6.2/elasticsearch-analysis-ik-7.6.2.zip
-
上传到
node-1
节点,并解压到es
的插件目录中mkdir -p /home/lbs/software/elasticsearch/plugins/ik unzip -d /home/lbs/software/elasticsearch/plugins/ik elasticsearch-analysis-ik-7.6.2.zip
-
重启
es
使分词器生效 -
登录
kibana
,执行下面命令验证# 智能分词 GET /_analyze { "text": "中华人民共和国国歌", "analyzer": "ik_smart" } # 最细粒度分词 GET /_analyze { "text": "中华人民共和国国歌", "analyzer": "ik_max_word" }