笔记
2019.06.10 计划后期画个图把模块整理一下,之前写过,今天又重新看一次,感觉得多来几次才能熟悉
先决条件
environment
运行环境
classpathPlugins
Plugins的路径
配置过程
- 根据运行环境,校验配置
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
- 初始化
PluginsService
,整个ES应该是由一个个的Plugin
组合到一起的,这里就先构建PluginsService
,获取ClassPath下的所有的Plugins
- 构建
ThreadPool
,这里会把Plugins
中的需要用到的线程池也添加进来 - 构建
NodeClient
,这是在本地节点执行所有Action
的客户端。这里会将线程池交给NodeClient维护。
在NodeClient的中还包括一个Admin,用来管理Cluster和Indecies。后续还有初始化的过程。
包括一个动作监听器,它封装另一个动作监听器并线程化它的执行。 - 初始化
ResourceWatcherService
,其他elasticsearch服务可以使用add(ResourceWatcher)方法将其资源观察者注册到该服务中。此服务将定期调用ResourceWatcher.checkAndNotify()方法来通知所有已注册的监视程序。检查的频率可以使用resource.reload.interval设置来指定,默认值为60s。可以通过设置resource.reload禁用该服务。 - 构建
ScriptModule
,管理ScriptService
,另外会将该模块添加到ClusterSettings
以便于监听配置的修改.还会将此服务注册到ClusterApplierService
的normalPriorityStateAppliers
- 构建
AnalysisModule
,主要维护了AnalysisRegistry
,用来管理tokenizer
,token filter
,char filter
和analyzer
,所有的关于Analysis
是由AnalysisRegistry
完成的 - 构建
SettingsModule
,内部维护全部配置Settings
集合形式的配置项:nodeSettings
,indexSettings
,settingsFilterPattern
类形式的配置项:IndexScopedSettings
,clusterSettings
,SettingsFilter
一般使用第二种形式进行配置修改 - 初始化
NetworkService
,这里管理所有的自定义的DiscoveryPlugin
- 初始化
ClusterService
,这里管理集群的各种服务,还有维护集群的一些基本信息及配置
MasterService
master节点服务
ClusterApplierService
集群填充服务
OperationRouting
路由 - 初始化
IngestService
,主要用来管理和维护摄取节点一些服务 - 初始化
ClusterInfoService
,定期收集集群的基本信息,比如收集硬盘空间信息等 - 初始化
UsageService
,节点请求的一些统计信息 - 构建
GuiceModules
,(这次先不写,因为我还没有看呢,东西很多) - 初始化
MonitorService
JvmGcMonitorService
JVM GC监控
OsService
操作系统监控
ProcessService
进程监控
JvmService
JVM监控
FsService
文件系统监控 - 构建
ClusterModule
,将ClusterService
,ClusterPlugin
s,ClusterInfoService
交给它进行统一管理
Collection<AllocationDecider> deciderList
分配策略
AllocationDeciders
分配策略
ShardsAllocator
shard级别的分配策略
AllocationService
整合分配服务
IndexNameExpressionResolver
索引名称正在解析器
内部还包括Cluster State
,Metadata
,Task Status
的信息的注册项 - 构建
IndicesModule
MapperRegistry
Mapper注册器
包括一些注册表的注册项 - 构建
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();
- 初始化
CircuitBreakerService
熔断机制的服务 - 初始化
GatewayModule
网关模块 -
PageCacheRecycler
初始化,在SettingsModule
初始化的时候已经初始化了一些配置,并且维护了一个NON_RECYCLING_INSTANCE - 构建
NamedWriteableRegistry
,注册一些可序列化的对象的的reader
NetworkModule.getNamedWriteables().stream(),
indicesModule.getNamedWriteables().stream(),
searchModule.getNamedWriteables().stream(),
pluginsService.filterPlugins(Plugin.class).stream().flatMap(p -> p.getNamedWriteables().stream()),
ClusterModule.getNamedWriteables().stream()
- 构建
NamedXContentRegistry
,注册XContent解析器
NetworkModule.getNamedXContents().stream(),
indicesModule.getNamedXContents().stream(),
searchModule.getNamedXContents().stream(),
pluginsService.filterPlugins(Plugin.class).stream().flatMap(p -> p.getNamedXContent().stream())
ClusterModule.getNamedXWriteables().stream()
- 初始化
MetaStateService
,用来操作读写Manifest
,MetaData
,IndexMetaData
- 构建
engineFactoryProviders
和indexStoreFactories
- 初始化
IndicesService
,这是索引管理的服务 - 初始化
MetaDataCreateIndexService
,负责提交创建索引请求的服务,在这之前需要初始化别名校验。 - 构建所有的
Plugin.class
子类的所有插件 - 构建
ActionModule
,构建并绑定通用操作映射、所有传输操作和操作过滤器 - 构建
NetworkModule
,管理所有网络相关的类 - 初始化
MetaDataIndexUpgradeService
,用于集群升级的时候索引元数据的升级 - 初始化
TemplateUpgradeService
,新节点加入的时候为已安装的插件升级Template,这个服务会添加到ClusterService
监听集群状态变更 - 初始化
TransportService
,这里会获取networkModule中的tranport,实际上就是SecurityNetty4ServerTransport
,同时会获取ActionPlugin
中的taskHeader
-
GatewayMetaState
,该类负责在磁盘中存储/检索元数据。它还检查文件系统级别是否支持原子移动,因为这是元数据存储算法的必需条件。集群状态信息在这里,master会收集信息然后广播到其他节点 - 初始化
SearchTransportService
,内部是一个transportService
,会有一个ResponseCollectorService
,收集每个节点上执行的任务的队列大小、响应时间和服务时间的统计信息,使协调节点可以使用值的EWMA。 - 构建一个
HttpServerTransport
,这也是一个SecurityNetty4ServerTransport
- 构建
DiscoveryModule
,服务发现的模块 - 初始化
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;
- 初始化SearchService
- 构建所有的PersistentTaskPlugin所属的PersistentTasksExecutor,主要是xpack的一些功能,先new一个注册器,最后封装为一个PersistentTasksClusterService和一个PersistentTasksService
- 这里比较关键,是把以上的服务加到modules,然后创建一个注入器,使用的时候就会自动注入。用的guice
- 接下来就是一些配置了,clusterModule添加GatewayAllocator
- pluginLifecycleComponents初始化
- NodeClient初始化。
- 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
方法。
网友评论