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

Hazelcast是Hazelcast公司开源的一款分布式内存数据库产品,提供弹性可扩展、高性能的分布式内存计算。并通过提供诸如Map,Queue,ExecutorService,Lock和JCache等Java的许多开发人员友好的分布式实现。

了解Hazelcast
Hazelcast特性

简单易用
Hazelcast是用Java编写的,没有其他依赖关系。只需简单的把jar包引入项目的classpath即可创建集群。
无主从模式
与许多NoSQL解决方案不同,Hazelcast节点是点对点的。没有主从关系; 所有成员都存储相同数量的数据,并进行相等的处理,避免了单点故障。
弹性可扩展
Hazelcast旨在扩展成千上万的成员。新成员启动,将自动发现群集,并线性增加存储和处理能力。成员之间通过TCP保持连接和通讯。
读写快速高效
Hazelcast所有数据都存储在内存中,提供基于内存快速高效的读写能力。
Hazelcast部署拓扑
在Hazelcast官方提供两种方式部署集群(图片均来自官方文档):
如需聚焦异步或高性能大批量任务的缓存服务,嵌入式方式是相对有优势的,最明显嵌入式方式访问数据延迟性低。
独立创建Hazelcast集群,统一管理,所有的应用程序如果需要访问缓存,可通过Hazelcast客户端(有java .NET C++的实现)或Memcache客户端或简单的REST客户端访问。后续demo示例以嵌入式为例。

Hazelcast数据分区
在Hazelcast分布式环境中,默认情况下,Hazelcast有271个分区。
当启动第一个成员的时候,成员1在集群中的分区如下图:
当在集群中新添加一个节点2时,分区图如下:
在图示中,黑色分区是主分区,蓝色分区是副本分区(备份)。第一个成员具有135个主分区(黑色),并且每个分区都备份在第二个成员(蓝色)中。同时,第一个成员还具有第二个成员的主分区的副本分区。

随着成员的增多,Hazelcast将一些主要和副本分区逐个移动到新成员,使所有成员相等和冗余。只有最小量的分区将被移动到扩展Hazelcast。以下是具有四个成员的Hazelcast集群中的分区图示如下:
Hazelcast在群集成员之间平均分配分区。Hazelcast创建分区的备份,并将其分配给成员之间进行冗余。

上述插图中的分区是为了方便描述。通常,Hazelcast分区不会按照顺序分配(如这些图所示),而是随机分布。Hazelcast在成员间平均分配了分区和备份。

Hazelcast优势

Hazelcast提供开源版本。
Hazelcast无需安装,只是个极小jar包。
Hazelcast提供开箱即用的分布式数据结构,如Map,Queue,MultiMap,Topic,Lock和Executor。
Hazelcast集群非传统主从关系,避免了单点故障;集群中所有成员共同分担集群功能。
Hazelcast集群提供弹性扩展,新成员在内存不足或负载过高时能动态加入集群。
Hazelcast集群中成员分担数据缓存的同时互相冗余备份其他成员数据,防止某成员离线后数据丢失。
Hazelcast提供SPI接口支持用户自定义分布式数据结构。
Hazelcast适用场景

频繁读写数据
需要高可用分布式缓存
内存行NoSql存储
分布式环境中弹性扩展
下面我们来使用Spring Boot集成Hazelcast实现分布式集群服务看看

Spring Boot集成Hazelcast实现分布式集群服务
首先新建一个Spring Boot的gradle项目,引入Hazelcast相关jar包:

dependencies {
compile 'com.hazelcast:hazelcast'
compile 'org.springframework.boot:spring-boot-starter-web'
}
当Hazelcast包在classpath上,Spring Boot将通过下面两种方式之一为我们创建一个HazelcastInstance实例:

方式一,通过配置属性指定的Hazelcast.xml文件创建:
spring.hazelcast.config = classpath:hazelcast.xml
该方式需要编写一个hazelcast.xml文件,通过xml文件描述Hazelcast集群

方式二,通过提供一个com.hazelcast.config.Config javabean到Spring容器中(下面所有demo是基于java config方式)

@Bean
public Config hazelCastConfig() {
//如果有集群管理中心,可以配置
ManagementCenterConfig centerConfig = new ManagementCenterConfig();
centerConfig.setUrl("http://127.0.0.1:8200/mancenter");
centerConfig.setEnabled(true);
return new Config()
.setInstanceName("hazelcast-instance")
.setManagementCenterConfig(centerConfig)
.addMapConfig(
new MapConfig()
.setName("instruments")
.setMaxSizeConfig(new MaxSizeConfig(200, MaxSizeConfig.MaxSizePolicy.FREE_HEAP_SIZE))
.setEvictionPolicy(EvictionPolicy.LRU)
.setTimeToLiveSeconds(20000));
}
上面代码通过提供Config的bean时候,主要做了如下几个事:

创建一个默认名为hazelcast-instance的HazelcastInstance实例;
使用默认的组播发现模式,组播传播地址默认为:224.2.2.3,如果想修改信息或修改为TCP模式可通过setNetworkConfig()接口设置相关信息;
创建一个名为dev,访问密码为dev-pass的group保障节点加入,如果想修改组,可通过setGroupConfig()接口设置相关信息;
创建了一个名为instruments的分布式map数据结构,并设置了该map的最大容量200/逐出策略LRU/有效期20000ms等信息,当集群启动后,我们可以在任一成员节点上通过HazelcastInstance读写该map。
完整代码:

@SpringBootApplication
public class StartUp {

private Logger LOGGER = LoggerFactory.getLogger(StartUp.class);

public static void main(String[] args) {
SpringApplication.run(StartUp.class, args);
}

@Bean
public Config hazelCastConfig() {
//如果有集群管理中心,可以配置
ManagementCenterConfig centerConfig = new ManagementCenterConfig();
centerConfig.setUrl("http://127.0.0.1:8200/mancenter");
centerConfig.setEnabled(true);
return new Config()
.setInstanceName("hazelcast-instance")
.setManagementCenterConfig(centerConfig)
.addMapConfig(
new MapConfig()
.setName("instruments")
.setMaxSizeConfig(new MaxSizeConfig(200, MaxSizeConfig.MaxSizePolicy.FREE_HEAP_SIZE))
.setEvictionPolicy(EvictionPolicy.LRU)
.setTimeToLiveSeconds(20000));
}
}
下面我们通过修改server.port分别启动端口为8080和8081的成员服务
当启动完8080成员的时候,可以在8080控制台看到如下日志:

Members [1] {
Member [172.17.42.1]:5701 - 0d39dd66-d4fb-4af4-8ddb-e9f4c7bbe5a1 this
}
因我们使用的是组播传播模式,5701为节点在组播网络中分配的端口
当启动完8081成员的时候,可以在8081控制台看到如下日志:

Members [2] {
Member [172.17.42.1]:5701 - 0d39dd66-d4fb-4af4-8ddb-e9f4c7bbe5a1
Member [172.17.42.1]:5702 - a46ceeb4-e079-43a5-9c9d-c74265211bf7 this
}
回到8080控制台,发现多了一行日志:

Members [2] {
Member [172.17.42.1]:5701 - 0d39dd66-d4fb-4af4-8ddb-e9f4c7bbe5a1 this
Member [172.17.42.1]:5702 - a46ceeb4-e079-43a5-9c9d-c74265211bf7
}
发现8081成员也加入进来了。两个控制台都能看到成员列表。集群就已经搭建成功。

为了验证结果,上面我们在集群中已经创建了一个名为instruments的分布式map数据结构,现在我们通过写个接口证明:

@GetMapping("/greet")
public Object greet() {
Object value = Hazelcast.getHazelcastInstanceByName("hazelcast-instance").getMap("instruments").get("hello");
if (Objects.isNull(value)) {
Hazelcast.getHazelcastInstanceByName("hazelcast-instance").getMap("instruments").put("hello", "world!");

} LOGGER.info("从分布式缓存获取到 key=hello,value={}", value);
return value;
}
首先通过访问8080服务的/greet,第一次访问instruments中是没有key为hello的键值对,会往里面塞入{"helo":"world!"},然后访问8081服务的/greet,这个时候应该是能取得改键值对的。

完整代码:

@RestController
@SpringBootApplication
public class StartUp {

private Logger LOGGER = LoggerFactory.getLogger(StartUp.class);

public static void main(String[] args) {
SpringApplication.run(StartUp.class, args);
}

@Bean
public Config hazelCastConfig() {
//如果有集群管理中心,可以配置
ManagementCenterConfig centerConfig = new ManagementCenterConfig();
centerConfig.setUrl("http://127.0.0.1:8200/mancenter");
centerConfig.setEnabled(true);
return new Config()
.setInstanceName("hazelcast-instance")
.setManagementCenterConfig(centerConfig)
.addMapConfig(
new MapConfig()
.setName("instruments")
.setMaxSizeConfig(new MaxSizeConfig(200, MaxSizeConfig.MaxSizePolicy.FREE_HEAP_SIZE))
.setEvictionPolicy(EvictionPolicy.LRU)
.setTimeToLiveSeconds(20000));
}
@GetMapping("/greet")
public Object greet() {
Object value = Hazelcast.getHazelcastInstanceByName("hazelcast-instance").getMap("instruments").get("hello");
if (Objects.isNull(value)) {
Hazelcast.getHazelcastInstanceByName("hazelcast-instance").getMap("instruments").put("hello", "world!");

} LOGGER.info("从分布式缓存获取到 key=hello,value={}", value);
return value;
}
}
重启8080和8081服务
通过浏览器请求http://localhost:8080/greet
查看8080控制台日志:
2017-10-23 13:52:27.865 INFO 13848 --- [nio-8080-exec-1] com.hazelcast.StartUp: 从分布式缓存获取到 key=hello,value=nul

通过浏览器请求http://localhost:8081/greet
查看8081控制台日志:
2017-10-23 13:52:40.116 INFO 13860 --- [nio-8081-exec-2] com.hazelcast.StartUp: 从分布式缓存获取到 key=hello,value=world

Spring Boot为Hazelcast提供了明确的缓存支持。如果启用缓存, HazelcastInstance则会自动包含在CacheManager实现中。所以完全可以支持Spring Cache。

以往我们用Spring Cache都是基于Redis做存储后端,现在我们使用Hazelcast来尝试一下 首先在启动类上开启缓存
@EnableCaching

建立个service类,demo为了方便,写在一起
完整代码:

@EnableCaching
@RestController
@SpringBootApplication
public class StartUp {

private Logger LOGGER = LoggerFactory.getLogger(StartUp.class);

public static void main(String[] args) {
SpringApplication.run(StartUp.class, args);
}

@Bean
public Config hazelCastConfig() {
//如果有集群管理中心,可以配置
ManagementCenterConfig centerConfig = new ManagementCenterConfig();
centerConfig.setUrl("http://127.0.0.1:8200/mancenter");
centerConfig.setEnabled(true);
return new Config()
.setInstanceName("hazelcast-instance")
.setManagementCenterConfig(centerConfig)
.addMapConfig(
new MapConfig()
.setName("instruments")
.setMaxSizeConfig(new MaxSizeConfig(200, MaxSizeConfig.MaxSizePolicy.FREE_HEAP_SIZE))
.setEvictionPolicy(EvictionPolicy.LRU)
.setTimeToLiveSeconds(20000));
}
@GetMapping("/greet")
public Object greet() {
Object value = Hazelcast.getHazelcastInstanceByName("hazelcast-instance").getMap("instruments").get("hello");
if (Objects.isNull(value)) {
Hazelcast.getHazelcastInstanceByName("hazelcast-instance").getMap("instruments").put("hello", "world!");

} LOGGER.info("从分布式缓存获取到 key=hello,value={}", value);
return value;
}

@Autowired
private DemoService demoService;

@GetMapping("/cache")
public Object cache() {
String value = demoService.greet("hello"); LOGGER.info("从分布式缓存获取到 key=hello,value={}", value);
return value;
}

}

@Service
@CacheConfig(cacheNames = "instruments")
class DemoService {

private Logger LOGGER = LoggerFactory.getLogger(DemoService.class);

@Cacheable(key = "#key")
public String greet(String key) { LOGGER.info("缓存内没有取到key={}", key);
return "world!";
}

}
连续访问两次8080服务的/cache接口 第一次控制台输出日志:

2017-10-23 14:10:02.201 INFO 13069 --- [nio-8081-exec-1] com.hazelcast.DemoService: 缓存内没有取到key=hello
2017-10-23 14:10:02.202 INFO 13069 --- [nio-8081-exec-1] com.hazelcast.StartUp: 从分布式缓存获取到 key=hello,value=world!
第二次控制台输出日志:
2017-10-23 14:11:51.966 INFO 13069 --- [nio-8081-exec-3] com.hazelcast.StartUp: 从分布式缓存获取到 key=hello,value=world!

第二次比第一次相比少了执行service方法体内容,证明第二次是通过了缓存获取。

在Hazelcast官网上,有使用Hazelcast集群和Redis集群做缓存的对比
单只性能上来说,写入速度Hazelcast比Redis快44%,读取速度Hazelcast比Redis快56%
详情移步底下参考资料中链接
下面,我们再来一个尝试,既然有分布式缓存了,我们可以把我们的8080和8081服务做成一个web集群,web服务集群主要标志是前端负载均衡和session共享,我们来实现8080和8081的session共享。
Spring Session已经支持使用Hazelcast作为会话缓存后端,首先引入Spring Session jar包

dependencies {
compile 'com.hazelcast:hazelcast'
compile 'org.springframework.boot:spring-boot-starter-web'
compile 'org.springframework.session:spring-session'
}
要启用Hazelcast作为集群会话缓存后端,有两种方式
第一种Spring Boot配置文件里面配置spring.session.*属性:
spring.session.store-type=hazelcast

第二种使用java注解开启:
@EnableHazelcastHttpSession

这里选择第二种方式,要证明集群会话共享,我们定一个简单接口打印一下sessionId,通过同一浏览器访问8080和8081服务的该接口,看看不同服务请求的时候sessionId是否一致,完整代码如下:

@EnableCaching
@RestController
@EnableHazelcastHttpSession
@SpringBootApplication
public class StartUp {

private Logger LOGGER = LoggerFactory.getLogger(StartUp.class);

public static void main(String[] args) {
SpringApplication.run(StartUp.class, args);
}

@Bean
public Config hazelCastConfig() {
//如果有集群管理中心,可以配置
ManagementCenterConfig centerConfig = new ManagementCenterConfig();
centerConfig.setUrl("http://127.0.0.1:8200/mancenter");
centerConfig.setEnabled(true);
return new Config()
.setInstanceName("hazelcast-instance")
.setManagementCenterConfig(centerConfig)
.addMapConfig(
new MapConfig()
.setName("instruments")
.setMaxSizeConfig(new MaxSizeConfig(200, MaxSizeConfig.MaxSizePolicy.FREE_HEAP_SIZE))
.setEvictionPolicy(EvictionPolicy.LRU)
.setTimeToLiveSeconds(20000));
}
@GetMapping("/greet")
public Object greet() {
Object value = Hazelcast.getHazelcastInstanceByName("hazelcast-instance").getMap("instruments").get("hello");
if (Objects.isNull(value)) {
Hazelcast.getHazelcastInstanceByName("hazelcast-instance").getMap("instruments").put("hello", "world!");

} LOGGER.info("从分布式缓存获取到 key=hello,value={}", value);
return value;
}

@Autowired
private DemoService demoService;

@GetMapping("/cache")
public Object cache() {
String value = demoService.greet("hello"); LOGGER.info("从分布式缓存获取到 key=hello,value={}", value);
return value;
}

@GetMapping("/session")
public Object session(HttpSession session) {
String sessionId = session.getId(); LOGGER.info("当前请求的sessionId={}", sessionId);
return sessionId;
}
}

@Service
@CacheConfig(cacheNames = "instruments")
class DemoService {

private Logger LOGGER = LoggerFactory.getLogger(DemoService.class);

@Cacheable(key = "#key")
public String greet(String key) { LOGGER.info("缓存内没有取到key={}", key);
return "world!";
}

}
访问8080服务/session接口,控制台日志如下:
2017-10-23 14:28:41.991 INFO 14140 --- [nio-8080-exec-2] com.hazelcast.StartUp: 当前请求的sessionId=e75ffc53-90bc-41cd-8de9-e9ddb9c2a5ee

访问8081服务/session接口,控制台日志如下:
2017-10-23 14:28:45.615 INFO 14152 --- [nio-8081-exec-1] com.hazelcast.StartUp: 当前请求的sessionId=e75ffc53-90bc-41cd-8de9-e9ddb9c2a5ee
集群会话共享生效。

集群管理界面
在上面的demo中,在创建Config的时候,设置了一个ManagementCenterConfig配置,该配置是指向一个Hazelcast集群管理平台,比如demo中表示在本地启动了一个管理平台服务。该功能也是相对其他NoSql服务的一个优势。

要部署ManagementCenter管理平台有多种方式
比如通过https://download.hazelcast.com/management-center/management-center-3.8.3.zip地址下载,解压后启动;
sh ./startManCenter.sh 8200 /mancenter

如果有docker环境,直接可以docker部署:
docker run -ti -p 8200:8080 hazelcast/management-center:latest

部署成功后,访问http://ip:8200/mancenter,首次访问会让你配置个用户名密码,进入后 :
在左侧菜单栏,能看到现有支持的分布式数据格式,比如Maps下面名为instruments的是我们前面demo自己创建的,名为spring:session:sessions是我们用了Hazelcast做集群会话同步的时候Spring为我们创建的。

中间区域能看到所有节点成员的系统相关实时使用率,随便点击一个节点进去,能看到当前节点的系统实时使用率:
红圈里面的即是上面提到的节点数据分区数,通过左侧菜单栏的数据结构进去,能看到当前对应的数据结构的详细信息和实时吞吐量:
更多内容请参考下方参考资料。
示例代码可以通过https://github.com/zggg/hazelcast-in-spring-boot下载。

参考资料

为什么选Hazelcast:https://hazelcast.com/why-hazelcast/imdg/
Hazelcast官方文档:http://docs.hazelcast.org/docs/3.8.6/manual/html-single/index.html
Redis对比:https://hazelcast.com/use-cases/nosql/redis-replacement/
Redis 3.2.8 vs Hazelcast 3.8 集群基准测试对比:https://hazelcast.com/resources/benchmark-redis-vs-hazelcast/

 

来源: https://www.cnblogs.com/heishao/p/9951421.html

 

--------------------

Hazelcast与Spring集成问题

最近在项目中加入了Hazelcast第三方插件,在与Spring集成的时候,将Hazelcast配置到Spring的配置文件当中,出现了不能通过属性注入的方法,给属性赋值,代码如下:

<bean id="hazelcast" class="com.hazelcast.core.Hazelcast"
       factory-method="newHazelcastInstance">
       <constructor-arg>
           <bean class="com.hazelcast.config.Config">
               <property name="port" value="5701" />
               <property name="portAutoIncrement" value="true" />
               <property name="groupConfig">
                   <bean class="com.hazelcast.config.GroupConfig">
                       <property name="name" value="dev" />
                       <property name="password" value="pwd" />
                   </bean>
               </property>
               <property name="networkConfig">
                   <bean class="com.hazelcast.config.NetworkConfig">
                       <property name="join">
                           <bean class="com.hazelcast.config.Join">
                               <property name="multicastConfig">
                                   <bean class="com.hazelcast.config.MulticastConfig">
                                       <property name="enabled" value="false" />
                                       <property name="multicastGroup" value="224.2.2.3" />
                                       <property name="multicastPort" value="54327" />
                                   </bean>
                               </property>
                               <property name="tcpIpConfig">
                                   <bean class="com.hazelcast.config.TcpIpConfig">
                                       <property name="enabled" value="true" />
                                       <property name="members">
                                           <list>
                                               <value>10.2.108.194</value>
                                               <value>10.253.73.24</value>
                                           </list>
                                       </property>
                                   </bean>
                               </property>
                           </bean>
                       </property>
                   </bean>
               </property>
           </bean>
       </constructor-arg>
   </bean>

---------------

先将hazelcast-all-x.x.x.jar放到项目的lib中,
将hazelcast.xml复制到项目的根目录中。

<beans xmlns="http://www.springframework.org/schema/beans" 
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans                       

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd


http://www.springframework.org/schema/context

                           http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    <bean id="instance" class="com.hazelcast.core.Hazelcast" factory-method="newHazelcastInstance"></bean>
    <bean name="multiMap" factory-bean="instance" factory-method="getMultiMap">
        <constructor-arg value="userSession"/>
    </bean>
</beans>

<constructor-arg value="userSession"/>的userSession名字随便取。
在hazelcast的管理界面会显示的。
id="instance"的bean不写<constructor-arg>会在根目录中寻找hazelcast.xml文件的。
除了有getMultiMap外,还有getMap,getQueue,getTopic,getSet,getList,getExecutorService,getIdGenerator,getAtomicLong,getSemaphore,getCountDownLatch,getLock等。

@Autowired
private MultiMap<String, Object> multiMap;

在java代码中这样就可以操作MultiMap了。

------------------

hazelcast初探
Hazelcast作为一个高度可扩展的数据分发和集群平台,提供了高效的、可扩展的分布式数据存储、数据缓存。Hazelcast是开源的,在分布式技术方面,Hazelcast提供了十分友好的接口供开发者选择,如Map,Queue,ExecutorService, Lock和Jcache。
Hazelcast的稳定性很高,分布式应用可以使用Hazelcast进行存储数据、同步数据、发布订阅消息等。Hazelcast是基于Java开发的,其客户端有Java, C/C++, .NET以及REST。Hazelcast同时也支持memcache协议。它很好的支持了Hibernate,可以很容易的在当今流行的数据库系统中应用。如果你在寻找一个基于内存的、可扩展的以及对开发者友好的NoSql,那么Hazelcast是一个很不错的选择!

Hazelcast是一个高度可扩展的数据分发和集群平台。特性包括:

提供java.util.{Queue, Set, List, Map}分布式实现。
提供java.util.concurrency.locks.Lock分布式实现。
提供java.util.concurrent.ExecutorService分布式实现。
提供用于一对多关系的分布式MultiMap。
提供用于发布/订阅的分布式Topic(主题)。
通过JCA与J2EE容器集成和事务支持。
提供用于安全集群的Socket层加密。
支持同步和异步持久化。
为Hibernate提供二级缓存Provider 。
通过JMX监控和管理集群。
支持动态HTTP Session集群。
利用备份实现动态分割。
支持动态故障恢复。
1.优点

a. Hazelcast开发比较简单
Hazelcast是基于Java写的,没有任何其它的以来。它提供的API跟Java util包很像。对于开发者来说,只需要加入hazelcast.jar,然后就可以快速使用在多个JVM之间的数据共享(分布式)。

b. Hazelcast的节点之间是平等的(Peer-to-Peer)
不像其它很多的NoSql解决方案,Hazelcast的节点之间是对等的(没有主次之分)。所有的节点存储的数据都是相等的,在应用中可以很容易的增加一个Hazelcast节点。或者以客户端-服务端的形式使用。

c. Hazelcast是可扩展的
Hazelcast的扩展性非常强,可以很简单的增加或减少节点。可以自动的监听节点的增加,并以线性的方式增加存储空间和能力。节点之间的通信是以TCP的方式建立的。

d. Hazelcast效率很高。
将数据存储在内存中,所以是非常高效的,包括读操作和写操作。

e. Hazelcast是可备份的
Hazelcast的数据会在多个节点上进行备份。一旦一个节点失败了,数据将会从别的节点上进行恢复。

f. Hazelcast页面元素齐全

页面可以看到map,list等数据内容,以及一些容量的仪表图.可以看到很多有用的数据,包括每个Map的请求次数等.

2. 使用场景
分布式缓存,通常使用在数据库之前的那一层
缓存服务器
NoSql的数据存储
Spring cache
微服务的结构
储存临时数据,如web的session等

3. Hazelcast的数据拆分
Hazelcast的数据拆分叫做间隔(Partitions)。默认情况下,Hazelcast会将数据拆分成271个间隔(总数,并不是单个单点)。当传入一个key时,Hazelcast会对它进行序列化,以及进行hash的算法等算出一个数值,通过该数值它存放在相应的间隔中(271个的其中一个)。在不同的节点中存放相同数量的间隔。Hazelcast还会生成备份的间隔,同样也是存放在这些间隔中。

4.配置

配置组连接选项

<group>
<name>test</name>
<password>test</password>
</group>
配置管理页面,如果配置为true,则可以在mancenter目录下启动页面管理

<management-center enabled="true">http://10.1.4.97:8080/mancenter</management-center>
配置连接网络(自增长如果配为true,端口启动失败时会自增)

<port auto-increment="true" port-count="100">5701</port>
集群节点发现机制,自选一种

<join>
<multicast enabled="false">
<multicast-group>224.2.2.3</multicast-group>
<multicast-port>54327</multicast-port>
</multicast>
<tcp-ip enabled="true">
<interface>10.10.10.10</interface>
<member-list>
<member>10.10.10.10</member>
</member-list>
</tcp-ip>
<aws enabled="false">
<access-key>my-access-key</access-key>
<secret-key>my-secret-key</secret-key>
<!--optional, default is us-east-1 -->
<region>us-west-1</region>
<!--optional, default is ec2.amazonaws.com. If set, region shouldn't be set as it will override this property -->
<host-header>ec2.amazonaws.com</host-header>
<!-- optional, only instances belonging to this group will be discovered, default will try all running instances -->
<security-group-name>hazelcast-sg</security-group-name>
<tag-key>type</tag-key>
<tag-value>hz-nodes</tag-value>
</aws>
</join>

配置节点对套接字加密,算法可选

<symmetric-encryption enabled="false">
<!--
encryption algorithm such as
DES/ECB/PKCS5Padding,
PBEWithMD5AndDES,
AES/CBC/PKCS5Padding,
Blowfish,
DESede
-->
<algorithm>PBEWithMD5AndDES</algorithm>
<!-- salt value to use when generating the secret key -->
<salt>thesalt</salt>
<!-- pass phrase to use when generating the secret key -->
<password>thepass</password>
<!-- iteration count to use when generating the secret key -->
<iteration-count>19</iteration-count>
</symmetric-encryption>
配置执行服务器的线程和队列容量

<executor-service name="default">
<pool-size>16</pool-size>
<!--Queue capacity. 0 means Integer.MAX_VALUE.-->
<queue-capacity>0</queue-capacity>
</executor-service>

参考:http://blog.csdn.net/hengyunabc/article/details/18514563