【Hazelcast系列 二】创建Hazelcast集群

Hazelcast系列 一 中介绍了什么是Hazelcast,以及为什么选择Hazelcast,在本章中我们将介绍如何配置一个Hazelcast集群。

1、集群发现机制

Hazelcast集群是一个由运行Hazelcast实例构成的网络,成员自动加入集群,成员自动加入集群依赖集群发现机制。当Hazelcast集群建立完成,集群间成员使用TCP/IP互相通信,这不受集群发现机制的约束。Hazelcast支持以下发现机制:

  • TCP

  • 多播

    多播使用UDP协议,在生产环境中,UDP经常被禁止使用,因此不推荐使用多播发现机制。

  • GCP Cloud Discovery

  • AWS Cloud Discovery

  • Apache jclouds Cloud Discovery

  • Azure Cloud Discovery

  • Zookeeper

  • Consul

  • Etcd

  • PCF

  • OpenShift

  • Eureka

  • Heroku

  • Kubernetes

Hazelcast支持业界主流的集群发现机制,可以根据自己的需求和条件选择适合自己的集群发现机制。

2、TCP发现机制

如果在你的环境中多播不是一个合适的选择,你可以把Hazelcast配置成一个完整的TPC/IP集群(发现和通信都使用TCP/IP协议)。使用TCP/IP配置Hazelcast集群成员发现时,需要列出全部或部分成员的主机名或IP地址。无需列出所有集群成员,但是当新成员加入时,至少有一个列出的成员必须在集群中处于活跃状态。

使用xml配置TPC/IP发现的简单配置如下:

<hazelcast>
    ...
    <network>
        <join>
            <multicast enabled="false">
            </multicast>
            <tcp-ip enabled="true">
                <member>machine1</member>
                <member>machine2</member>
                <member>machine3:5799</member>
                <member>192.168.1.0-7</member>
                <member>192.168.1.21</member>
            </tcp-ip>
        </join>
    </network>
    ...
</hazelcast>

除去使用xml进行配置,Hazelcast所有的配置都支持以yaml文件的方式进行配置,上面xml对应的yaml等效配置如下

  • member 可以配置主机名 和IP,也可以配置IP地址范围。
  • 如果member是多个IP地址可以使用members简化配置:
<members>192.168.1.0-7,192.168.1.21</members>
  • 如果没有提供端口,Hazelcast会从5701、5702等尝试。
  • 默认Hazelcast绑定所有的网络接口来接收流量,但是可以通过设置hazelcast.socket.bind.any=false 来改变,并通过interface 来决定绑定的网络接口,如果没有配置interface的值, Hazelcast会选择一个网络接口绑定

Hazelcast同时还支持以yaml的方式进行所有的配置,上面xml等效的yaml配置如下:

hazelcast:
  network:
    join:
      multicast:
        enabled: false
        multicast-group: 224.2.2.3
        multicast-port: 54327
      tcp-ip:
        enabled: true
        member-list:
          - machine1
          - machine2
          - machine3:5799
          - 192.168.1.0-7
          - 192.168.1.21

3、多播发现机制

Hazelcast允许集群成员间使用多播通信来相互发现。集群成员间不需要互相知道对方的具体地址,而只是向集群内所有监听的成员广播消息。多播是否可用或允许使用依赖于环境,使用前请谨慎确认,避免环境不允许使用而导致功能异常。

下面是使用xml配置多播发现机制的最简单配置:

<hazelcast>
    ...
    <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>169.254.82.121</interface>
                </trusted-interfaces>
            </multicast>
        </join>
    </network>
    ...
</hazelcast>

对于参数multicast-timeout-seconds 需要多加注意,该参数表明了一个成员等待合法的多播响应的时间,单位为s,如果在设定的时间内没有收到合法的响应,该成员就会选举自己成为leader并创建自己的集群。该参数只适用于集群无leader而且新的成员刚启动的场景。如果参数的值设置的太大,比如60s,这意味着在选举出leader之前需要等待60s之后才能进行下一次的尝试。值设置过大和过小都需要谨慎处理,如果值设置的太小,可能导致成员过早的放弃而开始下一轮尝试。

4、发现本地客户端

使用多播插件,本地java客户端和Hazelcast成员之间可以互相发现,插件以SPI机制的方式提供。为了使用多播发现Hazelcast成员和java客户端都需要配置插件。

下面的xml提供了集群配置多播发现插件的最简单配置:

<hazelcast>
    ...
    <properties>
        <property name="hazelcast.discovery.enabled">true</property>
    </properties>
    <network>
        <join>
            <multicast enabled="false">
            </multicast>
            <tcp-ip enabled="false">
            </tcp-ip>
            <discovery-strategies>
                <discovery-strategy class="com.hazelcast.spi.discovery.multicast.MulticastDiscoveryStrategy" enabled="true">
                    <properties>
                        <property name="group">224.2.2.3</property>
                        <property name="port">54327</property>
                    </properties>
                </discovery-strategy>
            </discovery-strategies>
        </join>
    </network>
    ...
</hazelcast>
  • group 多播组
  • port 多播端口

5、创建集群

通过cluster-name 是创建集群最简单的方法,cluster-name 也是对集群隔离分组的简单方式,下面创建了一个名字为IoT 的Hazelcast集群:

<hazelcast>
    <cluster-name>IoT</cluster-name>
</hazelcast>

也可以使用编码的方式配置集群。一个JVM可以运行多个Hazelcast实例,每个实例只能加入一个组(集群),每个实例只和所属集群的实例交互,与其他集群的实例隔离。

        GroupConfig iotGroupConfig = new GroupConfig();
        iotGroupConfig.setName("IoT");
        Config iotConfig = new Config();
        iotConfig.setGroupConfig(iotGroupConfig);

        GroupConfig edgeGroupConfig = new GroupConfig();
        edgeGroupConfig.setName("edge");
        Config edgeConfig = new Config();
        edgeConfig.setGroupConfig(iotGroupConfig);

        HazelcastInstance instance1 = Hazelcast.newHazelcastInstance(iotConfig);
        HazelcastInstance instance2 = Hazelcast.newHazelcastInstance(iotConfig);
        HazelcastInstance instance3 = Hazelcast.newHazelcastInstance(edgeConfig);

上面的代码创建了三个实例:instance1、instance2和instance3,其中instance1和instance属于IoT集群,instance3属于edge集群。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容