1. 程式人生 > >Ignite集群管理——基於靜態IP的節點發現

Ignite集群管理——基於靜態IP的節點發現

pre 內部 reat configure imp clu zookeep 我們 slist

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的節點發現