1、初始化
node初始化时,构造函数中会创建DiscoveryModule
final DiscoveryModule discoveryModule = new DiscoveryModule(settings, transportService, namedWriteableRegistry,
networkService, clusterService.getMasterService(), clusterService.getClusterApplierService(),
clusterService.getClusterSettings(), pluginsService.filterPlugins(DiscoveryPlugin.class),
clusterModule.getAllocationService(), environment.configFile(), gatewayMetaState, rerouteService,
fsHealthService);
并且会将Discovery与DiscoryModule的discovery绑定到juice容器中。
b.bind(Discovery.class).toInstance(discoveryModule.getDiscovery());
2、DiscoveryModule
2.1 支持的发现类型
只支持两种类型zen和single-node。发现类型通过属性discovery.type配置。
2.2 SeedHostsProvider
SeedHostsProvider提供作为参与选举的结点地址提供者。支持配置和文件两种方式。
SettingsBasedSeedHostsProvider:通过配置discovery.seed_hosts来设置参与选举的结点地址。
FileBasedSeedHostsProvider:通过configPath目录下的unicast_hosts.txt来设置参与选举的结点地址。
2.3 ElectionStrategy
选举策略的抽象类,抽象方法为satisfiesAdditionalQuorumConstraints,匿名类DEFAULT_INSTANCE实现的satisfiesAdditionalQuorumConstraints方法返回true。
2.4 CustomNameResolver
将字符串解析成地址的接口,通过DiscoveryPlugin获取得到提供者。
2.5 DicoveryPlugin
发现插件,提供了扩展机制,提供CustomNameResolver, SeedHostsProvider, ElectoryStrategy。
AzureDiscoreyPlugin:微软提供发现插件
Ec2DiscoveryPlugin:亚马逊提供的发现插件
GceDiscoveryPlugin:谷歌提供的发现插件
2.6 Discovery
继承接口ClusterStatePublisher,提供startInitialJoin开始选举接口,stats发现状态接口。
Coordinate是Discovery的实现类