[2] Углубленный анализ исходного кода elasticsearch — процесс запуска

Java база данных Технологии Nuggets призывают к публикации программист анализ данных облачные вычисления
[2] Углубленный анализ исходного кода elasticsearch — процесс запуска

Эта статья является второй статьей серии Elasticsearch Sear Analyse Analyse. Из-за сложности технологии это не хорошо или неправильно, пожалуйста, укажите ^ _ ^ !!!

Исходный код основного модуля

дистрибутив: связан с упаковкой и дистрибутивом elasticsearch, является модулем различных пакетов дистрибутива (zip, deb, rpm, tar) elasticsearch. Конкретное использование заключается в следующем: выполнять в соответствующем модуле версии выпуска.publishToMavenLocalЭта задача, в случае успешного выполнения, будет находиться в путиbuild/distributionsСоответствующий дистрибутив создается следующим образом, и упакованный пакет можно запустить на рабочем сервере. Как показано ниже:

通过distribution模块打包发行版本.png

Core: Core Package, исходный код Elasticsearch является в основном в этом

buildSrc: Построение соответствующего кода elasticsearch

client: как клиентский код для подключения к elasticsearch, интерфейс выглядит следующим образом:

client

модули: В качестве необходимого кода, связанного с модулем для elasticsearch в дополнение к ядру, структура выглядит следующим образом:

modules

plugins: Соответствующий код необходимых плагинов для elasticsearch, структура следующая:

plugins

загрузочная запись

в упомянутом выше модуле распределенияsrc/main/resources/binВы можете увидеть сценарий запуска elasticsearch по пути. Как показано ниже:

elasticsearch启动脚本

Сценарий сначала загружен в профиль JVM JVM.Options (файл конфигурации в нашей загрузке, расстегнут папку пакета выпуска)

ES_JVM_OPTIONS="$ES_PATH_CONF"/jvm.options

Затем загрузите параметры виртуальной машины, которые мы настроили в Run/Debug Configurations.

-Des.path.conf=D:\seymour\elasticsearch\elasticsearch-6.0.0-rc2
-Des.path.home=D:\seymour\elasticsearch\elasticsearch-6.0.0-rc2
-Dlog4j2.disable.jmx=true

последний стартorg.elasticsearch.bootstrap.Elasticsearchосновной метод в этом основном классе.

Метод main сначала добавляет хук выключения,

关闭钩子

Затем настройте экспортер журналов,

日志输出器

Затем проверяются три параметра среды elasticsearch:

    putSystemPropertyIfSettingIsMissing(settings, "path.data", "es.path.data");
    putSystemPropertyIfSettingIsMissing(settings, "path.home", "es.path.home");
    putSystemPropertyIfSettingIsMissing(settings, "path.logs", "es.path.logs");

Все проверки сделаны, передайте код на * org.elasticsearch.bootstrap.bootstrap * Метод класса init (), и это класс Bootstrap завершил начало Elasticsearch

Bootstrap.init(!daemonize, pidFile, quiet, initialEnv);

Класс Bootstrap

Давайте рассмотрим несколько важных методов в Bootstrap:

init
init(final boolean foreground,final Path pidFile,final boolean quiet,final Environment initialEnv) throws BootstrapException, NodeValidationException, UserException

Излишне говорить, что этот метод также знает, что он выполняет некоторую инициализацию перед запуском.

Подробное объяснение параметра

  • передний план: определяет, запущен ли elasticsearch как фоновый демон,
  • PIDFile: Полученные после анализа Args Parser, он на самом деле анализирует параметры командной строки по умолчанию (Verbose, E, Silent, версия, справка, тихие, демомозонные, PIDFile)
  • Тихий: То же самое
  • initialEnv: объект параметра среды, созданный Environment, который сохраняет некоторые параметры, такие как repoFile, configFile, pluginsFile, binFile, libFile и т. д.

Основная работа

  • Сначала создайте экземпляр объекта Bootstrap
  • Настройка экспортера журналов
  • Создайте файл pid, который сохранит файл на диске, в котором записан pid приложения.
  • Производительность журнала управления по параметрам переднего плана и тишина
  • Вызовите метод настройки Bootstrap и метод запуска
setup
setup(boolean addShutdownHook, Environment environment)throws BootstrapException 

Основная работа

  • Создайте локальный контроллер плагина через среду

  • Инициализировать локальные ресурсы

  • Инициализировать зонды перед установкой менеджера безопасности

  • Добавить закрывающий крючок

  • Проверить наличие дубликатов jar

  • Настройка вывода журнала перед установкой менеджера безопасности

  • Установить диспетчер безопасности

  • Создание экземпляра узла с параметром окружения

start
start() throws NodeValidationException 

Основная работа

  • Запустите уже созданный узел
  • Запустите поток keepAliveThread, который создается при инициализации Bootstrap.Поток создает CountDownLatch со счетчиком 1. Цель состоит в том, чтобы успешно добавить перехватчик выключения после завершения запуска, и это предложение:

Это означает добавление закрытого крючка в JVM. Когда JVM закрывается, выполняется все крючки, добавленные в систему, уже установленную в системе, выполняются. Когда система выполняется, JVM закроется. Таким образом, эти крюки могут выполнять очистку памяти, разрушение объекта и т. Д. Когда JVM закрывается.

Вы можете видеть, что основное внимание при запуске уделяется методу установки, а после запуска это дело Node.

Класс узла

Node создается с помощью NodeBuilder и использует инжектор Google Guice's Injector для внедрения и получения экземпляров. Все компоненты в elasticsearch управляются модульно с использованием описанного выше метода.Elasticsearch инкапсулирует guice и создает модули elasticsearch через класс ModulesBuilder:

Запуск Node — это запуск каждого компонента в Node. Аналогичным образом, для запуска компонента вызываются различные методы запуска, как показано ниже.

Пока что elasticsearch запущен, и я продолжу объяснять детали elasticsearch позже, пожалуйста, поддержите ^ _ ^ !!!