最近在总结hazelcast的资料,顺便把集群的也总结下.

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

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

组网阶段

Muticast

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

属性 解释
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)
multicast-timeout-seconds 当节点启动后,这个参数(单位:秒)指定了当前节点等待其他节点响应的时间周期。例如,设置为60秒时,每一个节点启动后通过组播协议广播消息,如果主节点在60秒内返回响应消息,则新启动的节点加入这个主节点所在的集群,如果设定时间内没有返回消息,那么节点会把自己设置为一个主节点,并创建新的集群(主节点可以理解为集群的第一个节点)。默认值为2秒
trusted-interfaces 可信任成员的IP地址。当一个节点试图加入集群,如果其不是一个可信任节点,他的加入请求将被拒绝。可以在IP的最后一个数字上使用通配符(*)来设置一个IP范围(例如:192.168.1.* 或192.168.1.100-110)

The TTL (Time To Live) field in the IP header has a double significance in multicast. As always, it controls the live time of the datagram to avoid it being looped forever due to routing errors. Routers decrement the TTL of every datagram as it traverses from one network to another and when its value reaches 0 the packet is dropped.

     //com.hazelcast.config.ConfigConfig config = new Config();config.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(true).setMulticastGroup("224.2.2.3").setMulticastPort(545327).setMulticastTimeToLive(32).setMulticastTimeoutSeconds(2).addTrustedInterface("192.168.1.102");config.getNetworkConfig().getJoin().getTcpIpConfig().setEnabled(false);config.getNetworkConfig().getJoin().getAwsConfig().setEnabled(false);

TCPIP

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

属性 解释
required-member 加入集群的成员IP地址,只有这些IP地址的成员存在时集群才会组建。也就是说如果要当前节点加入集群,必须元素中的指定的IP地址已经有集群节点先启动了,该节点才能启动,可以用于限制节点的启动顺序
member 成员的IP地址。指定要加入集群的成员IP地址,这些IP地址中的成员会相互发现对方
members member的复数形态,还可以使用-或*等符号来表达多个IP地址
connection-timeout-seconds 定义连接超时时间。Hazelcast尝试连接到一个已知的节点(member元素指定)的最大超时时间,如果在指定时间内连接失败,将会放弃连接。当参数设置太小时,可能会导致一个成员可能无法连接到集群。设置太高时,成员启动的等待时间会比较久,因为当某些元素标记的节点未启动时,需要花费较多时间等待。如果有较多的不同IP地址的成员需要加入集群,可以适当增加这个值,以保证所有的成员可以正确加入集群。默认值为5
     //com.hazelcast.config.ConfigConfig config = new Config();config.getNetworkConfig().getJoin().getTcpIpConfig().setEnabled(true).setRequiredMember("192.168.1.104").addMember("192.168.1.104").setMembers( Arrays.asList(members)).setConnectionTimeoutSeconds(60);config.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(false);config.getNetworkConfig().getJoin().getAwsConfig().setEnabled(false);

数据传输阶段

在完成集群组网完成以后Hazelcast的节点之间就会开始数据通信,因此Hazelcast还提供了大量的属性来对数据通信进行配置

属性 解释
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提供元素来指定套接字的临时对外传输端口
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还额外提供了<ssl>、<socket-interceptor>、<symmetric-encryption>四个安全相关的配置,但是需要获取Hazlecast的商用授权下载商用版本这些配置才能生效。ssl表示启用ssl传输、interceptor用于传输拦截器、symmetric-encryption用于传输数据加密。

        // com.hazelcast.config.ConfigInteger[] ports = { 0 };Config config = new Config();config.getNetworkConfig().setPublicAddress("11.22.33.44:5555");config.getNetworkConfig().setPort(5701).setPortAutoIncrement(true).setPortCount(100);config.getNetworkConfig().setOutboundPorts(Arrays.asList(ports));config.getNetworkConfig().setReuseAddress(false);config.getNetworkConfig().getInterfaces().setEnabled(false).addInterface("10.10.1.*");//Commercial authorization configuration startconfig.getNetworkConfig().getSSLConfig().setEnabled(false);config.getNetworkConfig().getSocketInterceptorConfig().setEnabled(false);config.getNetworkConfig().getSymmetricEncryptionConfig().setAlgorithm("PBEWithMD5AndDES").setSalt("thesalt").setPassword("thepass").setIterationCount(19);//Commercial authorization configuration end

Hazelcast 集群相关推荐

  1. Hazelcast集群服务(2)

    为什么80%的码农都做不了架构师?>>>    XML基本配置 如果用户没有指定或提供任何配置文件,Hazelcast默认会使用jar包中自带的配置文件--"hazelca ...

  2. Hazelcast集群服务(2)——Hazelcast基本配置

    为什么80%的码农都做不了架构师?>>>    在入门及使用案例一文介绍了什么是Hazelcast,并展示了一个简单的使用例子.原理大家都懂了,后面的篇章会给兄弟们更多干货. 本篇博 ...

  3. hazelcast集群配置_使用HazelCast进行Hibernate缓存:基本配置

    hazelcast集群配置 之前,我们对JPA缓存,机制以及hibernate提供的内容进行了介绍 . 接下来是一个使用Hazelcast作为二级缓存的Hibernate项目. 为此,我们将在JPA中 ...

  4. Hazelcast集群服务(4)——分布式Map

    在第一篇介绍Hazelcast的文章已经提到,Hazelcast为Java中绝大部分数据结构提供了分布式实现.我们常用的Map.List.Queue等数据结构可以用Hazelcast的实现类在多个集群 ...

  5. Spring Boot集成Hazelcast实现集群与分布式内存缓存

    2019独角兽企业重金招聘Python工程师标准>>> Hazelcast是Hazelcast公司开源的一款分布式内存数据库产品,提供弹性可扩展.高性能的分布式内存计算.并通过提供诸 ...

  6. hazelcast 搭建_Hazelcast 集群功能及配置

    在前2篇博文中,介绍了 Hazelcast的基本原理 和 Hazelcast基本配置. 后续的博文会逐一介绍Hazelcast的主要功能组件.本篇将详细说明Hazelcast集群组建.集群数据通信相关 ...

  7. hazelcast 搭建_Spring Boot集成Hazelcast实现集群与分布式内存缓存

    Hazelcast是Hazelcast公司开源的一款分布式内存数据库产品,提供弹性可扩展.高性能的分布式内存计算.并通过提供诸如Map,Queue,ExecutorService,Lock和JCach ...

  8. Hazelcast IMDG参考中文版手册-第五章-集群设置

    本章介绍Hazelcast集群以及集群成员和本机客户端用于构成Hazelcast集群的方法. 5.1.发现机制 Hazelcast集群是运行Hazelcast的集群成员网络.集群成员(也称为节点)自动 ...

  9. OpenFire源码学习之二十九:openfire集群配置

    集群 Openfire的给集群提供了多种方案.一种是基于Hazelcast插件,还有基于Oracle的coherence插件. Oracle的coherence插件中文开发文档:http://down ...

最新文章

  1. 搞不懂为啥都要去字节跳动,进阿里不香吗?
  2. 【计算机网络】传输层 : 总结 ( TCP / UDP 协议 | 寻址与端口 | UDP 协议 | TCP 协议特点 | TCP 连接释放 | TCP 流量控制 | TCP 拥塞控制 ) ★★★
  3. 使用javabean类用户注册
  4. iOS瀑布流实现(Swift)
  5. Eureka-提供者与消费者
  6. Struts 1高级应用
  7. sci-hub谷歌插件_Google Home Hub具有隐藏屏幕设置菜单
  8. Windows Phone 8.1 新特性 - 控件之应用程序栏
  9. java拼图游戏Mian_Java拼图游戏源码 MainApp启动器 main(): 创建主界面类对 联合开发网 - pudn.com...
  10. 计算机专业基础857考试大纲,2018年哈尔滨工业大学854计算机基础考研大纲
  11. 顺序堆栈实现数制转换以十进制数转化为八进制数为例
  12. 多元统计分析作业:中心城市综合发展水平的分析评价
  13. 打开outlook显示服务器内存不足,Outlook2013无法打开邮箱,报错提示可用内存不足...
  14. 计算机学业水平考试反思总结8百,期中考试后的反思总结800字
  15. javascript书签工具
  16. mongo分片集群部署
  17. dependency check工具的使用
  18. 第一次学游泳技巧_新手学游泳第一次下水,学会如何将身体进入水中
  19. 互联网日报 | 华为鸿蒙OS 2.0正式发布;微信小程序日活用户超4亿;百胜中国回港上市首日破发...
  20. 连接到系统上的设备没有发挥作用解决方案

热门文章

  1. 热伤风和感冒有什么区别
  2. 我们都被GitHub出卖了!逃跑吧兄弟!
  3. Your IP address is spelled incorrectly问题排查
  4. OpenCV更改图片颜色
  5. 常用的大功率电阻有哪些,电阻功率降额设计要注意什么
  6. 华米科技:庇佑之下,黄汪难设温柔乡
  7. 参考文献起止页码怎么写_【求助】有全文参考文献但没有起止页码如何办
  8. 实现财务自由的关键词汇
  9. CCRC信息安全服务资质审核费用是多少?
  10. 几乎所有编程语言的hello, world程序(1)