hazelcast入门使用

hazelcast本来就是个java项目,所以,hazelcast的团队写了代码以后,打成jar,如果加个启动,就是独立的程序,如果采用jar依赖的方式,就是嵌入式部署,这个很好理解的

  1. 嵌入式部署,相对来说,减少网络开销,速度更快一些,但是如果挂了,会一起挂,
  2. 独立部署,独立性更好,比较隔离
  3. 角色区别,hazelcast还可以分为server和client,client不会存储数据和修改数据

嵌入式部署

嵌入式部署比较方便,而且因为是一个jvm速度上是有优势的,hazelcast的api变化幅度还是比较大的,所以,网上的资料都已经不适用了,只能自己去官网看资料,
这是地址官网文档地址
,里面有全文搜索,虽然hazelcast有spring-boot-starter,但是开发的进度比较慢,比如
5.2.1已经发布了,但是starter还没发布,所以,这里的演示不用starter

1
2
implementation 'com.hazelcast:hazelcast-spring:5.2.1'
implementation 'com.hazelcast:hazelcast:5.2.1' //hazelcast-spring依赖的hazelcast版本竟然不对,需要自己显式依赖
1
2
3
4
5
6
7
8
9
@Configuration
public class HazelcastConfiguration {
@Bean
public HazelcastInstance hazelCastConfig() {
Config config = new Config();
config.setInstanceName("dev1");
return Hazelcast.newHazelcastInstance(config);
}
}

其实hazel已经有了很多默认的配置,比如他的组播地址是224.2.2.3,它是开源的,结合这文档,然后看看代码,基本就差不多了

Hazelcast提供开箱即用的分布式数据结构,如Map,Queue,MultiMap,Topic,Lock和Executor。就是这个HazelcastInstance提供的,hazelcast也提供了分布式锁

以上的api方式使用hazelcast,还可以和spring cache结合,声明式的使用

独立部署

从图可以看出来,主要是两种,一个是zip,一个是zip slim,slim就是瘦身的意思,这个说法挺流行,不过不直观,其它的项目,可能会用without
jdk这种说法,所以,一般下载slim即可,
因为基本上环境都自带jdk了,不过jdk有400m了,可能还带了一些别的东西吧,比如源码,文档之类的东西,有兴趣的可以下载下来看看

下载以后,解压以后,这样子

可以看出来,很传统的样子,bin config lib这些都是一些中间件常见的目录结构

bat和sh都有,start和stop都有

里面给出了一些配置,而且还带实例,里面的配置,也都是有注释,是xml的形式,对应的还是那些配置

集群部署

集群部署有两种形式

  1. 使用组播
  2. 第一个节点,比如填写所有节点的ip,新加入的节点不必知道所有的节点,但是至少要知道并连接到一个已经启动的集群节点

组播协议(Multicast)组建集群

在使用组播协议(Multicast)作为自动组建集群机制时,集群中的成员不需要知道其他成员的详细地址(IP),他们仅仅是通过组播将信号广播到其他成员的监听端口中。使用之前确保网络环境支持
Multicast。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<network>
<join>
<multicast enabled="true">
<multicast-group>224.2.2.3</multicast-group>
<multicast-port>54327</multicast-port>
<multicast-time-to-live>32</multicast-time-to-live>
<multicast-timeout-seconds>2</multicast-timeout-seconds>
<trusted-interfaces>
<interface>192.168.1.102</interface>
</trusted-interfaces>
</multicast>
<tcp-ip enabled="false">
</tcp-ip>
<aws enabled="false">
</aws>
</join>
</network>

组网功能的配置由 及其子元素来确定。其中 元素用来配置 组播协议 组网的相关参数。当设置 元素中 enabled 属性为 true 时,表示启用 组播协议 组网。下面将详细说明每一个参数:

  1. enabled:[true|false],指定是否使用组播协议来组建集群。
  2. multicast-group:组播分组的IP地址。当要创建同一个网段的集群时,需要配置这个参数。取值范围从224.0.0.0到239.255.255.255,默认224.2.2.3。
  3. multicast-port:组播协议启用套接字的端口(socket port),这个端口用于Hazelcast监听外部发送来的组网请求。默认54327。
  4. multicast-time-to-live:组播协议发送包的生存时间周期(TTL)。可以从 协议官方文档 详细了解 组播协议的TTL。
  5. multicast-timeout-seconds:当节点启动后,这个参数(单位:秒)指定了当前节点等待其他节点响应的时间周期。例如,设置为60秒时,每一个节点启动后通过组播协议广播消息,如果主节点在60秒内返回响应消息,则新启动的节点加入这个主节点所在的集群,如果设定时间内没有返回消息,那么节点会把自己设置为一个主节点,并创建新的集群(主节点可以理解为集群的第一个节点)。默认值为2秒。
  6. trusted-interfaces:可信任成员的IP地址。当一个节点试图加入集群,如果其不是一个可信任节点,他的加入请求将被拒绝。可以在IP的最后一个数字上使用通配符()来设置一个IP范围(例如:192.168.1. 或192.168.1.100-110)。

TCP协议组建集群

除了使用 组播协议,还可以使用TCP/IP协议来组建集群。当使用TCP/IP来组建新集群时,第一个节点必须将所有要加入集群的节点IP地址添加到对应列表中。在集群已经运行之后,新加入的节点不必知道所有的集群节点,但是至少要知道并连接到一个已经启动的集群节点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<hazelcast>
<network>
<join>
<multicast enabled="false">
</multicast>
<tcp-ip enabled="true">
<required-member>192.168.1.104</required-member>
<member>192.168.1.104</member>
<members>192.168.1.105,192.168.1.106</members>
<connection-timeout-seconds>60</connection-timeout-seconds>
</tcp-ip>
</join>
</network>
</hazelcast>

从上面的例子可以看出使用TCP/IP组建网络涉及的配置参数并不多。首先需要将元素中的enabled属性设置为true表示启用TCP/IP协议来组网。然后每个元素对应的含义如下

  1. required-member:加入集群的成员IP地址,只有这些IP地址的成员存在时集群才会组建。也就是说如果要当前节点加入集群,必须元素中的指定的IP地址已经有集群节点先启动了,该节点才能启动,可以用于限制节点的启动顺序。
  2. member:成员的IP地址。指定要加入集群的成员IP地址,这些IP地址中的成员会相互发现对方。
  3. members:member的复数形态。在元素中可以使用逗号(“,”)分割多个IP地址。还可以使用-或*等符号来表达多个IP地址。
  4. connection-timeout-seconds:定义连接超时时间。Hazelcast尝试连接到一个已知的节点(member元素指定)的最大超时时间,如果在指定时间内连接失败,将会放弃连接。当参数设置太小时,可能会导致一个成员可能无法连接到集群。设置太高时,成员启动的等待时间会比较久,因为当某些元素标记的节点未启动时,需要花费较多时间等待。如果有较多的不同IP地址的成员需要加入集群,可以适当增加这个值,以保证所有的成员可以正确加入集群。默认值为5。