本文环境
- Apache ignite 2.8.0
- jdk 1.8.0_241
一、集群发现
1.1 基于静态ip集群
可采用xml或java两种方式配置。
xml配置方式:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
<!-- 开启对等类加载 -->
<property name="peerClassLoadingEnabled" value="true" />
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="ipFinder">
<!-- 配置静态ip -->
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
<property name="addresses">
<list>
<!-- 集群主机列表 -->
<value>127.0.0.1:47500..47509</value>
</list>
</property>
</bean>
</property>
</bean>
</property>
</bean>
</beans>
java配置方式:
TcpDiscoverySpi spi = new TcpDiscoverySpi();
TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder();
// Set initial IP addresses.
// Note that you can optionally specify a port or a port range.
ipFinder.setAddresses(Arrays.asList("127.0.0.1:47500..47509"));
spi.setIpFinder(ipFinder);
IgniteConfiguration cfg = new IgniteConfiguration();
// Override default discovery SPI.
cfg.setDiscoverySpi(spi);
// 配置对等类
cfg.setPeerClassLoadingEnabled(true);
Ignite ignite = Ignition.start(cfg);
1.2 基于组播集群
可采用xml或java两种方式配置。
- 集群节点配置同样的组播地址即可;
- 关于组播地址的分类:
224.0.0.0~224.0.0.255
为预留的组播地址(永久组地址),地址224.0.0.0保留不做分配,其它地址供路由协议使用;
224.0.1.0~224.0.1.255
是公用组播地址,可以用于Internet;
224.0.2.0~238.255.255.255
为用户可用的组播地址(临时组地址),全网范围内有效;
239.0.0.0~239.255.255.255
为本地管理组播地址,仅在特定的本地范围内有效。 - 如果没有进行配置,
TcpDiscoveryMulticastIpFinder
默认组播地址为:228.1.2.4
xml配置方式:
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
...
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder">
<property name="multicastGroup" value="228.10.10.157"/>
</bean>
</property>
</bean>
</property>
</bean>
java配置方式:
TcpDiscoverySpi spi = new TcpDiscoverySpi();
TcpDiscoveryMulticastIpFinder ipFinder = new TcpDiscoveryMulticastIpFinder();
ipFinder.setMulticastGroup("228.10.10.157");
spi.setIpFinder(ipFinder);
IgniteConfiguration cfg = new IgniteConfiguration();
// Override default discovery SPI.
cfg.setDiscoverySpi(spi);
// Start Ignite node.
Ignition.start(cfg);
1.3 静态IP与组播结合
可采用xml或java两种方式配置。
xml配置方式:
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
...
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder">
<property name="multicastGroup" value="228.10.10.157"/>
<!-- 静态ip列表-->
<property name="addresses">
<list>
<value>1.2.3.4</value>
<!-- IP地址和可选端口范围。还可以选择指定一个单独的端口。 -->
<value>1.2.3.5:47500..47509</value>
</list>
</property>
</bean>
</property>
</bean>
</property>
</bean>
java配置方式:
TcpDiscoverySpi spi = new TcpDiscoverySpi();
TcpDiscoveryMulticastIpFinder ipFinder = new TcpDiscoveryMulticastIpFinder();
// 设置组播ip
ipFinder.setMulticastGroup("228.10.10.157");
// 设置静态IP地址。
// 注意,您可以选择指定一个端口或端口范围。
ipFinder.setAddresses(Arrays.asList("1.2.3.4", "1.2.3.5:47500..47509"));
spi.setIpFinder(ipFinder);
IgniteConfiguration cfg = new IgniteConfiguration();
//覆盖默认的发现SPI。
cfg.setDiscoverySpi(spi);
// 启动Ignite
Ignition.start(cfg);
二、配置监听端口
IgniteConfiguration cfg = new IgniteConfiguration();
TcpDiscoverySpi discoverySpi = new TcpDiscoverySpi();
// 要侦听的初始本地端口
discoverySpi.setLocalPort(48500);
// 本地端口可选范围
discoverySpi.setLocalPortRange(20);
TcpCommunicationSpi commSpi = new TcpCommunicationSpi();
// 监听其他节点的端口号
commSpi.setLocalPort(48100);
cfg.setDiscoverySpi(discoverySpi);
cfg.setCommunicationSpi(commSpi);
// Starting a node.
Ignition.start(cfg);
三、对等类
这个行为是通过对等类加载(P2P类加载)实现的,它是Ignite中的一个特别的分布式类加载器,实现了节点间的字节码交换。当对等类加载启用时,不需要在网格内的每个节点上手工地部署Java或者Scala代码,也不需要每次在发生变化时重新部署。
3.1 对等类配置
xml方式开启对等类:
<!-- 开启对等类加载 -->
<property name="peerClassLoadingEnabled" value="true" />
java方式开启对等类:
IgniteConfiguration cfg = new IgniteConfiguration();
cfg.setPeerClassLoadingEnabled(true);
// Start Ignite node.
Ignite ignite = Ignition.start(cfg);
3.2 工作原理
- Ignite会检查类是否在本地CLASSPATH中可用(是否在系统启动时加载),如果有效,就会被返回,这时不会发生从对等节点加载类的行为。
- 如果类在本地不可用,会向发起节点发送一个提供类定义的请求,发起节点会发送
类字节码定义
然后在工作节点上加载。这个过程每个类只会发生一次,即一旦一个节点上一个类定义被加载了,它就不会再次加载了。
如果不采用
对等类
方式,则需要显示部署jar包到各个集群节点,可以将它们拷贝进每个集群节点的libs文件夹,Ignite会在启动时自动加载所有的libs文件夹中的jar文件。