Правильный способ открытия ElasticSearch, kibana, logstash

Java

Автор: Циничный кодер
Время: 2020-03-08
Примечание. Оригинальность непростая задача. Эта статья является оригинальной и не может быть воспроизведена без разрешения. Пожалуйста, свяжитесь с автором перед перепечаткой.

Правильный способ открытия ElasticSearch, kibana, logstash

предисловие1. Строительство системы ELKУстановка эластичного поискаустановить кибануУстановить логсташ2. Импорт и экспорт данных в индексную базу данных Elasticsearch на базе Logstash.Используйте logstash для экспорта данных es из библиотеки индексов.Импорт Logstash данных в базу данных индекса Elasticsearch3. Установите китайский токенизатор ikУстановка плагина ik Chinese tokenizerтест на сегментацию словВ-четвертых, построение кластера ElasticsearchСоздайте файлы конфигурации и файлы данных, необходимые кластеру для сопоставления контейнеров.Создайте контейнер elasticsearch и запуститеВозникшие проблемы

предисловие

Что такое эластичный поиск? Почему каждый раз, когда вы изучаете технологию на английском языке? Это действительно боль в заднице. Поскольку он на английском языке, мы могли бы использовать Youdao для предварительного ознакомления.ElasticsearchКак это свято, так красиво. Он делится на два самостоятельных слова эластичный и поисковый.Давайте рассмотрим безмозглый способ, и объяснение следующее:

Из разумного объяснения мы можем просто понять это как: Elasticsearch — это инструмент, который эластичен, гибок, похож на эластик и доступен для поиска и извлечения. о(*≧▽≦)ツ┏━┓

Википедия объясняет это следующим образом:

ElasticSearch — это поисковый сервер на базе Lucene. Он предоставляет распределенную многопользовательскую полнотекстовую поисковую систему на основе веб-интерфейса RESTful. Elasticsearch, разработанный на языке Java и выпущенный с открытым исходным кодом в соответствии с условиями лицензии Apache, является популярной поисковой системой корпоративного уровня. ElasticSearch используется в облачных вычислениях для обеспечения поиска в реальном времени, стабильного, надежного, быстрого и простого в установке и использовании. Официальные клиенты доступны на Java, .NET (C#), PHP, Python, Apache, Groovy, Ruby и многих других языках. Согласно рейтингу DB-Engines, Elasticsearch является самой популярной поисковой системой для предприятий, за ней следует Apache Solr, также основанный на Lucene.

Из приведенной выше информации мы можем узнать, что Elasticsearch — это поисковая система с распределенным хранилищем в режиме реального времени.В фактическом процессе разработки мы часто помещаем данные в поисковую систему Elasticsearch, а затем извлекаем фактические данные из этой системы. И в реальном процессе поиска у нас также будет много поддержки API для извлечения данных, таких как сортировка, условный запрос и т. Д. Среди них самой мощной функцией Elasticsearch является функция нечеткого поиска. Говоря об этом, может быть некоторый опыт работы с Mysql, но при контакте с друзьями Elasticsearch могут возникнуть вопросы, Mysql Dafa не является непобедимым, среди нихlikeМожет ли оператор не быть нечетким запросом?where andНе работает условный поиск?orderbyНе можете отсортировать данные? Разве я не могу просто случайно придумать оператор Sql, чтобы удовлетворить потребности бизнеса:

select department_name, count(*) 员工个数
from departments d, employees e
where d.department_id = e.department_id
group by d.department_id
having count(*)>5
order by count(*) desc;

Правильно, вышеприведенный код SQL действительно может удовлетворить реальные потребности, но когда наш бизнес постепенно становится сложным и огромным, а количество пользователей увеличивается, нам приходится думать с точки зрения пользователя. Только представьте, что это была бы за картина, если бы некоторым пользователям Taobao приходилось ждать десятки секунд каждый день, когда они открывают Taobao для поиска нужных им данных. Другой пример: когда мы открываем наши общие файлы для извлечения нужных нам данных, таких как txt, word и excel, мы обычно можем открывать их быстро, потому что эти файлы занимают слишком мало фактического места, и большинство из этих файлов являются лишь несколько килобайт. Мы открываем файл журнала с единицей измерения G. Может ли система в это время быть такой же нормальной, как раньше? Другими словами, Elasticsearch использует поиск по индексу, который обладает мощными возможностями поиска и может обеспечить поиск в реальном времени, стабильность, надежность, скорость и установку.

Кроме того, в процессе обработки логов часто используется Elasticsearch совместно с движком сбора данных и разбора логов Logstash и платформой анализа и визуализации под названием Kibana, которую часто называютELKсистема. Текст будет в основном знакомить со следующими аспектами

  • Сборка ELK на основе контейнеров Docker
  • Создание кластера Elasticsearch
  • Представляем плагин IK tokenizer в Elasticsearch
  • Импорт и экспорт данных в базу индексов Elasticsearch на базе Logstash

1. Строительство системы ELK

Elasticsearch — это механизм полнотекстового поиска и анализа в реальном времени, который обеспечивает три функции сбора, анализа и хранения данных; это набор открытых структур API REST и JAVA для обеспечения эффективных функций поиска и расширяемой распределенной системы. Он построен на основе библиотеки поисковой системы Apache Lucene.

Logstash — это инструмент для сбора, анализа и фильтрации журналов. Он поддерживает практически любой тип журнала, включая системные журналы, журналы ошибок и пользовательские журналы приложений. Он может получать журналы из многих источников, включая системный журнал, обмен сообщениями (например, RabbitMQ) и JMX, а также может выводить данные несколькими способами, включая электронную почту, веб-сокеты и Elasticsearch.
1
Kibana — это графический веб-интерфейс для поиска, анализа и визуализации данных журнала, хранящихся в метриках Elasticsearch. Он использует интерфейс REST Elasticsearch для извлечения данных и не только позволяет пользователям создавать собственные представления своих данных на панели инструментов, но также позволяет им запрашивать и фильтровать данные специальными способами.

Подводя итог, можно сказать, что Elasticsearch используется для поиска, Kibana — для визуализации, а Logstash — для сбора. Давайте создадим систему ELK на основе Docker Установка и базовое использование Docker были описаны в предыдущих статьях, поэтому я не буду подробно их представлять. Кроме того, стоит отметить взаимосвязь версий между тремя (если вы используете инструменты других версий, сборка следующим образом может вызвать другие проблемы):

  • Elasticsearch:5.6.8
  • Kibana:5.6.8
  • Logstash:lastest

Установка эластичного поиска

  • Docker загружает образ Elasticsearch
docker pull elasticsearch:5.6.8
  • Создайте локально файл конфигурации и каталог данных, сопоставленные контейнером elasticsearch.

Здесь необходимоhttp.hostнастроен как0.0.0.0объект авторизации и записать конфигурацию в конфигурационный файл elasticsearch.yml в каталоге config

# 在centos本地创建配置文件,并配置
mkdir -p /resources/elasticsearch/config        # 创建config目录
mkdir -p /resources/elasticsearch/data             # 创建data目录
# 将http.host配置为0.0.0.0的授权对象,将配置写入config目录下的elasticsearch.yml配置文件中
echo "http.host: 0.0.0.0" >> /resources/elasticsearch/config/elasticsearch.yml
  • Создайте контейнер elasticsearch и запустите его при загрузке

Сначала нужно создать контейнер и запустить его (single-node означает одноузловой режим, а построение elasticsearch в кластерном режиме будет описано позже), а затем настроить контейнер elasticsearch на автозапуск при загрузке. Параметры при ношении контейнера es вводятся следующим образом:

  1. --name: дать псевдоним контейнеру
  2. -p: сопоставить работающий порт контейнера с локальным портом
  3. «discovery.type=single-node»: указывает, что он создан в одноузловом режиме, а построение кластерного режима будет представлено позже.
  4. -v: указывает, что файлы конфигурации и файлы данных в контейнере сопоставляются с файлами, созданными локально выше, что удобно для последующей настройки
# 创建容器并开机运行(single-node表示单节点模式,后面会介绍集群方式下elasticsearch的搭建)
# 注意:在docker中\表示换行
docker run --name elasticsearch -p 9200:9200 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms256m -Xmx256m" \
-v /resources/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /resources/elasticsearch/data:/usr/share/elasticsearch/data -d elasticsearch:5.6.8
# 参数介绍:
# --name:为容器起一个别名
# -p:将容器的运行端口映射到本地端口
# -e "discovery.type=single-node":表示单节点模式下创建,后文将介绍集群模式的搭建
# -v:表示将容器中的配置文件和data文件映射到上文本地所创建的文件,方便后面的配置

# 将elasticsearch容器设置为开机自启动
docker update new-elasticsearch --restart=always

При этом у нас установлен elasticsearch, и мы можем использоватьcurlКоманда для проверки:

# 使用curl来访问elasticsearch的运行端口
curl localhost:9200
# 运行输出结果如下则成功安装
{
  "name" : "XwmNOpR",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "yB3VNHxmQzevk1vXUQTkcg",
  "version" : {
    "number" : "5.6.8",
    "build_hash" : "688ecce",
    "build_date" : "2018-02-16T16:46:30.010Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.1"
  },
  "tagline" : "You Know, for Search"
}

Конечно, мы также можем использовать браузер для доступа к нему, метод доступаhttp://[ip]:9200, порт - это ip виртуальной машины, и соответствующие результаты также могут быть получены.Кроме того, если вы используете облачный сервер Aliyun или Tencent, вам необходимо настроить соответствующую группу безопасности в консоли, иначе вы не сможете получить доступ

установить кибану

  • Docker загружает образ Kibana
# Docker拉取Kibana镜像
docker pull kibana:5.6.8
  • Создайте контейнер и настройте его автоматический запуск
# 创建容器kibana容器,对应的参数如上,另外需要指定elasticsearch的地址
docker run --name kibana -e ELASTICSEARCH_URL=http://[ip]:9200 -p 5601:5601 \
-d kibana:5.6.8
# 配置开机自启动
docker update new-kibana --restart=always

После завершения установки мы можем свернуть адрес кибаны или посетить его в браузере.http://[ip]:5601Вы можете получить соответствующий вывод:

[root@iZm5eei156c9h3hrdjpe77Z ~]# curl localhost:5601
<script>var hashRoute = '/app/kibana';
var defaultRoute = '/app/kibana';

var hash = window.location.hash;
if (hash.length) {
  window.location = hashRoute + hash;
} else {
  window.location = defaultRoute;
}</script>[root@iZm5eei156c9h3hrdjpe77Z ~]# 

Установить логсташ

  • Извлеките образ Logstash
# 拉取镜像
docker pull logstash
  • Создайте файл конфигурации и настройте ввод и вывод

Создайте файл logstash.conf в /resources/logstash и отредактируйте его с помощью vim.Процесс настройки выглядит следующим образом:

# 在/resources/logstash中创建logstash.conf文件,并使用vim来对其进行编辑
mkdir /resources/logstash
# 使用vim编辑
vim logstash.conf
# 配置文件内容如下,更换为自己Elasticsearch的ip即可
input {
    tcp {
        port => 4560
        codec => json_lines
    }
}
output{
  elasticsearch { 
    hosts => ["[ip]:9200"] 
    index => "applog"
    }
  stdout { codec => rubydebug }
}
  • Создайте контейнер и запустите его автоматически
# 创建容器,这里需要指明Elasticsearch来进行链接
docker run -d -p 4560:4560 \
-v /resources/logstash/logstash.conf:/etc/logstash.conf \
--link elasticsearch:elasticsearch \
--name logstash logstash \
logstash -f /etc/logstash.conf

# 开机自启动
docker update new-logstash --restart=always

Выше описан процесс установки Logstash, мы можем просто войти в контейнер Logstash, чтобы использовать его.

Войдите в контейнер Logstash и перейдите в каталог bin.

docker exec -it logstash /bin/bash
cd /usr/share/logstash/bin

Выполните команду logstash, обратите внимание: здесь нужно указать параметр --path.data, иначе во время запущенного процесса возникнет ошибка

# 注意:需要这里需要指定--path.data参数,否则在运行的过程会出错
logstash -e 'input { stdin { } } output { stdout {} }' --path.data=/root/

После запуска вводим в консоль hello world, и появятся следующие результаты


2. Импорт и экспорт данных в индексную базу данных Elasticsearch на базе Logstash.

Требования к приложению: В es на хосте 192.168.220.201 нет библиотеки информационных индексов, а в es на 192.168.220.202 есть библиотека информационных индексов.В настоящее время мы можем попробовать использовать logstash для экспорта библиотеки индексов skuinfo из 192.168. .220.202 в файл json, а затем импортируйте файл в библиотеку индексов es по адресу 192.168.220.201 с помощью logstash. Как можно выполнить такое требование?

Используйте logstash для экспорта данных es из библиотеки индексов.

Создайте временную папку для сохранения экспортированных данных и файлов конфигурации, затем используйте vim, чтобы создать файл конфигурации export.conf и настроить его.

mkdir /resources/mydata/logstash_temp
vim export.conf

Содержимое конфигурации файла export.conf выглядит следующим образом.

#  将192.168.220.202 Elasticsearch中info索引库导出为一个info.json文件
input{
     elasticsearch {
        hosts => ["192.168.220.202:9200"]   # 指定Elasticsearch的地址,该地址中含有目标数据
                index => "info"             # 指定需要导出的索引库
                size => 200                 # 指定每次导出数据每批次的大小,注意不能设置太大,否则会出错
            scroll => "5m"
                docinfo => false
    }
}
output{
   file {
     path => "info.json"                 # 指定保存的数据路径和json文件的名称
   }
 }

использоватьdocker cpКоманда копирует экспортированный файл конфигурации в каталог bin контейнера logstash.

# 将export.conf文件cp到logstash容器中
docker cp ./export.conf logstash:/usr/share/logstash/bin

Войдите в контейнер logstash и запустите файл конфигурации,Примечание. Обязательно укажите свойство path.data, иначе будет сообщено об ошибке.

# 进入logstash,然后执行配置文件
docker exec -it logstash /bin/bash
cd /usr/share/logstash/bin
./logstash -f ./export.conf --path.data=/root/ # 务必要指定path.data属性,不然会报错

После завершения выполнения в текущем каталоге будет сгенерирован файл info.json, и мы экспортируем файл данных в centos.

# 执行完成之后就会在当前目录下产生一个info.json文件,将该文件导出到centos中
docker cp logstash:/usr/share/logstash/bin/info.json /resources/mydata/

Данные в библиотеке индексов можно экспортировать в файл json, который находится в /resources/mydata/info.json.

Импорт Logstash данных в базу данных индекса Elasticsearch

  • Завершите импорт данных json и конфигурацию файла conf.
  1. Импортируйте файл info.json по адресу 192.168.220.202 в локальную Windows с помощью инструмента xftp.
  2. Импортируйте файл в 192.168.220.201 /resources/mydata/logstash_temp с помощью инструмента xftp.
  3. Используйте vim дляimport.confфайл конфигурации для редактирования
# 1. 将192.168.220.202中的info.json文件使用xftp工具导入到windows本地
# 2. 将该文件通过xftp工具导入到192.168.220.201 /resources/mydata/logstash_temp中
cd /mydata/mysources/logstash_temp
# 使用vim对import.conf进行配置
vim import.conf
  • Конфигурационный файл import.conf выглядит следующим образом.
# 读取json文件
input {
  file {
    # 设置json文件路径,多个文件路径可设置成数组[],模糊匹配用*
    path => "/root/info.json"
    start_position => "beginning"
    # 设置编码
    codec => json {charset => "UTF-8"}
    # 当存在多个文件的时候可使用type指定输入输出路径
    type => "json_index"
  }
}

# 过滤格式化数据
filter {
    mutate{
        #删除无效的字段
        remove_field => ["@version","message","host","path"]
    }
    # 新增timestamp字段,将@timestamp时间增加8小时
    ruby { code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)" }

}

# 数据输出到ES
output {
    #日志输出格式,json_lines;rubydebug等
    stdout {
        codec => rubydebug
    }
    #输出到es
    if[type] == "json_index"{
        #无法解析的json不记录到elasticsearch中
        if "_jsonparsefailure" not in [tags] {
            elasticsearch {
                #es地址ip端口
                hosts => "192.168.220.201:9200"
                # 配置数据转入到es中的
                index => "info"
                #类型
                document_type => "info"
            }
        }
    }
}
  • После завершения настройки файла import.conf мы можем фактически реализовать импорт данных
# 将import.conf文件和info.json文件导入到logstash容器中
docker cp ./import.conf logstash:/usr/share/logstash/bin    # 导入conf配置文件
docker cp ./skuinfo.json logstash:/root/                    # 导入json数据文件,导入的路径注意与conf配置文件中的配置路径保持一致
# 进入到logstash容器中,并执行logstash命令完成数据的导入
docker exec -it logstash /bin/bash
cd /usr/share/logstash/bin
./logstash -f ./import.conf --path.data=/root/

Дождавшись завершения выполнения, перейдите по адресу 192.168.220.201:5601, чтобы получить доступ к данным в библиотеке информационных индексов.


3. Установите китайский токенизатор ik

Установка плагина ik Chinese tokenizer

Яма 1: Когда мы устанавливаем ik tokenizer, мы обычно загружаем zip-файл в github, затем переносим его в centos и, наконец, загружаем в контейнер elasticserch, но версия, указанная в github, принципиально отличается от реальной версии. С другой стороны, когда мы скачиваем разные версии elasticsearch, какие-то версии контейнера будут работать некорректно, а какие-то нормально. Так что мы будем устанавливать версию 5.6.8 одновременно с сборкой лося в будущем (надо обратить внимание)

Яма 2: Обычно мы загружаем zip-файлы (независимо от того, какие файлы) на github очень, очень медленно (не в целом медленно), поэтому мы можем использовать gitee (облако кода) для загрузки, когда мы будем использовать github для загрузки в будущем. хранилище в облаке кода, выберите импорт существующего хранилища, затем скопируйте и вставьте git-соединение исходного github и, наконец, создайте. После создания мы можем использовать облако кода для косвенной загрузки любого файла в репозиторий github, и скорость загрузки будет значительно увеличена.

Конкретный процесс установки и примеры кода следующие:

  1. Скачать ik tokenizer для 5.6.8:https://gitee.com/tianxingjian123/elasticsearch-analysis-ik
  2. Используйте maven для его упаковки: cd в каталог ik, затем пакет mvn:mvn package -Pdist,native -DskipTests -Dtar
  3. После упаковки с помощью maven можно создать целевую папку, содержащую./releases/elasticsearch-analysis-ik-5.6.8.zipСжатый файл
  4. Создайте папку ik на виртуальной машине, загрузите zip-файл в папку ik, затем используйте команду unzip, чтобы разархивировать zip-файл, и удалите zip-файл после распаковки.
  5. Затем с помощью докера перенесите папку ik в плагины контейнера elasticsearch
  6. Войдите в контейнер elasticsearch и используйтеlsКоманда для проверки успешности загрузки папки ik

ссылка на токенизатор ик:git ee.com/Tianxingjia…

# ik分词器链接:https://gitee.com/tianxingjian123/elasticsearch-analysis-ik
# 下载5.6.8的ik分词器之后,我们需要使用maven将其打包
cd C:\Users\M\Desktop\code-demo\elasticsearch-analysis-ik
mvn package -Pdist,native -DskipTests -Dtar
# 使用maven打包完成之后,即可生成一个target文件夹,里面有./releases/elasticsearch-analysis-ik-5.6.8.zip
# 在虚拟机中创建一个ik文件夹
mkdir ik
# 之后使用xftp将该zip文件上传到ik文件夹中,然后使用unzip命令解压该zip文件,解压之后删除zip文件
unzip elasticsearch-analysis-ik-5.6.8.zip
rm -rf elasticsearch-analysis-ik-5.6.8.zip
# 之后使用docker将该ik文件夹传到elasticsearch容器的plugins中
docker cp ./ik elasticsearch:/usr/share/elasticsearch/plugins
# 进入elasticsearch容器
docker exec -it new-elasticsearch /bin/bash
# 之后如下命令可查看是否成功上传ik文件夹
root@78f36ce60b3f:/usr/share/elasticsearch# cd plugins/
root@78f36ce60b3f:/usr/share/elasticsearch/plugins# ls
ik
root@78f36ce60b3f:/usr/share/elasticsearch/plugins# cd ik
root@78f36ce60b3f:/usr/share/elasticsearch/plugins/ik# ls
commons-codec-1.9.jar             httpclient-4.5.2.jar
commons-logging-1.2.jar             httpcore-4.4.4.jar
config                     plugin-descriptor.properties
elasticsearch-analysis-ik-5.6.8.jar
root@78f36ce60b3f:/usr/share/elasticsearch/plugins/ik# 
# 之后进入到bin目录下,并查看已经安装的ik分词器插件
root@78f36ce60b3f:cd /usr/share/elasticsearch/bin
root@78f36ce60b3f:/usr/share/elasticsearch/bin# elasticsearch-plugin list
ik

После выполнения вышеуказанных операций, даже если внедрение плагина китайского токенизатора ik в Elasticsearch завершено, обратите внимание: вышеуказанные шаги должны быть полностью согласованы, иначе это вызовет различные проблемы.

тест на сегментацию слов

# 打开chrom浏览器,访问:http://192.168.220.201:5601/,若出现kibana界面,说明kibana安装正常
# 进入kibana的Dev Tools界面,然后使用如下测试ik中文分词器插件是否正常安装
GET bank/_analyze
{
  "text": "现在是大年三十凌晨一点三十分,有点冷,我写完这篇文章就睡觉!",
  "analyzer": "ik_smart"
}

После выполнения теста результаты сегментации китайских слов выглядят следующим образом: видно, что сегментация слов китайских предложений завершена.


В-четвертых, построение кластера Elasticsearch

Создайте файлы конфигурации и файлы данных, необходимые кластеру для сопоставления контейнеров.

Каждый раз при сборке нужно обращать внимание на то, чтобы каталог данных был пуст, иначе во время фактической операции возникнет ошибка.

mkdir /mydata
cd /mydata
mkdir elasticsearch1
cd elasticsearch1
mkdir data # 注意要确保data目录下为空,否则在实际运行过程中会出错
mkdir config
cd conf
vim elasticsearch.yml
# elasticsearch.yml文件配置信息如下

Информация о конфигурации файла elasticsearch.yml выглядит следующим образом, обратите внимание на следующие моменты:

  1. Включите междоменный доступ, чтобы сделать es-head доступным, вам нужно установить дополнительные плагины заголовков здесь
  2. Задайте имя кластера (настройки для каждого узла кластера должны быть одинаковыми)
  3. Указывает, имеет ли узел право быть избранным в качестве главного узла, значение по умолчанию равно true, если первая машина в кластере по умолчанию является главной, если эта машина зависнет, мастер будет переизбран
  4. Разрешить узлу хранить данные (включено по умолчанию) и разрешить доступ с любого IP-адреса
# 开启跨域,为了让es-head可以访问,此处需要额外安装header插件
http.cors.enabled: true
http.cors.allow-origin: "*"

# 集群的名称(一样)
cluster.name: elasticsearch
# 节点的名称(不一样,根据别名来配置)
node.name: es1
# 指定该节点是否有资格被选举成为master节点,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master
node.master: true
# 允许该节点存储数据(默认开启)
node.data: true
# 允许任何ip访问
network.host: 0.0.0.0
# 通过这个ip列表进行节点发现,我这里配置的是各个容器的ip
discovery.zen.ping.unicast.hosts: ["192.168.220.200:9300","192.168.220.200:9301","192.168.220.200:9302"]
#如果没有这种设置,遭受网络故障的集群就有可能将集群分成两个独立的集群 – 导致脑裂 - 这将导致数据丢失
discovery.zen.minimum_master_nodes: 2

После создания первого файла конфигурации elasticsearch создайте два других узла таким же образом.

# 配置es2
cd /mydata
cp -r ./elasticsearch1 ./elasticsearch2
# 将其中的conf/elasticsearch.yml中配置修改一处信息
node.name=es2

# 配置es3
cd /mydata
cp -r ./elasticsearch1 ./elasticsearch3
# 将其中的conf/elasticsearch.yml中配置修改一处信息
node.name=es3

Создайте контейнер elasticsearch и запустите

# 创建es1容器并启动
docker run --name es1 -p 9200:9200 -p 9300:9300 \
-e ES_JAVA_OPTS="-Xms256m -Xmx256m" \
-v /mydata/elasticsearch1/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch1/data:/usr/share/elasticsearch/data -d elasticsearch:5.6.8

# 引入ik分词器
docker cp ./ik es1:/usr/share/elasticsearch/plugins

# 创建es2容器并启动
docker run --name es2 -p 9201:9200 -p 9301:9300 \
-e ES_JAVA_OPTS="-Xms256m -Xmx256m" \
-v /mydata/elasticsearch2/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch2/data:/usr/share/elasticsearch/data -d elasticsearch:5.6.8

# 创建es3容器并启动
docker run --name es3 -p 9202:9200 -p 9302:9300 \
-e ES_JAVA_OPTS="-Xms256m -Xmx256m" \
-v /mydata/elasticsearch3/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch3/data:/usr/share/elasticsearch/data -d elasticsearch:5.6.8

На данный момент после выполнения вышеуказанных операций можно построить кластер Elasticsearch.

  • посетить отдельноhttp://192.168.220.200:9200、http://192.168.220.200:9201、http://192.168.220.200:9202, вы можете обнаружить, что построение завершено, и отображается соответствующая информация о каждом узле es.
  • доступhttp://192.168.220.200:9200/_cat/nodesМожет просматривать узлы кластера.
  • доступhttp://192.168.220.200:9200//_cat/healthПросмотр состояния здоровья (зеленый, желтый, красный)

Возникшие проблемы

  • После создания контейнера он может быть ограничен количеством процессов, нам нужно увеличить количество процессов в виртуальной машине
vim /etc/sysctl.conf
# 添加如下一条配置
vm.max_map_count=655360
# 退出后重启配置
sysctl -p
  • При создании экземпляров трех вышеуказанных контейнеров es могут возникнуть некоторые проблемы с памятью.В настоящее время нам необходимо увеличить память виртуальной машины.

После запуска вышеуказанной команды вы можете обнаружить, что в настоящее время доступно только более 50 конфигураций, и когда мы посетимhttp://192.168.220.200:9200В это время мы также обнаружим, что запрос не выполняется.В это время мы открываем настройки соответствующей виртуальной машины и устанавливаем память на 3 ГБ.Через некоторое время повторно войдите в виртуальную машину и используйте команду free -m чтобы обнаружить, что в настоящее время доступно более 1000 памяти.

# 实例化以上三个es容器之后,查看当前可用内存
free -m
# 运行以上命令之后,可能会发现当前可用配置只有50多,而且当我们访问http://192.168.220.200:9200的时候也会发现请求失败这个时候我们打开对应虚拟机的设置,将内存设置3GB即可,不一会儿重新进入虚拟机,使用free -m命令即可发现此时内存还剩1000多可用

# 完成上述配置之后,我们重启三个es容器
docker restart es1 es2 es3 || docker start es1 es2 es3

# 等待容器重启之后,使用chrom浏览器访问es
http://192.168.220.200:9200
http://192.168.220.200:9201
http://192.168.220.200:9202
# 可发现已经搭建完成,且显示了各个es节点的对应信息

# 在kibana的dev tools下查看集群节点
GET /_cat/nodes
# 查看健康状况(green,yellow、red)
GET /_cat/health
08.03.2020, Таотао, Шанграо