Elasticsearch核心技术与实践一

1,099 阅读5分钟

二、安装上手

1. Elasticsearch的安装和简单配置

  1. Elasticsearch非常容易在个人电脑上搭建环境 image image
  2. 下载Elasticsearch安装包elasticsearch.cn/download/
  3. Elasticsearch还有官方的Docker镜像,我们可以在Docker中很容易的启动它

2. Elasticsearch的文件目录结构

目录配置文件描述
bin脚本启动,包括启动Elasticsearch,安装插件。运行统计数据等
configelasticsearch.yml集群配置文件,user,role based 相关配置
JDKJava运行环境
datapath.data数据文件
libJava类库
logspath.log日志文件
modules包含所有ES模块
plugins包含所有已安装插件

2.1 JVM配置

  1. 修改 config/jvm.options,7.1版本的默认设置时 1 GB
  2. XmxXms设置成一样
  3. Xmx不要超过机器内存的50%
  4. 不要超过30GB - [www.elastic.co/blog/a-heap…]

3. 运行Elasticsearch

3.1 启动出现的问题

max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

  1. 每个进程最大同时打开文件数太小,可通过下面2个命令查看当前数量
ulimit -Hn
ulimit -Sn
  1. 修改/etc/security/limits.conf文件,增加配置,用户退出后重新登录生效
*               soft    nofile          65536
*               hard    nofile          65536

max number of threads [3818] for user [es] is too low, increase to at least [4096]

  1. 问题同上,最大线程个数太低。修改配置文件/etc/security/limits.conf(和问题1是一个文件),增加配置
*               soft    nproc           4096
*               hard    nproc           4096
  1. 可通过命令查看
ulimit -Hu
ulimit -Su

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

  1. 修改/etc/sysctl.conf文件,增加配置vm.max_map_count=262144
vi /etc/sysctl.conf
sysctl -p
  1. 执行命令sysctl -p生效

3.2 启动

/opt/module/elasticsearch-7.1.0/bin/elasticsearch
  • 打开浏览器输入:http://192.168.37.130:9200/ image

4. 为Elasticsearch安装插件(我们可以利用插件来实现一些安全策略,来保护我们存储的数据)

image

4.1 查看当前Elasticsearch已经安装的插件

[root@hadoop101 elasticsearch-7.1.0]# bin/elasticsearch-plugin list

4.2 安装analysis-icu(analysis是一个国际化的分词插件)

[root@hadoop101 elasticsearch-7.1.0]# bin/elasticsearch-plugin install analysis-icu

4.3 页面查看安装的插件

http://192.168.37.130:9200/_cat/plugins image

5. 在开发机上运行多个Elasticsearch实例

  • Elasticsearch中一个很大的特色就是以分布式的方式去运行,也就是说你可以在多台机器上去运行多个Elasticsearch实例,这些实例最后组成一个大的集群
  • 我们现在要在本机以一个多实例的方式去运行它,来了解它的机制

5.1 修改config/elasticsearch.yml

# 集群名称
cluster.name: geektime
# 是否锁住内存
bootstrap.memory_lock: false
# 连接地址
network.host: 192.168.2.101
# 候选主节点列表
discovery.seed_hosts: ["192.168.2.101:9301","192.168.2.101:9302","192.168.2.101:9303"]
# 初始化集群主节点列表
cluster.initial_master_nodes: ["node1","node2","node3"]
# 开启跨域访问支持,默认为false
http.cors.enabled: true
# # 跨域访问允许的域名地址,(允许所有域名)以上使用正则
http.cors.allow-origin: "*"

5.2 修改config/jvm.options

  • 因为我是在虚拟机上,内存不是很大,所以这里将JVM内存调小一点
-Xms512M
-Xmx512M

5.3 创建数据目录和日志目录

#创建数据目录和日志目录
cd data; mkdir data1 data2 data3
cd logs; mkdir logs1 logs2 logs3

5.4 启动

# 启动(同一台机子)
bin/elasticsearch -E node.name=node1 -E cluster.name=geektime -E path.data=data/data1 -E path.logs=logs/logs1 -E http.port=9201 -E transport.tcp.port=9301 -E node.master=true -E node.data=true 
bin/elasticsearch -E node.name=node2 -E cluster.name=geektime -E path.data=data/data2 -E path.logs=logs/logs2 -E http.port=9202 -E transport.tcp.port=9302 -E node.master=true -E node.data=false
bin/elasticsearch -E node.name=node3 -E cluster.name=geektime -E path.data=data/data3 -E path.logs=logs/logs3 -E http.port=9203 -E transport.tcp.port=9303 -E node.master=true -E node.data=false

6. Kibana的安装和界面快速浏览

6.1 下载(都是国内的社区)

6.2 配置

  • 修改config/Kibana.yml
# 用于在任何主机都可以访问
server.host: "0.0.0.0"
# es的地址,这个它默认是9200端口,我们现在启动的是9201、9202、9203,所以这里需要配置一下
elasticsearch.hosts: ["http://192.168.37.130:9201"]

6.3 启动

[els@hadoop101 kibana-7.1.0-linux-x86_64]$ bin/kibana

6.4 设置中文

  • 在kibana.yml配置文件中添加一行配置 i18n.locale: "zh-CN"

6.4 访问及简单介绍

image image image image

7. 在Docker容器中运行Elasticsearch KibanaCerebro

7.1 安装Docker和Docker Compose

自行百度安装

7.2 Docker Compose相关命令

  • docker-compose up: 运行
  • docker compose down
  • docker compose down -v
  • docker stop/rm containerID

7.3 运行Docker-comose,本地构建开发环境,直观了解Elasticsearch分布式特性,并集成Cerebro,方便查看集群状态

7.3.1 docker-compose.yaml文件

version: '2.2'
services:
  cerebro:
    image: lmenezes/cerebro:0.8.3
    container_name: cerebro
    ports:
      - "9000:9000"
    command:
      - -Dhosts.0.host=http://elasticsearch:9200
    networks:
      - es7net
  kibana:
    image: docker.elastic.co/kibana/kibana:7.1.0
    container_name: kibana7
    environment:
      - I18N_LOCALE=zh-CN
      - XPACK_GRAPH_ENABLED=true
      - TIMELION_ENABLED=true
      - XPACK_MONITORING_COLLECTION_ENABLED="true"
    ports:
      - "5601:5601"
    networks:
      - es7net
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0
    container_name: es7_01
    environment:
      - cluster.name=geektime
      - node.name=es7_01
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - discovery.seed_hosts=es7_01,es7_02
      - cluster.initial_master_nodes=es7_01,es7_02
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - es7data1:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - es7net
  elasticsearch2:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0
    container_name: es7_02
    environment:
      - cluster.name=geektime
      - node.name=es7_02
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - discovery.seed_hosts=es7_01,es7_02
      - cluster.initial_master_nodes=es7_01,es7_02
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - es7data2:/usr/share/elasticsearch/data
    networks:
      - es7net


volumes:
  es7data1:
    driver: local
  es7data2:
    driver: local

networks:
  es7net:
    driver: bridge

7.3.2 启动运行

  • 进入有docker-compose.yaml文件的目录运行
  • 我这里的目录在``
docker-compose up

image image image

8. Logstash安装与导入数据

8.1 下载并安装

8.2 下载logstash数据文件

  • D:\WorkSpace\rickying-geektime-ELK-master
  • 并将数据导入到Linux中的/opt/module/logstash_data image image

8.2 修改logstash.conf配置文件

input {
  file {
    path => "/opt/module/logstash-7.1.0/bin/movies.csv"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}
filter {
  csv {
    separator => ","
    columns => ["id","content","genre"]
  }

  mutate {
    split => { "genre" => "|" }
    remove_field => ["path", "host","@timestamp","message"]
  }

  mutate {

    split => ["content", "("]
    add_field => { "title" => "%{[content][0]}"}
    add_field => { "year" => "%{[content][1]}"}
  }

  mutate {
    convert => {
      "year" => "integer"
    }
    strip => ["title"]
    remove_field => ["path", "host","@timestamp","message","content"]
  }

}
output {
   elasticsearch {
     hosts => "http://localhost:9200"
     index => "movies"
     document_id => "%{id}"
   }
  stdout {}
}

image

8.3 指定配置文件运行logstash

./logstash -f logstash.conf

image

学习地址为极客时间《Elasticsearch核心技术与实战》,这只是我做的笔记,仅供参考;