最详细且简单的ElasticSearch (es)集群搭建教程(7.6.2)

107 阅读5分钟

前言

在当今数据密集的时代,对数据的快速检索和高效管理变得至关重要。Elasticsearch(ES)是一个高度可扩展的开源全文搜索和分析引擎,它允许你实时地存储、搜索和分析大量数据。它被广泛用于各种应用,如日志和事件数据分析、实时应用监控、全文搜索等。本教程将引导您如何在Linux环境下部署一个基本的Elasticsearch集群。

部署Elasticsearch集群涉及到多个步骤,从软件的下载和安装到配置和优化,每一个步骤都需要细心的操作来确保系统的稳定和高效。通过本教程,我们将详细介绍如何在多台机器上配置和启动Elasticsearch服务,以及如何进行基本的集群健康检查和状态监控。

我们将从下载和安装Elasticsearch开始,接着会涉及到配置文件的修改,如jvm.optionselasticsearch.yml,这些配置将直接影响到集群的性能和行为。此外,我们还将介绍如何在集群的每个节点上设置和启动服务,以及如何通过简单的命令行工具检查和验证集群的状态。

本教程适用于需要在服务器集群上部署Elasticsearch的系统管理员、开发人员和技术爱好者。无论您是Elasticsearch的新手还是有一定经验的用户,都能从本教程中找到有用的信息来帮助您构建和维护Elasticsearch集群。

让我们开始吧,一步步构建您的Elasticsearch集群,以满足您的企业或个人项目需求。

环境准备

  • 关闭防火墙
  • 新建普通用户lbs
  • 阿里云时钟同步服务器
  • 配置免密登陆
  • 永久关闭selinux
  • 永久关闭swap分区
  • 永久调整句柄数和进程限制
  • 永久调整虚拟内存区域限制
  • 配置xsyncxcall同步脚本
  • 配置jdk8环境

环境准备可以参考我下面的博文:

centos防火墙常用命令

centos新建普通用户

centos系统时间同步

centos配置免密登录

centos关闭SElinux

centos关闭swap分区

centos调整句柄数和进程限制

centos调整虚拟内存区域限制

centos配置xsync和xcall同步脚本

centos安装jdk8

集群规则

说明:

  1. 除特别说明外,本文的所有操作均在node-1节点、使用me这个非root用户执行
  2. 命令中出现的IP,均需要替换为自己集群中的IP【必须】
  3. 命令中出现的/home/lbs/software路径,可选择替换为自定义路径【可选】
节点名称IP
node-110.0.0.87
node-210.0.0.81
node-310.0.0.82

正式安装

  1. 下载资源包,并解压到指定安装路径

    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
    
  2. 配置jvm.options文件

    vim /home/lbs/software/elasticsearch/config/jvm.options
    # 修改内容如下(默认值为1g,根据服务器资源设置即可):
    -Xms4g
    -Xmx4g
    
  3. 配置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.namediscovery.seed_hostscluster.initial_master_nodes的要一一对应

  4. 创建存储数据的data和日志logs目录

    mkdir -p /home/lbs/software/elasticsearch/data
    mkdir -p /home/lbs/software/elasticsearch/logs
    
  5. 分发elasticsearch文件夹到集群中的其他机器上

    xsync /home/lbs/software/elasticsearch
    
  6. 分别登录到其他的两台机器上,修改/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

验证

启动后,需多等待一会儿

  1. 查看各节点日志信息最后的部分是否有报错

    tail -fn 200 /home/lbs/software/elasticsearch/logs/my-application.log
    
  2. 查看各节点信息

    curl -X GET "10.0.0.87:9200"
    curl -X GET "10.0.0.81:9200"
    curl -X GET "10.0.0.82:9200"
    
  3. 查看集群状态信息

    [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
    }
    
  4. 查看集群节点信息

    [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

  1. 下载资源包kibana-7.6.2-linux-x86_64.tar.gz

    https://artifacts.elastic.co/downloads/kibana/kibana-7.6.2-linux-x86_64.tar.gz
    
  2. 上传资源包到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
    
  3. 修改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"
    
  4. 执行以下命令创建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
    
  5. 启动kibana

    /home/lbs/software/kibana/bin/manage_script.sh start
    
  6. 查看kibana状态

    /home/lbs/software/kibana/bin/manage_script.sh status
    
  7. 浏览器访问10.0.0.87:5601

    image.png

  8. 停止kibana【可选】

    /home/lbs/software/kibana/bin/manage_script.sh stop
    

安装IK分词器

  1. 下载资源包

    https://github.com/infinilabs/analysis-ik/releases/download/v7.6.2/elasticsearch-analysis-ik-7.6.2.zip
    
  2. 上传到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
    
  3. 重启es使分词器生效

  4. 登录kibana,执行下面命令验证

    # 智能分词
    GET /_analyze
    {
      "text": "中华人民共和国国歌",
      "analyzer": "ik_smart"
    }
    
    # 最细粒度分词
    GET /_analyze
    {
      "text": "中华人民共和国国歌",
      "analyzer": "ik_max_word"
    }
    

    image.png

    image.png