zoukankan      html  css  js  c++  java
  • 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));
        }
    }
  • 相关阅读:
    VUE脚手架,babel转码 常用命令
    ES6那些事半功倍的新特性(一)
    vuex中怎么把‘库’中的状态对象赋值给内部对象(三种方法)
    VUE自定义指令生命周期,VUE生命周期
    判断是数组还是对象的方法
    利用cordova打包H5混合app
    webstorm皮肤外观样式快速设置,CMD的使用方法,webstorm11激活方法
    数组操作方法中的splice()和concat() 以及slice()
    Angularjs跨域
    Node.js的基础知识(一)
  • 原文地址:https://www.cnblogs.com/coshaho/p/6921404.html
Copyright © 2011-2022 走看看