Ignite集群管理——基于静态IP的节点发现

Posted coshaho

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ignite集群管理——基于静态IP的节点发现相关的知识,希望对你有一定的参考价值。

Ignite作为分布式内存,集群管理必不可少,Ignite支持基于组播,静态IP,Zookeeper,JDBC等方式发现节点,本文主要介绍基于静态IP的节点发现。

两个最重要的TCP通信设置类:

1、 TcpDiscoverySpi

用于设置集群维持与节点发现的tcp通信ip,port。

2、 TcpCommunicationSpi

用于设置业务数据(缓存数据)tcp通信的ip,port。

3、 两者的区别与联系

TcpDiscoverySpi用于维持管理集群,交换的是用户不感知的ignite内部数据;

TcpCommunicationSpi用于业务数据交换;

TcpCommunicationSpi设置的业务数据交换ip,port通过TcpDiscoverySpi在集群间传递。

对于集群管理,我们主要关心TcpDiscoverySpi的设置,TcpDiscoverySpi可以设置节点发现方法(setDiscoverySpi),TcpDiscoveryVmIpFinder用于设置静态IP,TcpDiscoveryVmIpFinder设置了一个IP,即可以感知到此IP能感知到的所有节点信息。

我用了2台笔记本电脑运行了3个Ignite节点,并配置了静态IP发现规则,每个节点都成功的获取到了不同节点缓存的数据。

3个Ignite节点类结构一致,代码如下:

 

package com.coshaho.learn.ignite.cluster;

import java.util.Arrays;

import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi;
import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;

/**
 * 
 * IgniteCluster1.java Create on 2017年5月30日 下午8:42:18    
 *    
 * 类功能说明:   运行在IP为192.168.1.103的笔记本上的Ignite节点
 *
 * Copyright: Copyright(c) 2013 
 * Company: COSHAHO
 * @Version 1.0
 * @Author coshaho
 */
public class IgniteCluster1 
{
    public static void main(String[] args)
    {
        IgniteConfiguration cfg=new IgniteConfiguration();
        // Explicitly configure TCP discovery SPI to provide list of initial nodes
        // from the first cluster.
        
        TcpDiscoverySpi discoverySpi=new TcpDiscoverySpi();
        // Initial local port to listen to.
        discoverySpi.setLocalPort(49100);
        // Changing local port range. This is an optional action.
        discoverySpi.setLocalPortRange(20);

        TcpDiscoveryVmIpFinder ipFinder=new TcpDiscoveryVmIpFinder();
        ipFinder.setAddresses(Arrays.asList("192.168.1.105:49300..49320"));
        // Overriding IP finder.
        discoverySpi.setIpFinder(ipFinder);
        // Overriding discovery SPI.
        cfg.setDiscoverySpi(discoverySpi);

        // Explicitly configure TCP communication SPI by changing local port number for
        // the nodes from the first cluster.
        TcpCommunicationSpi commSpi=new TcpCommunicationSpi();
        commSpi.setLocalPort(48100);
        // Overriding communication SPI.
        cfg.setCommunicationSpi(commSpi);

        // Starting a node.
        Ignite ignite = Ignition.start(cfg);
        System.out.println("IgniteCluster1 start OK.");
        CacheConfiguration<Integer, String> cacheCfg = new CacheConfiguration<Integer, String>();
        cacheCfg.setName("myCache");
        IgniteCache<Integer, String> cache = ignite.getOrCreateCache(cacheCfg);
        System.out.println(cache.get(1));
        System.out.println(cache.get(2));
        System.out.println(cache.get(3));
    }
}

 

package com.coshaho.learn.ignite.cluster;

import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
import org.apache.ignite.cache.CacheMode;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi;
import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;

/**
 * 
 * IgniteCluster2.java Create on 2017年5月30日 下午8:42:07    
 *    
 * 类功能说明:   运行在IP为192.168.1.105的笔记本上的Ignite节点
 *
 * Copyright: Copyright(c) 2013 
 * Company: COSHAHO
 * @Version 1.0
 * @Author coshaho
 */
public class IgniteCluster2 
{
    public static void main(String[] args)
    {
        IgniteConfiguration cfg=new IgniteConfiguration();
        // Explicitly configure TCP discovery SPI to provide list of initial nodes
        // from the second cluster.
        
        TcpDiscoverySpi discoverySpi=new TcpDiscoverySpi();
        // Initial local port to listen to.
        discoverySpi.setLocalPort(49200);
        // Changing local port range. This is an optional action.
        discoverySpi.setLocalPortRange(20);
        // Overriding discovery SPI.
        cfg.setDiscoverySpi(discoverySpi);

        // Explicitly configure TCP communication SPI by changing local port number for
        // the nodes from the second cluster.
        TcpCommunicationSpi commSpi=new TcpCommunicationSpi();
        commSpi.setLocalPort(48200);
        cfg.setCommunicationSpi(commSpi);

        // Starting a node.
        Ignite ignite =Ignition.start(cfg);
        System.out.println("IgniteCluster2 start OK.");
        CacheConfiguration<Integer, String> cacheCfg = new CacheConfiguration<Integer, String>();
        cacheCfg.setBackups(1);
        cacheCfg.setCacheMode(CacheMode.PARTITIONED);
        cacheCfg.setName("myCache");
        IgniteCache<Integer, String> cache = ignite.getOrCreateCache(cacheCfg);
        cache.put(2, "ignite2");
        System.out.println(cache.get(1));
        System.out.println(cache.get(2));
        System.out.println(cache.get(3));
        
    }
}
package com.coshaho.learn.ignite.cluster;

import java.util.Arrays;

import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
import org.apache.ignite.cache.CacheMode;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi;
import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;

/**
 * 
 * IgniteCluster3.java Create on 2017年5月30日 下午8:41:22    
 *    
 * 类功能说明:   运行在IP为192.168.1.105的笔记本上的Ignite节点
 *
 * Copyright: Copyright(c) 2013 
 * Company: COSHAHO
 * @Version 1.0
 * @Author coshaho
 */
public class IgniteCluster3 {
    public static void main(String[] args)
    {
        // 192.168.1.105  192.168.1.103
        IgniteConfiguration cfg=new IgniteConfiguration();

        // Explicitly configure TCP discovery SPI to provide list of initial nodes
        // from the first cluster.
        TcpDiscoverySpi discoverySpi=new TcpDiscoverySpi();
        // Initial local port to listen to.
        discoverySpi.setLocalPort(49300);
        // Changing local port range. This is an optional action.
        discoverySpi.setLocalPortRange(20);
        
        TcpDiscoveryVmIpFinder ipFinder=new TcpDiscoveryVmIpFinder();
        ipFinder.setAddresses(Arrays.asList("192.168.1.105:49200..49220"));
        // Overriding IP finder.
        discoverySpi.setIpFinder(ipFinder);
        // Overriding discovery SPI.
        cfg.setDiscoverySpi(discoverySpi);

        TcpCommunicationSpi commSpi=new TcpCommunicationSpi();
        commSpi.setLocalPort(48300);
        cfg.setCommunicationSpi(commSpi);

        // Starting a node.
        Ignite ignite = Ignition.start(cfg);
        System.out.println("IgniteCluster3 start OK.");
        CacheConfiguration<Integer, String> cacheCfg = new CacheConfiguration<Integer, String>();
        cacheCfg.setBackups(1);
        cacheCfg.setCacheMode(CacheMode.PARTITIONED);
        cacheCfg.setName("myCache");
        IgniteCache<Integer, String> cache = ignite.getOrCreateCache(cacheCfg);
        cache.put(3, "ignite3");
        System.out.println(cache.get(1));
        System.out.println(cache.get(2));
        System.out.println(cache.get(3));
    }
}

 

以上是关于Ignite集群管理——基于静态IP的节点发现的主要内容,如果未能解决你的问题,请参考以下文章

Ignite: 架构及工具

无法在现有Apache Ignite单节点集群中创建缓存

如何通过静态IP地址连接apache点燃节点

基于已有集群动态发现方式部署 Etcd 集群

Apache Spark + Ignite 集群瘦客户端

使用 TcpDiscoveryKubernetesIpFinder 在 Kubernetes 集群中无法发现 Ignite