Hazelcast IMDG参考中文版手册-第二章-入门

本章介绍如何安装Hazelcast并启动Hazelcast成员和客户端。它描述了下载包中的可执行文件,还提供了配置Hazelcast及其部署选项的基础知识。

2.1。安装

以下部分介绍了Hazelcast IMDGHazelcast IMDG Enterprise的安装。它还包括升级Hazelcast时要考虑的注释和更改。

2.1.1。安装Hazelcast IMDG

您可以在标准Maven存储库中找到Hazelcast。如果您的项目使用Maven,则无需向您的类路径添加额外的存储库pom.xml或将hazelcast-<version>.jar文件添加到您的类路径中(Maven会为您执行此操作)。只需将以下行添加到您的pom.xml

<dependencies>

   <dependency>

      <groupId>com.hazelcast</groupId>

      <artifactId>hazelcast</artifactId>

      <version>Hazelcast IMDG Version To Be Installed</version>

    </dependency>

</dependencies>

作为替代方案,您可以自己下载并安装Hazelcast IMDG。你只需要:

  • 下载软件包hazelcast-<version>.ziphazelcast-<version>.tar.gzhazelcast.org下载。
  • 提取下载的hazelcast-<version>.ziphazelcast-<version>.tar.gz
  • 将文件添加hazelcast-<version>.jar到类路径中。

2.1.2。安装Hazelcast IMDG Enterprise

Hazelcast IMDG Enterprise定义了两个Maven存储库:

<repository>

   <id>Hazelcast Private Snapshot Repository</id>

   <url>https://repository-hazelcast-l337.forge.cloudbees.com/snapshot/</url>

</repository>

<repository>

   <id>Hazelcast Private Release Repository</id>

   <url>https://repository-hazelcast-l337.forge.cloudbees.com/release/</url>

</repository>

Hazelcast IMDG Enterprise客户还可以定义依赖关系,其示例如下所示。

<dependency>

   <groupId>com.hazelcast</groupId>

   <artifactId>hazelcast-enterprise</artifactId>

   <version>Hazelcast IMDG Enterprise Version To Be Installed</version>

</dependency>

<dependency>

   <groupId>com.hazelcast</groupId>

   <artifactId>hazelcast-enterprise-all</artifactId>

   <version>Hazelcast IMDG Enterprise Version To Be Installed</version>

</dependency>

2.2。设置许可证密钥

Hazelcast IMDG Enterprise为您提供两种类型的许可证:企业级企业级HD。根据您拥有的许可证类型,支持的功能在Hazelcast设置中有所不同。

  • 企业许可证:除了Hazelcast的开源版本,企业功能如下:
    • 安全
    • WAN复制
    • 集群REST
    • 集群JMX
    • Striim Hot Cache
    • 滚动升级
  • Enterprise HD许可证:除Enterprise功能外,Enterprise HD功能如下:
    • 高密度存储器
    • 热重启持久性

要使用Hazelcast IMDG Enterprise,您需要使用下面显示的配置方法之一设置提供的许可证密钥。

 

仅限会员使用Hazelcast IMDG Enterprise许可证密钥。您无需为要使用IMDG Enterprise功能的Java客户端设置许可证密钥。

声明性配置:

将以下行添加到文件中您喜欢的任何位置hazelcast.xml。此XML文件为您提供了一种配置Hazelcast的声明方式。它包含在Hazelcast下载包中。解压缩下载的包时,您将hazelcast.xml在该/bin目录下看到该文件。

<hazelcast>

  ...

  <license-key>Your Enterprise License Key</license-key>

  ...

</hazelcast>

程序化配置:

或者,您可以以编程方式设置许可证密钥,如下所示。

Config config = new Config();

config.setLicenseKey( "Your Enterprise License Key" );

Spring XML配置:

如果您将SpringHazelcast一起使用,则可以使用Spring XML架构设置许可证密钥,如下所示。

<hz:config>

  ...

  <hz:license-key>Your Enterprise License Key</hz:license-key>

  ...

</hz:config>

JVM系统属性:

作为另一种选择,您可以使用以下命令(“-D”命令行选项)设置许可证密钥。

-Dhazelcast.enterprise.license.key=Your Enterprise License Key

2.2.1。许可证密钥格式

许可证密钥具有以下格式:

<Name of the Hazelcast edition>#<Count of the Members>#<License key>

之前的字符串<License key>是人类可读的部分。您可以使用许可证密钥,有或没有此可读部分。因此,以下示例许可证密钥均有效:

HazelcastEnterpriseHD#2Nodes#1q2w3e4r5t

1q2w3e4r5t

2.3。从3.x升级

  • 使用时从3.6.x升级到3.7.x JCache Hazelcast 3.7引入了JCache实现的变化,破坏了3.6.x客户端与3.7-3.7.2集群成员的兼容性,反之亦然,因此3.7-3.7.2客户端也与3.6不兼容.x集群成员。此问题仅影响使用JCache功能的Java客户端。

Hazelcast 3.7.3开始,提供了兼容性选项,可用于确保向后兼容3.6.x客户端。

为了将3.6.x群集和客户端升级到3.7.3(或更高版本),您需要在成员或客户端使用此兼容性选项,具体取决于首先升级哪个:

    • 首先将集群成员升级到3.7.3hazelcast.compatibility.3.6.client=true为配置添加属性当使用此属性启动时,集群成员与3.6.x3.7.3+客户端兼容,但与3.7-3.7.2客户端不兼容。升级群集后,可以升级应用程序以使用客户端版本3.7.3+
    • 将客户端从3.6.x升级到3.7.3hazelcast.compatibility.3.6.server=trueHazelcast客户端配置添加属性。使用此兼容性选项启动的3.7.3客户端与3.6.x3.7.3+集群成员兼容,但与3.7-3.7.2集群成员不兼容。升级客户端后,可以继续将集群成员升级到3.7.3或更高版本。

您可以使用“ 系统属性附录中所述的任何受支持的方法来配置兼容性选项。完成群集和客户端升级后,可以从Hazelcast成员配置中删除兼容性属性。

  • 使用时从3.6.x升级到3.8.x EE JCache由于兼容性问题,如果您的成员是3.8.x,其中x <5,则CacheConfig序列化可能无效。因此,您需要使用3.8.5或更高版本问题正在解决。
  • 介绍spring-aware元素:3.5版之前,Hazelcast 默认使用SpringManagedContext扫描SpringAware注释。这可能会导致不使用的用户产生一些性能开销SpringAware。随着Hazelcast 3.5的发布,这种行为已经改变。SpringAware默认情况下禁用注释。通过引入spring-aware元素,现在可以通过将<hz:spring-aware />标记添加到配置来启用它。请参阅Spring Integration部分
  • WAN复制引入新的配置选项:Hazelcast 3.6开始,现在可以为每个目标群集配置基于每个成员配置的WAN复制相关系统属性。以下4个系统属性不再有效。
  • 删除不推荐使用的getId()方法:已删除getId()界面中的方法DistributedObject。请改用该方法getName()
  • C ++客户端分发中更改自定义序列化:之前,该方法getTypeId()用于检索要序列化的对象的ID。现在,使用该方法getHazelcastTypeId(),并将对象作为此新方法的参数。此外,getTypeId()在您的自定义序列化程序类中使用,现在它也已重命名getHazelcastTypeId()。请注意,当您想要从Hazelcast 3.6.1切换到3.6.2时,这些更改也适用。
  • 关于Hazelcast系统属性的重要说明:即使Hazelcast没有推荐使用GroupProperties.java类同时受益于系统属性,也有一个更改通知已使用此类的用户。从Hazelcast 3.7开始,该课程GroupProperties.java已被替换为GroupProperty.java。在这个新类中,系统属性是新引入的HazelcastProperty对象的实例。您可以通过调用getName()方法来访问这些属性的名称HazelcastProperty
  • 删除WanNoDelayReplicationWanNoDelayReplicationHazelcast 3.7开始,删除了HazelcastWAN复制的实施。通过1在配置WanBatchReplication时将批量大小设置为,您仍可以实现此行为。有关更多信息,请参阅“ 定义WAN复制部分
  • 介绍<wan-publisher>元素:从Hazelcast 3.8开始,配置元素<target-cluster>将替换为<wan-publisher>WAN复制配置中的元素。
  • WaitNotifyService接口已重命名为OperationParker
  • 同步WAN目标群集:从Hazelcast 3.8版本开始,REST调用的URL已从更改http://member_ip:port/hazelcast/rest/wan/sync/maphttp://member_ip:port/hazelcast/rest/mancenter/wan/sync/map

2.4。从2.x升级

  • 删除不推荐使用的静态方法:删除了 Hazelcast类到达Hazelcast数据组件的静态方法。可以从HazelcastInstance界面访问这些方法的功能。您应该替换以下内容:

Map<Integer, String> customers = Hazelcast.getMap( "customers" );

HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();

// or if you already started an instance named "instance1"

// HazelcastInstance hazelcastInstance = Hazelcast.getHazelcastInstanceByName( "instance1" );

Map<Integer, String> customers = hazelcastInstance.getMap( "customers" );

  • 实例重命名为分布式对象3.0之前,术语实例存在混淆:它用于集群成员和分布式对象(映射,队列,主题等实例)。从Hazelcast 3.0开始,术语实例将仅用于Hazelcast实例,即集群成员。我们将对映射,队列等实例使用术语分布式对象。您应该使用新重命名的方法替换相关方法。3.0客户端是智能客户端,因为他们知道数据所在的集群成员,因此您可以用本机客户端替换您的lite成员。
  • public static void main( String[] args ) throws InterruptedException {
  •   HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();
  •   IMap map = hazelcastInstance.getMap( "test" );
  •   Collection<Instance> instances = hazelcastInstance.getInstances();
  •   for ( Instance instance : instances ) {
  •     if ( instance.getInstanceType() == Instance.InstanceType.MAP ) {
  •       System.out.println( "There is a map with name: " + instance.getId() );
  •     }
  •   }

}

public static void main( String[] args ) throws InterruptedException {

  HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();

  IMap map = hz.getMap( "test" );

  Collection<DistributedObject> objects = hazelcastInstance.getDistributedObjects();

  for ( DistributedObject distributedObject : objects ) {

    if ( distributedObject instanceof IMap ) {

      System.out.println( "There is a map with name: " + distributedObject.getName() );

    }

  }

}

  • 包装结构的变化: PartitionService已被转移到包装com.hazelcast.corecom.hazelcast.partition
  • 监听器API更改:3.0之前,removeListener方法将Listener对象作为参数。但是这引起了混淆,因为相同的侦听器对象可以用作不同侦听器注册的参数。所以我们改变了监听器APIaddListenermethods返回唯一ID,您可以使用此ID删除侦听器。因此,如果需要,您应该进行以下更换:
  • IMap map = hazelcastInstance.getMap( "map" );
  • map.addEntryListener( listener, true );

map.removeEntryListener( listener );

IMap map = hazelcastInstance.getMap( "map" );

String listenerId = map.addEntryListener( listener, true );

map.removeEntryListener( listenerId );

  • IMap更改:
    • tryRemove(K key, long timeout, TimeUnit timeunit) 返回boolean,指示操作是否成功。
    • tryLockAndGet(K key, long time, TimeUnit timeunit) 已移除。
    • putAndUnlock(K key, V value) 已移除。
    • lockMap(long time, TimeUnit timeunit)并被unlockMap()删除。
    • getMapEntry(K key)被重命名为getEntryView(K key)。返回的对象的类型,MapEntry类重命名为EntryView
    • 合并策略没有预定义的名称。您只需提供合并策略实现的完整类名:

<merge-policy>com.hazelcast.map.merge.PassThroughMergePolicy</merge-policy>

此外,MergePolicy接口已重命名为MapMergePolicy,并且还从已实现的merge()方法返回null,从而导致删除现有条目。

  • IQueue更改: IQueue API没有变化,但是如何IQueue配置更改。使用Hazelcast 3.0,队列不会有后备映射配置。备份计数等设置将直接在队列配置上配置。有关队列配置的详细信息,请参阅“ 队列部分
  • 事务API更改:Hazelcast 3.0中,事务API完全不同。请参阅交易章节
  • ExecutorService API更改:已删除类MultiTaskDistributedTask。新呈现的接口IExecutorService支持所有功能。请参阅执行者服务部分
  • LifeCycleService API简化了生命周期。pause()resume()restart()方法已被删除。
  • AtomicNumber AtomicNumber类已重命名为IAtomicLong
  • ICountDownLatch await()已删除操作。我们希望用户使用await()带超时参数的方法。
  • ISemaphore APIISemaphore已被大大改变。attach()detach()方法已被删除。
    • 2.x版本中,max-size驱逐策略的默认值为cluster_wide_map_size。在3.x版本中,默认为PER_NODE。升级后max-size,如果未更改,则应根据此新默认值进行设置。否则,可能会抛出OutOfMemory异常。

2.5。启动会员和客户

安装Hazelcast后,您就可以开始使用了。

在这个简短的教程中,您将执行以下活动。

  1. 使用Hazelcast分布式映射和队列创建一个简单的Java应用程序。
  2. 运行我们的应用程序两次,以拥有一个包含两个成员(JVM)的集群。
  3. 使用Hazelcast Native Java Client API从另一个Java应用程序连接到我们的集群。

让我们开始。

  • 以下代码启动第一个Hazelcast成员并创建并使用customers映射和队列。
  • public class GettingStarted {
  •  
  •    public static void main(String[] args) {
  •       Config cfg = new Config();
  •       HazelcastInstance instance = Hazelcast.newHazelcastInstance(cfg);
  •       Map<Integer, String> mapCustomers = instance.getMap("customers");
  •       mapCustomers.put(1, "Joe");
  •       mapCustomers.put(2, "Ali");
  •       mapCustomers.put(3, "Avi");
  •  
  •       System.out.println("Customer with key 1: "+ mapCustomers.get(1));
  •       System.out.println("Map Size:" + mapCustomers.size());
  •  
  •       Queue<String> queueCustomers = instance.getQueue("customers");
  •       queueCustomers.offer("Tom");
  •       queueCustomers.offer("Mary");
  •       queueCustomers.offer("Jane");
  •       System.out.println("First customer: " + queueCustomers.poll());
  •       System.out.println("Second customer: "+ queueCustomers.peek());
  •       System.out.println("Queue size: " + queueCustomers.size());
  •    }

}

  • GettingStarted第二次运行此类以启动第二个成员。成员组成一个集群,输出类似于以下内容。
  • Members {size:2, ver:2} [
  •     Member [127.0.0.1]:5701 - e40081de-056a-4ae5-8ffe-632caf8a6cf1 this
  •     Member [127.0.0.1]:5702 - 93e82109-16bf-4b16-9c87-f4a6d0873080

]

在这里,您可以看到clustersize)和成员列表versionver)的大小。当集群发生变化时,成员列表版本将增加,例如,成员离开或加入集群。

Hazelcast 3.9引入了上述成员列表格式。您可以使用系统属性启用旧版成员列表格式,该格式用于Hazelcast 3.9之前的版本hazelcast.legacy.memberlist.format.enabled。请参阅“ 系统属性一章。以下是旧成员列表格式的示例:

Members [2] {

    Member [127.0.0.1]:5701 - c1ccc8d4-a549-4bff-bf46-9213e14a9fd2 this

    Member [127.0.0.1]:5702 - 33a82dbf-85d6-4780-b9cf-e47d42fb89d4

}

  • 现在,将库添加到类路径中。这是使用Hazelcast客户端所必需的。hazelcast-client-<version>.jar
  • 以下代码启动Hazelcast Client,连接到我们的群集,并打印customers地图的大小。
  • public class GettingStartedClient {
  •  
  •     public static void main( String[] args ) {
  •         ClientConfig clientConfig = new ClientConfig();
  •         HazelcastInstance client = HazelcastClient.newHazelcastClient( clientConfig );
  •         IMap map = client.getMap( "customers" );
  •         System.out.println( "Map Size:" + map.size() );
  •     }

}

  • 运行它时,您会看到客户端正确连接到群集并将地图大小打印为3

Hazelcast还提供了一个管理中心工具,使您可以监控群集。要使用它,mancenter-<version>.war请将ZIP文件中包含的内容部署到Web服务器。您可以使用它来监视您的地图,队列和其他分布式数据结构和成员。有关使用说明,请参阅Hazelcast管理中心参考手册

默认情况下,Hazelcast使用多播来发现可以组成群集的其他成员。如果您在同一网络上与其他Hazelcast开发人员合作,您可能会发现自己在默认设置下加入他们的群集。Hazelcast提供了一种在使用多播时隔离同一网络中的群集的方法。 有关更多信息,请参阅创建群集组。或者,如果您不希望使用默认多播机制,则可以提供允许加入的固定IP地址列表。有关更多信息,请参阅加入配置部分

 

不建议将生成多播机制用于生产,因为UDP通常在生产环境中被阻止,而其他发现机制更明确。请参阅发现机制部分

 

您还可以在此处查看视频教程。

2.6。在包中使用脚本

下载并解压缩Hazelcast ZIPTAR.GZ软件包时,您将在该/bin文件夹下看到三个脚本,这些脚本为成员和集群管理提供基本功能。

以下是每个脚本的名称和说明:

  • start.shstart.bat:在工作目录*中启动默认配置的Hazelcast成员。
  • stop.shstop.bat:停止在当前工作目录中启动的Hazelcast成员。
  • cluster.sh:提供群集管理的基本功能,例如获取和更改群集状态,关闭群集或强制群集清除其持久数据并重新启动。请参阅使用脚本cluster.sh部分以了解此脚本的用法。
 

start.shstart.batscripts允许您为每个文件夹启动一个Hazelcast实例。要启动新实例,请将Hazelcast ZIP或TAR.GZ包解压缩到新文件夹中。

2.7。在Amazon EC2上部署

您可以使用第三方工具(如VagrantChefHazelcast项目部署到Amazon EC2环境中。

您可以在hazelcast-code-samplesamazon-ec2-vagrant-chefhazelcast-integration文件夹中找到一个示例部署项目(),其中包含逐步说明,您可以在hazelcast.org下载该文件夹。有关更多信息,请参阅此示例项目。

2.8。在Microsoft Azure上部署

您可以将Hazelcast群集部署到Microsoft Azure环境中。为此,您的群集应该使用适用于Microsoft AzureHazelcast Discovery插件。您可以在Hazelcast Azure GitHub存储库中找到有关此插件的信息。

有关如何将群集自动部署到Azure的信息,请参阅Hazelcast Azure插件存储库的“ 部署部分。

2.9。部署在Pivotal Cloud Foundry

Hazelcast 3.7开始,您可以将Hazelcast群集部署到Pivotal Cloud Foundry上。它可作为Pivotal Cloud Foundry Tile提供,您可以在此处下载。您可以在https://docs.pivotal.io/partners/hazelcast/index.html找到安装和使用说明以及发行说明文档。

2.10。使用Docker进行部署

您可以使用Docker容器部署Hazelcast项目。HazelcastDocker上有以下图像:

  • Hazelcast IMDG
  • Hazelcast IMDG Enterprise
  • Hazelcast管理中心
  • Hazelcast OpenShift

Docker注册表中提取图像后,您可以运行映像以使用Hazelcast的默认配置启动管理中心或Hazelcast实例。所有存储库都提供最新的稳定版本,但您也可以提取特定版本。您还可以在运行映像时指定环境变量。

如果要启动自定义Hazelcast实例,可以通过提供自己的配置文件来扩展Hazelcast图像。

此功能以Hazelcast插件的形式提供。有关配置和用法的详细信息,请参阅Hazelcast Docker上自己的GitHub回购。

 

猜你喜欢

转载自blog.csdn.net/javacodekit/article/details/81412500
今日推荐