美文网首页
重新梳理Elasticsearch的node的配置及启动过程(2

重新梳理Elasticsearch的node的配置及启动过程(2

作者: Ombres | 来源:发表于2019-06-10 20:19 被阅读0次

    笔记

    2019.06.10 计划后期画个图把模块整理一下,之前写过,今天又重新看一次,感觉得多来几次才能熟悉

    先决条件

    environment 运行环境
    classpathPlugins Plugins的路径

    配置过程

    1. 根据运行环境,校验配置NodeEnvironment
      1.1 获取NodeLock,防止多次启动
      1.2 查找已有的MetaData File并获取相关信息,如果没有则生成新的MetaData,最后持久化到硬盘。
      1.3 输出路径信息和heap信息
      1.4 Lucene 的SegmentInfos跟踪配置
      1.5 确保data路径具有写的权限
      1.6 如果是Master节点,需要确保支持原子移动AtomicMove
      1.7 如果不是Data节点,需要确保没有ShardData,同时如果也不是Master节点,需要确保没有MetaData
    2. 初始化PluginsService,整个ES应该是由一个个的Plugin组合到一起的,这里就先构建PluginsService,获取ClassPath下的所有的Plugins
    3. 构建ThreadPool,这里会把Plugins中的需要用到的线程池也添加进来
    4. 构建NodeClient,这是在本地节点执行所有Action的客户端。这里会将线程池交给NodeClient维护。
      在NodeClient的中还包括一个Admin,用来管理Cluster和Indecies。后续还有初始化的过程。
      包括一个动作监听器,它封装另一个动作监听器并线程化它的执行。
    5. 初始化ResourceWatcherService,其他elasticsearch服务可以使用add(ResourceWatcher)方法将其资源观察者注册到该服务中。此服务将定期调用ResourceWatcher.checkAndNotify()方法来通知所有已注册的监视程序。检查的频率可以使用resource.reload.interval设置来指定,默认值为60s。可以通过设置resource.reload禁用该服务。
    6. 构建ScriptModule,管理ScriptService,另外会将该模块添加到ClusterSettings以便于监听配置的修改.还会将此服务注册到ClusterApplierServicenormalPriorityStateAppliers
    7. 构建AnalysisModule,主要维护了AnalysisRegistry,用来管理tokenizer, token filter, char filteranalyzer,所有的关于Analysis是由AnalysisRegistry完成的
    8. 构建SettingsModule,内部维护全部配置Settings
      集合形式的配置项:nodeSettingsindexSettingssettingsFilterPattern
      类形式的配置项:IndexScopedSettingsclusterSettingsSettingsFilter
      一般使用第二种形式进行配置修改
    9. 初始化NetworkService,这里管理所有的自定义的DiscoveryPlugin
    10. 初始化ClusterService,这里管理集群的各种服务,还有维护集群的一些基本信息及配置
      MasterService master节点服务
      ClusterApplierService 集群填充服务
      OperationRouting 路由
    11. 初始化IngestService,主要用来管理和维护摄取节点一些服务
    12. 初始化ClusterInfoService,定期收集集群的基本信息,比如收集硬盘空间信息等
    13. 初始化UsageService,节点请求的一些统计信息
    14. 构建GuiceModules(这次先不写,因为我还没有看呢,东西很多)
    15. 初始化MonitorService
      JvmGcMonitorService JVM GC监控
      OsService 操作系统监控
      ProcessService 进程监控
      JvmService JVM监控
      FsService 文件系统监控
    16. 构建ClusterModule,将ClusterServiceClusterPlugins,ClusterInfoService交给它进行统一管理
      Collection<AllocationDecider> deciderList 分配策略
      AllocationDeciders 分配策略
      ShardsAllocator shard级别的分配策略
      AllocationService 整合分配服务
      IndexNameExpressionResolver 索引名称正在解析器
      内部还包括Cluster StateMetadataTask Status的信息的注册项
    17. 构建IndicesModule
      MapperRegistry Mapper注册器
      包括一些注册表的注册项
    18. 构建SearchModule,注册所有要使用的
            this.settings = settings;
            this.transportClient = transportClient;
            registerSuggesters(plugins);
            highlighters = setupHighlighters(settings, plugins);
            registerScoreFunctions(plugins);
            registerQueryParsers(plugins);
            registerRescorers(plugins);
            registerSorts();
            registerValueFormats();
            registerSignificanceHeuristics(plugins);
            registerMovingAverageModels(plugins);
            registerAggregations(plugins);
            registerPipelineAggregations(plugins);
            registerFetchSubPhases(plugins);
            registerSearchExts(plugins);
            registerShapes();
            registerIntervalsSourceProviders();
    
    1. 初始化CircuitBreakerService 熔断机制的服务
    2. 初始化GatewayModule网关模块
    3. PageCacheRecycler初始化,在SettingsModule初始化的时候已经初始化了一些配置,并且维护了一个NON_RECYCLING_INSTANCE
    4. 构建NamedWriteableRegistry,注册一些可序列化的对象的的reader
    NetworkModule.getNamedWriteables().stream(),
    indicesModule.getNamedWriteables().stream(),
    searchModule.getNamedWriteables().stream(),
    pluginsService.filterPlugins(Plugin.class).stream().flatMap(p -> p.getNamedWriteables().stream()),
    ClusterModule.getNamedWriteables().stream()
    
    1. 构建NamedXContentRegistry,注册XContent解析器
    NetworkModule.getNamedXContents().stream(),
    indicesModule.getNamedXContents().stream(),
    searchModule.getNamedXContents().stream(),
    pluginsService.filterPlugins(Plugin.class).stream().flatMap(p -> p.getNamedXContent().stream())
    ClusterModule.getNamedXWriteables().stream()
    
    1. 初始化MetaStateService,用来操作读写ManifestMetaDataIndexMetaData
    2. 构建engineFactoryProvidersindexStoreFactories
    3. 初始化IndicesService,这是索引管理的服务
    4. 初始化MetaDataCreateIndexService,负责提交创建索引请求的服务,在这之前需要初始化别名校验。
    5. 构建所有的Plugin.class子类的所有插件
    6. 构建ActionModule,构建并绑定通用操作映射、所有传输操作和操作过滤器
    7. 构建NetworkModule,管理所有网络相关的类
    8. 初始化MetaDataIndexUpgradeService,用于集群升级的时候索引元数据的升级
    9. 初始化TemplateUpgradeService,新节点加入的时候为已安装的插件升级Template,这个服务会添加到ClusterService监听集群状态变更
    10. 初始化TransportService,这里会获取networkModule中的tranport,实际上就是SecurityNetty4ServerTransport,同时会获取ActionPlugin中的taskHeader
    11. GatewayMetaState,该类负责在磁盘中存储/检索元数据。它还检查文件系统级别是否支持原子移动,因为这是元数据存储算法的必需条件。集群状态信息在这里,master会收集信息然后广播到其他节点
    12. 初始化SearchTransportService,内部是一个transportService,会有一个ResponseCollectorService,收集每个节点上执行的任务的队列大小、响应时间和服务时间的统计信息,使协调节点可以使用值的EWMA。
    13. 构建一个HttpServerTransport,这也是一个SecurityNetty4ServerTransport
    14. 构建DiscoveryModule,服务发现的模块
    15. 初始化NodeService,内部包含多个服务,对以上某些服务进行了一次封装。
       private final Settings settings;
        private final ThreadPool threadPool;
        private final MonitorService monitorService;
        private final TransportService transportService;
        private final IndicesService indicesService;
        private final PluginsService pluginService;
        private final CircuitBreakerService circuitBreakerService;
        private final IngestService ingestService;
        private final SettingsFilter settingsFilter;
        private final ScriptService scriptService;
        private final HttpServerTransport httpServerTransport;
        private final ResponseCollectorService responseCollectorService;
        private final SearchTransportService searchTransportService;
    
        private final Discovery discovery;
    
    1. 初始化SearchService
    2. 构建所有的PersistentTaskPlugin所属的PersistentTasksExecutor,主要是xpack的一些功能,先new一个注册器,最后封装为一个PersistentTasksClusterService和一个PersistentTasksService
    3. 这里比较关键,是把以上的服务加到modules,然后创建一个注入器,使用的时候就会自动注入。用的guice
    4. 接下来就是一些配置了,clusterModule添加GatewayAllocator
    5. pluginLifecycleComponents初始化
    6. NodeClient初始化。
    7. ActionModule初始化所有的RestHandler

    启动

    启动LifecycleComponent相关组件

    injector.getInstance(MappingUpdatedAction.class).setClient(client);
    injector.getInstance(IndicesService.class).start();
    injector.getInstance(IndicesClusterStateService.class).start();
    injector.getInstance(SnapshotsService.class).start();
    injector.getInstance(SnapshotShardsService.class).start();
    injector.getInstance(RoutingService.class).start();
    injector.getInstance(SearchService.class).start();
    nodeService.getMonitorService().start();
    

    NodeConnectionsService启动,并配置为ClusterService的节点连接服务

    injector.getInstance(ResourceWatcherService.class).start();
    injector.getInstance(GatewayService.class).start();
    

    TransportService启动,为TaskManager添加任务结果存储服务TaskResultsService
    network services启动后验证节点
    Discovery 启动
    clusterService启动
    允许transportService接受请求
    Discovery开始初始化加入集群
    配置节点和集群状态监听
    启动HttpServerTransport服务,允许http请求
    启动ClusterStateObserver ,监听集群状态变更
    调用所有ClusterPlugin子类的onNodeStarted方法。

    相关文章

      网友评论

          本文标题:重新梳理Elasticsearch的node的配置及启动过程(2

          本文链接:https://www.haomeiwen.com/subject/svqtfctx.html