在前2篇博文中,介绍了

Hazelcast的基本原理 和

Hazelcast基本配置。

后续的博文会逐一介绍Hazelcast的主要功能组件。本篇将详细说明Hazelcast集群组建、集群数据通信相关的内容,大家可以用来当做使用Hazelcast的帮助文档、或进行技术决策分析的指导文档。

Hazelcst组网

Hazelcast自称"分布式数据网格”,那他最基本、最重要的功能就是时时刻刻都在多台服务器之间工作,这样必须有网络环境对其分布式功能提供支持。Hazelcast在网络环境中工作分为2个阶段:首先是组网阶段,随后是数据传输阶段。

组网是指每个Hazelcast节点启动时,都会搜寻是否有Hazelcast节点可以连接,组网过程支持多种协议。完成组网后,节点会和其他组建成集群的节点进行通信,这个阶段就是数据传输阶段,此时只支持使用TCP/IP协议来传递数据。Hazelcast的所有网络行为,都是通过元素配置决定的。元素用来配置组建集群的相关的参数。

组播协议(Multicast)组建集群

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

下面是一个通过组播协议(Multicast)组网的例子:

224.2.2.3

54327

32

2

192.168.1.102

组网功能的配置由  及其子元素来确定。其中 元素用来配置 组播协议 组网的相关参数。当设置

元素中 enabled属性为 true时,表示启用 组播协议 组网。下面将详细说明每一个参数:

enabled:[true|false],指定是否使用组播协议来组建集群。

multicast-group:组播分组的IP地址。当要创建同一个网段的集群时,需要配置这个参数。取值范围从224.0.0.0到239.255.255.255,默认224.2.2.3。

multicast-port:组播协议启用套接字的端口(socket port),这个端口用于Hazelcast监听外部发送来的组网请求。默认54327。

multicast-time-to-live:组播协议发送包的生存时间周期(TTL)。可以从 协议官方文档 详细了解 组播协议的TTL。

multicast-timeout-seconds:当节点启动后,这个参数(单位:秒)指定了当前节点等待其他节点响应的时间周期。例如,设置为60秒时,每一个节点启动后通过组播协议广播消息,如果主节点在60秒内返回响应消息,则新启动的节点加入这个主节点所在的集群,如果设定时间内没有返回消息,那么节点会把自己设置为一个主节点,并创建新的集群(主节点可以理解为集群的第一个节点)。默认值为2秒。

trusted-interfaces:可信任成员的IP地址。当一个节点试图加入集群,如果其不是一个可信任节点,他的加入请求将被拒绝。可以在IP的最后一个数字上使用通配符(*)来设置一个IP范围(例如:192.168.1.*

或192.168.1.100-110)。

TCP协议组建集群

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

下面是一个使用TCP/IP协议来组建集群的例子:

192.168.1.104

192.168.1.104

192.168.1.105,192.168.1.106

60

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

required-member:加入集群的成员IP地址,只有这些IP地址的成员存在时集群才会组建。也就是说如果要当前节点加入集群,必须元素中的指定的IP地址已经有集群节点先启动了,该节点才能启动,可以用于限制节点的启动顺序。

member:成员的IP地址。指定要加入集群的成员IP地址,这些IP地址中的成员会相互发现对方。

members:member的复数形态。在元素中可以使用逗号(“,”)分割多个IP地址。还可以使用-或*等符号来表达多个IP地址。

connection-timeout-seconds:定义连接超时时间。Hazelcast尝试连接到一个已知的节点(member元素指定)的最大超时时间,如果在指定时间内连接失败,将会放弃连接。当参数设置太小时,可能会导致一个成员可能无法连接到集群。设置太高时,成员启动的等待时间会比较久,因为当某些元素标记的节点未启动时,需要花费较多时间等待。如果有较多的不同IP地址的成员需要加入集群,可以适当增加这个值,以保证所有的成员可以正确加入集群。默认值为5。

其他组网方式

除了上面说的 组播协议 和 TCP/IP协议

组建集群的方式,Hazelcast还为某些特定的使用场景提供了组建集群的方法。目前提供了基于亚马逊的EC2环境和jclouds组建集群,目前还没有亚马逊的云服务的使用经验,相关配置就不详细说明了,如果需要在亚马逊云部署集群可以留言一起聊聊,我会尽量把知道的分享给有需要的朋友。

Hazelcast网络运行

在完成集群组网完成以后Hazelcast的节点之间就会开始数据通信,因此Hazelcast还提供了大量的元素来对数据通信进行配置,看下面这个例子:

11.22.33.44:5555

5701

0

false

10.10.1.*

PBEWithMD5AndDES

thesalt

thepass

19

除了元素,Hazelcast还提供了上面XML中的元素来配置网络数据通信,下面我们一一介绍他的作用。

public-address

配置当前节点的对外公开地址。什么叫对外公开地址呢?默认情况下,一个节点会使用它的套接字(sockets)地址作为公开地址。但是经过网络地址转换(NAT),2个节点可能无法彼此访问。此时只有将2个节点的公开地址设置为在NAT上定义的地址才能完成连接。这种情况下,公开地址并不是本地的地址,而是一个由NAT定义的虚拟地址。这个设置对于在私有云的环境中使用Hazelcasst会非常有用。需要注意的是,这个元素的配置需要制定端口,即[domain|ip]:port 的格式。

port

指定Hazelcast用于集群成员之间数据通信的端口。Hazelcast会根据端口的使用情况自动检查可以使用的端口。检查方式主要通过元素中的port-count和auto-increment来决定。下面是关于他们的说明:

port-count:默认时,Hazelcast将尝试绑定100个端口。意思是,如果将端口设置为5701,当有一个成员加入到集群,Hazelcast将尝试在5701到5801之间寻找一个端口。当有大量的实例运行在同一个机器,而端口较为紧缺时,可以适当的加大这个数字。这个参数就是用于此目的,默认是100。

auto-increment:Hazelcast将会尝试在5701到5801之间寻找未被使的端口。通常情况下,不需要去修改这个值,这个配置已经非常方便使用。但是在某些时候,系统希望使用指定的端口,此时可以通过关闭自动增长功能来实现——将auto-increment属性设置设为false。

outbound-ports

默认情况下,在打开一个套接字(socket)用于传输数据时系统会选择一个临时端口。但是如果启用某些安全策略或防火墙可能会限制某些临时端口的使用。为了解决这个问题,Hazelcast提供元素来指定套接字的临时对外传输端口。可以像下面这样配置多个套接字端口:

33000-35000

37000,37001,37002,37003

38000,38500-38600

默认为0,表示由Hazelcast自己选择可用端口。

Reuse Address

配置地址是否可以重用。当关闭一个集群节点时,服务器的套接字(socket)端口会处于 TIME_WAIT状态。如果将元素设置为true,那么TIME_WAIT状态将被忽略,新加入的节点可以重复使用已经释放的端口。

Interfaces

指定Hazelcast使用的网络接口地址。一些服务器可能有多个网络接口(多个网卡),因此可能需要限定可用的IP地址。范围字符('*'

and '-')可以用于多个地址,例如 10.3.10.*是指从10.3.10.0到10.3.10.255的端口均可使用,又例如:10.3.10.4-18是指从10.3.10.4到10.3.10.18的IP地址(包含4和18)。将的enabled设置为true,则会启用网络接口配置(默认是禁用的),在启用网络接口配置后如果Hazelcast找不到配置的IP地址,将会输出一个异常信息,并停止启动节点。

其他商用授权配置

除了前面提到的几个配置,Hazelcast还额外提供了、、四个安全相关的配置,但是需要获取Hazlecast的商用授权下载商用版本这些配置才能生效。ssl表示启用ssl传输、interceptor用于传输拦截器、symmetric-encryption用于传输数据加密。

IPV6支持

Hazelcast的所有网络IP配置都支持IPV6。例如可以使用下面的方式来配置IP地址:

5701

FF02:0:0:0:0:0:0:1

54327

fe80::223:6cff:fe93:7c7e:5701

fe80:0:0:0:45c5:47ee:fe15:493a

fe80:0:0:0:45c5:47ee:fe15:*

fe80::223:6cff:fe93:0-5555

需要强调的是,并不是所有的环境都能有效的支持IPV6。而Hazelcast有个坑时在同时支持IPV6和IPV4的环境会优先使用IPV6作为默认地址协议,这样会导致有时组网会失败。可以将jvm系统参数java.net.preferIPv4Stack设置为true(java -Djava.net.preferIPv4Stack=[true|false]...)来指定jvm环境强制使用ipv4。

到此,Hazelcast组建集群和网络通信相关的内容介绍完毕,总的来说都是网络配置相关的说明。后续的博文会逐一介绍Hazelcast的分布式数据结构(Map、List等)和分布式功能。

hazelcast 搭建_Hazelcast 集群功能及配置相关推荐

  1. Windows下搭建Tomcat集群的配置详解

    < Windows下搭建Tomcat集群基础入门详解 > 前言 在搭建 < Apache + Tomcat 实现Web服务器集群 > 前我们还需要实现 Tomcat集群实现Se ...

  2. redis集群关闭 启动报错_使用虚拟机搭建 Redis 集群,实现数据库的负载均衡功能。...

    实操题目:使用虚拟机搭建 Redis 集群,实现数据库的负载均衡功能.并使用图文描述整个过程.先创建集群: ①创建集群需要使用ruby脚本,所以要先安装ruby环境 安装ruby环境:yum inst ...

  3. 阿里云搭建CDH集群配置邮箱告警

    阿里云搭建CDH集群配置邮箱告警 1.阿里云默认禁止25端口号.申请阿里云开通 2.配置邮箱服务 3.cdh页面配置告警 申请开通25端口号 申请一个邮箱 开通服务smtp服务 记住授权码 cdh配置 ...

  4. hadoop集群_Ambari搭建hadoop集群

    Ambari搭建hadoop集群 Ambari提供了对Hadoop更加方便快捷的管理功能,主要包含: 通过一步一步的安装向导简化了集群供应. 预先配置好关键的运维指标(metrics),可以直接查看H ...

  5. [k8s] 第二章 十分钟带你搭建k8s集群环境

    本章节主要介绍如何搭建kubernetes的集群环境 环境规划 集群类型 kubernetes集群大体上分为两类:一主多从和多主多从. 一主多从:一台Master节点和多台Node节点,搭建简单,但是 ...

  6. SaltStck 搭建Web集群运用示例 (一)

    saltstack是一个非常强大的管理工具,使用saltstack会做到标准化的管理,下面就以一个简单的示例来更加具体的了解一下saltstack的功能特性. 使用saltstack来搭建一个简单的w ...

  7. 搭建mongodb集群(副本集+分片)

    完整的搭建mongodb集群(副本集+分片)的样例... 准备四台机器,各自是bluejoe1,bluejoe2,bluejoe3,以及bluejoe0 副本集及分片策略确定例如以下: 将创建3个副本 ...

  8. 搭建glusterfs集群

    搭建glusterfs集群 Glusterfs简介 GlusterFS是Scale-Out存储解决方案Gluster的核心,它是一个开源的分布式文件系统,具有强大的横向扩展能力,通过扩展能够支持数PB ...

  9. 在集群的操作机上执行命令为什么会出现权限被拒绝_如何使用 TDengine 2.0 最新开源的集群功能?

    导读:8月3日,TDengine 发布了 v2.0 版本,这次更新最大的亮点是,我们将分布式集群功能开源.开源后,引起了很大反响,又连续几天在 GitHub 趋势榜排名第一.不少关注TDengine的 ...

最新文章

  1. NLP突破性成果 BERT 模型详细解读 bert参数微调
  2. 使用ajax+php+mysql实现数据库定时刷新
  3. 介绍几款开源好用的产品
  4. Java知识整理——基础知识
  5. 本地调试微信接口方法
  6. linux xmind无法运行,linux安装xmind的方法步骤
  7. c++ public private protect
  8. 安徽50岁计算机职称免考,50岁以上评职称免考外语
  9. 【java学习之路】(javaWeb篇)001.HTML
  10. mysql sysbench 1.0.X
  11. Spring boot集成海康威视门禁设备
  12. 第五章 项目范围管理
  13. 千峰java逆战班Day31
  14. imagemagick gif制作
  15. poj-openjudge 1042:Moles 解题报告
  16. 凝思(linx)系统ntp服务
  17. iOS - 动态库上架瘦身(去调虚拟机架构),不然验证会报错。
  18. IMU的数学模型与误差标定问题
  19. linux清空日志到黑洞,Linux中的黑洞(black hole)-/dev/null
  20. 简要讨论Python对拼多多关键字搜索、拼多多商品详情页封装API接口对于电商爆款的作用

热门文章

  1. 测试人员怎样定位bug原因
  2. 微服务设计指导-使用云原生微服务解决传统海量跑批时引起的系统间“级联雪崩”以及效率
  3. 英语口语练习四十三之7种方式说“温柔”
  4. 功能性模块:(7)检测性能评估模块(precision,recall等)
  5. 微信公众号关注回复,关键字回复全流程开发
  6. sklearn模块之朴素贝叶斯:(二)伯努利模型的实现
  7. NextCloud前端支持播放mov文件
  8. SimpleFOC之ESP32(二)—— 开环控制
  9. JS-移除class
  10. 纯CSS实现对话气泡(MD.5)