Ignite支持基於組播,靜態IP,Zookeeper,JDBC等方式發現節點,本文主要介紹基於Zookeeper的節點發現。
環境准備,兩台筆記本電腦A,B。A筆記本上使用VMware虛擬機安裝了Ubuntu系統C。
1、 C安裝Zookeeper
由於主要測試Ignite,這里僅僅簡單安裝一個zookeeper節點,下載zookeeper解壓后,直接執行zookeeper目錄下的bin/zkServer.sh start命令則成功啟動zookeeper。
查看Ubuntu系統C的IP地址為192.168.1.104,zookeeper默認端口為12181。
注意:這里VMware虛擬機的網絡適配器一定要選擇橋接模式,否則A機器無法訪問虛擬機。
2、 A系統運行Ignite節點1;
代碼中加粗的部分便是Ignite注冊代碼,十分簡單。
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.discovery.tcp.TcpDiscoverySpi; import org.apache.ignite.spi.discovery.tcp.ipfinder.zk.TcpDiscoveryZookeeperIpFinder; /** * * IgniteCluster01.java Create on 2017年6月3日 下午10:52:38 * * 類功能說明: 基於zookeeper集群 * * Copyright: Copyright(c) 2013 * Company: COSHAHO * @Version 1.0 * @Author coshaho */ public class IgniteCluster01 { public static void main(String[] args) { TcpDiscoverySpi spi = new TcpDiscoverySpi(); TcpDiscoveryZookeeperIpFinder ipFinder = new TcpDiscoveryZookeeperIpFinder(); // Specify ZooKeeper connection string. ipFinder.setZkConnectionString("192.168.1.104:12181"); spi.setIpFinder(ipFinder); IgniteConfiguration cfg = new IgniteConfiguration(); // Override default discovery SPI. cfg.setDiscoverySpi(spi); // Start Ignite node. Ignite ignite =Ignition.start(cfg);
System.out.println("IgniteCluster1 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(1, "ignite1"); System.out.println(cache.get(1)); System.out.println(cache.get(2)); } }
3、 B系統運行Ignite節點2;
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.discovery.tcp.TcpDiscoverySpi; import org.apache.ignite.spi.discovery.tcp.ipfinder.zk.TcpDiscoveryZookeeperIpFinder; public class IgniteCluster02 { public static void main(String[] args) { TcpDiscoverySpi spi = new TcpDiscoverySpi(); TcpDiscoveryZookeeperIpFinder ipFinder = new TcpDiscoveryZookeeperIpFinder(); // Specify ZooKeeper connection string. ipFinder.setZkConnectionString("192.168.1.104:12181"); spi.setIpFinder(ipFinder); IgniteConfiguration cfg = new IgniteConfiguration(); // Override default discovery SPI. cfg.setDiscoverySpi(spi); // Start Ignite 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)); } }
可以看到,Ignite節點2可以成功訪問到Ignite節點1存入緩存的數據。