elasticsearch v7.12.0集群、kibana安装配置教程、拼音搜索、索引迁移reindex

本文详细介绍Elasticsearch 6.3.0的安装步骤,包括JDK环境配置、用户创建、解压与环境变量设置。深入解析elasticsearch.yml配置项,如集群与节点名称、数据与日志路径、内存锁定及网络主机配置。同时,涵盖JVM堆大小调整、文件与线程限制修改,以及sysctl.conf参数优化。最后,提供Kibana安装与启动指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、elasticsearch安装

1 准备工作

2 集群安装

以3节点为例

节点名IP
es01192.168.0.101
es02192.168.0.102
es03192.168.0.103
  • 上传包并解压

    tar -zxvf elasticsearch-7.12.0-linux-x86_64.tar.gz -C /home/elasticsearch/
    tar -zxvf kibana-7.12.0-linux-x86_64.tar.gz -C /home/elasticsearch/
    
  • 修改目录权限

    chown elasticsearch:elasticsearch /home/elasticsearch/elasticsearch-7.12.0
    chmod 777 /home/elasticsearch/elasticsearch-7.12.0
    
  • 修改limits.conf配置文件

    vim /etc/security/limits.conf
    # 配置 elasticsearch用户打开文件最大数(因为es在启动时调用的文件超出普通用户默认打开文件最大数4096,会导致报错)
    # 在文件末尾中增加下面内容
    
    * soft nofile 65536
    * hard nofile 65536
    

    可通过 ulimit命令对上述配置进行热配置(即不需要重启,配置参数即可生效)

  • 修改虚拟内存空间,默认太小

    vim /etc/sysctl.conf
    # 系统虚拟内存默认最大映射数为65530,无法满足ES系统要求,需要调整为262144以上。
    # 在配置文件中改配置 最后一行上加上
    vm.max_map_count=262144
    

    可执行 sysctl -p(立即生效)

  • 修改jvm.options配置文件

    设置jvm堆(heap size)大小。指针压缩功能处于开启状态,当指正压缩功能关闭时,内存指针将是前面所占内存的1.5倍。请根据内存而定;如果系统内存为64g,此处最多配置为28g;如果为32G内存,此处配置16g

    vim config/jvm.options
    
    -xms26g
    -xmx26g
    
  • ES配置

    cd /home/elasticsearch/
    vim elsticsearch-7.12.0/config/elasticsearch.yml
    
    #加入如下配置
    #集群名称
    cluster.name: cluster-es
    #节点名称,每个节点的名称不能重复,三台机器保持不一样
    node.name: es01
    #ip 地址,填入每个节点的ip,填写三台机器的ip
    network.host: 192.168.0.101  
    #是不是有资格主节点
    node.master: true
    node.data: true
    # 设置对外服务的http端口,默认为9200
    http.port: 9200
    # 设置节点间交互的tcp端口,默认是9300
    transport.tcp.port: 9300
    # head 插件需要这打开这两个配置
    http.cors.allow-origin: "*"
    http.cors.enabled: true
    http.max_content_length: 200mb
    #ES7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举 master
    cluster.initial_master_nodes: ["es01", "es02", "es03"]
    #ES7.x 之后新增的配置,节点发现
    discovery.seed_hosts: ["192.168.0.101:9300","192.168.0.102:9300","192.168.0.103:9300"]
    #集群内同时启动的数据任务个数,默认是 2 个
    cluster.routing.allocation.cluster_concurrent_rebalance: 16
    #添加或删除节点及负载均衡时并发恢复的线程个数,默认 4 个
    cluster.routing.allocation.node_concurrent_recoveries: 16
    #初始化数据恢复时,并发恢复线程的个数,默认 4 个
    cluster.routing.allocation.node_initial_primariES_recoveries: 16
    
    
  • ik分词器插件
    将下载的插件放入es下面的plugins文件夹即可。

  • 启动

    #切换用户
    su - elasticsearch
    cd /home/elasticsearch/elsticsearch-7.12.0/bin
    #后台启动,一台一台启动
    ./elasticsearch -d
    
  • 查看启动状态

    # 查看9200和9300端口是否起来
    ss -ntl
    
    #查看集群健康情况
    http://192.168.0.101:9200/_cluster/health
    #集群状态说明
    #green:所有的主分片和副本分片都正常运行。
    #yellow:所有的主分片都正常运行,但有部分副本分片运行不正常。
    #red:主分片没能正常运行
    
    #查看分片情况
    http://192.168.0.101:9200/_cat/shards?v=true&pretty
    
    #查看节点分布情况
    http://192.168.0.101:9200/_cat/nodES?v=true&pretty
    
    #查看索引列表
    http://192.168.0.101:9200/_cat/indicES?v=true&pretty
    

3 其他节点安装

用scp命令将安装包及elasticsearch.yml文件传到其他服务器上

  • 每个节点上按步骤2执行一遍
  • 修改各节点elasticsearch.yml的第5、7行配置即可

4 密码配置

1. 生成证书

# 进入es安装目录
./bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass

# 修改证书文件权限
chmod 644 config/elastic-certificates.p12

2. 将证书拷贝到其他节点

scp config/elastic-certificates.p12 root@192.168.0.102:/home/elasticsearch/elsticsearch-7.12.0/config/

3. 在每台节点的elasticsearch配置文件中开启x-pack验证并重启

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type

重启es

ps -ef|frep elasticsearch 

kill -9 pid

su - elasticsearch
cd bin/
./elasticsearch -d

4. 设置密码

集群启动后,在集群中一个节点上设置密码即可。
想要成功设置密码的话,必须确保集群状态正常才行,否则密码设置会失败。

在es安装目录的bin下执行如下命令,为各类用户分别设置密码:

./elasticsearch-setup-passwords interactive

5. 开机自启配置

编辑elasticsearch.service文件:

vim /etc/systemd/system/elasticsearch.service


[Unit]
Description=elasticsearch 7.12.0

[Service]
Type=forking
#Type:定义启动时的进程行为。它有以下几种值。
#Type=simple:默认值,执行ExecStart指定的命令,启动主进程
#Type=forking:以 fork 方式从父进程创建子进程,创建后父进程会立即退出
#Type=oneshot:一次性进程,Systemd 会等当前服务退出,再继续往下执行

User=elasticsearch 
LimitNOFILE=65536
LimitNPROC=65536
ExecStart=/home/elasticsearch/elasticsearch-7.12.0/bin/elasticsearch -d

[Install]
WantebBy=multi-user.target
systemctl daemon-reload
systemctl start elasticsearch.service
systemctl enable elasticsearch.service

二、Kibana安装

  • 解压kibana-7.12.0-linux-x86_64.tar.gz

    tar -zxvf kibana-7.12.0-linux-x86_64.tar.gz -C /home/elasticsearch/
    
  • 修改配置文件

    cd /home/elasticsearch/kibana-7.12.0
    vim kibana.yml
    
    # 修改如下几处
    server.host: "0.0.0.0"
    elasticsearch.hosts: ["http://192.168.0.101:9200", "http://192.168.0.102:9200", "http://192.168.0.103:9200"]
    # 如果Elasticsearch集群配置了用户名和密码,还需要添加以下行
    elasticsearch.username: "elastic"
    elasticsearch.password: "your_password"
    
  • 启动kibana

    nohup ./kibana &
    
  • 访问kibana
    http://192.168.0.101:5601

三、遇到的问题

  • 从节点无法加入集群?
    检查防火墙

  • 报错with the same id but is a different node instance

    failed to send join request to master [{pros-node-1}{Dhq0h4IHS6GF4MgFwc1Vhw}{w8mXRXG6S6qvSnjHGqrYwQ}{10.45.32.90}{10.45.32.90:10800}],   
    reason [RemoteTransportException[[pros-node-1][10.45.32.90:10800][internal:discovery/zen/join]]; nested: IllegalArgumentException[can't add node {pros-node-2}  
    {Dhq0h4IHS6GF4MgFwc1Vhw}{EttroN0-StienfP37gyLag}  
    {10.45.32.30}{10.45.32.30:10800}, found existing node {pros-node-1}{Dhq0h4IHS6GF4MgFwc1Vhw}{w8mXRXG6S6qvSnjHGqrYwQ}{10.45.32.90}{10.45.32.90:10800}  
     with the same id but is a different node instance]; ] 
    

    因为复制虚拟机时,elsticsearch时,将elsticsearch文件夹下的data文件夹一并复制了。而在前面测试时,data文件夹下已经产生了data数据,于是报上面的错误。

    解决办法:删除elsticsearch文件夹下的data文件夹下的节点数据。

  • 报错Future versions of Elasticsearch will require Java 11; your Java version from [/opt/jdk1.8/jre] does not meet this requirement

    解决办法:修改bin目录下的elasticsearch-env文件,在第37行左右 ES_CLASSPATH=“$ES_HOME/lib/*” 下面加入如下配置,使用ES目录下自带的jdk11:

    # use elasticsearch jdk
    ES_JAVA_HOME="/es/opt/elastic/elasticsearch-7.14.1/jdk"
    

四、拼音搜索

1 拼音插件下载

elasticsearch-analysis-pinyin-7.12.0.zip

2 安装分词器

将拼音插件上传到es安装路径下的plugins目录,解压。

3 新建索引

PUT /milk
{
    "settings": {
      "analysis": {
        "analyzer": {
          "index_pinyin_analyzer": {
            "tokenizer": "index_pinyin_tokenizer"
          },
          "search_pinyin_analyzer": {
            "tokenizer": "search_pinyin_tokenzier"
          }
        },
        "tokenizer": {
          "index_pinyin_tokenizer": {
            "keep_joined_full_pinyin" : "true",
            "lowercase" : "true",
            "none_chinese_pinyin_tokenize" : "false",
            "keep_none_chinese_in_joined_full_pinyin" : "true",
            "keep_original" : "true",
            "keep_none_chinese_together" : "true",
            "remove_duplicated_term" : "false",
            "keep_separate_first_letter" : "false",
            "type" : "pinyin",
            "limit_first_letter_length" : "16",
            "keep_full_pinyin" : "true"
          },
          "search_pinyin_tokenzier": {
            "keep_joined_full_pinyin" : "true",
            "lowercase" : "true",
            "keep_original" : "true",
            "remove_duplicated_term" : "false",
            "keep_separate_first_letter" : "false",
            "type" : "pinyin",
            "limit_first_letter_length" : "16",
            "keep_full_pinyin" : "true"
          }
        }
      }
    },
  "mappings": {
    "properties": {
      "brand":{
        "type": "text",
        "analyzer": "index_pinyin_analyzer",
        "search_analyzer": "search_pinyin_analyzer"
      },
      "series":{
        "type": "text",
        "analyzer": "index_pinyin_analyzer",
        "search_analyzer": "search_pinyin_analyzer"
      },
      "price":{
        "type": "float"
      }
    }
  }
}

4 测试

POST milk/_analyze
{
  "analyzer": "ik_pinyin_analyzer",
  "text": "刘德华"
}

# 批量导入数据
POST _bulk
{"index":{"_index":"milk", "_id":1}}
{"brand":"蒙牛", "series":"特仑苏", "price":60}
{"index":{"_index":"milk", "_id":2}}
{"brand":"蒙牛", "series":"真果粒", "price":40}
{"index":{"_index":"milk", "_id":3}}
{"brand":"华山牧", "series":"华山牧", "price":49.90}
{"index":{"_index":"milk", "_id":4}}
{"brand":"伊利", "series":"安慕希", "price":49.90}
{"index":{"_index":"milk", "_id":5}}
{"brand":"伊利", "series":"金典", "price":49.90}
{"index":{"_index":"milk", "_id":6}}
{"brand":"蒙牛", "series":"特轮苏", "price":60}

# 搜索
GET milk/_search
{
  "query": {
    "match": {
      "series": "telunsu"
    }
  }
}

五、索引数据迁移

1 修改配置

注意:要保证源索引与目的索引的表结构信息一致

在目的 es 集群中配置上源 es 集群的白名单信息

vim elasticsearch.yml
# 在目的集群的elasticsearch.yml文件中增加源es集群的白名单配置
reindex.remote.whitelist: “192.168.0.102:9200”

2 迁移脚本

# 索引数据迁移
POST _reindex
{
  "source": {
    "remote": {
      "host": "http://192.168.0.101:9200",
      "username": "elastic",
      "password": "123456"
    },
    "index": "milk"
  },
  "dest": {
    "index": "milk"
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值