服务器离线时会话持久性Hazelcast客户端初始化

时间:2019-02-15 15:01:09

标签: session tomcat configuration persistence hazelcast

我们正在尝试复制有关servlet和http的会话持久性的WebSphere传统(5/6/7/8/9)行为,但要使用Hazelcast和Tomcat。让我解释... 即使将WebSphere配置为复制域的客户端,WebSphere也会保留会话数据的本地寄存器。即使应该保留复制数据的服务器进程从一开始就关闭,此本地寄存器也可以正常工作。也就是说,启动客户端,会话持久性将在servlet容器内工作。显然,如果第一个Servlet容器崩溃了,就不能期望在另一个servlet容器中恢复会话,但是您的应用程序仍然可以工作。

另一方面,Tomcat容器上的Hazelcast客户端希望Hazelcast服务器(群集的至少一个成员)启动并运行以进行初始化。如果没有可用的集群成员,则初始化失败,并且Tomcat Servlet容器中的Web应用程序无法正确启动。他们不会回答任何请求。

此外,一旦初始化失败,唯一的恢复方法是关闭并重新启动tomcat Web容器(一旦hazelcast群集成员在线)。

这种行为对系统管理员而言有点苛刻:由于分布式会话持久性一直无法在线,因此没有人可以保证备份服务。这意味着启动Tomcat客户端成为一项冒险的任务,设计上只有一个故障点,这是不希望的。

现在,也许我忽略了某些东西,也许我弄错了。因此,有没有人设法启动没有服务器的Hazelcast客户端,怎么办?对于我们来说,差异是决定性的:如果我们不能使Web容器从hazelcast服务器脱机启动,那么我们必须继续使用WebSphere。

我们已经在Virtual Box 5.2.22的CentOS 7.5上进行了尝试,我们的Tomcat版本是8.5。 Hazelcast客户端和服务器是3.11.1 / 2。

<group>
    <name>Integracion</name>
    <password></password>
</group>

<network>
  <cluster-members>
    <address>hazelcastsrv1/address>
    <address>hazelcastsrv2</address>
  </cluster-members>
</network>

可悲的是,我们期望得到的是完全正确的:阅读Hazelcast手册表明,脱机服务器不允许tomcat服务应用程序。但是我们不能相信阅读的内容,因为它使库在分布式上下文中不安全。我们希望这是错误的,并且即将有好消息。

2 个答案:

答案 0 :(得分:0)

Hazelcast不是“ a single point of failure by design”。该设计是为了避免单点故障。默认情况下,数据是跨节点镜像的。

这是一个数据网格,您可以根据容量和弹性要求运行任意数量的节点,并且它们可以聚集在一起。

如果您需要3个节点才能成功运行,并且还预期1个节点可能会故障,那么您总共需要运行4个。如果发生1个故障,则您的集群仍然足够大。

答案 1 :(得分:0)

在Hazelcast中,开机/关机顺序无关紧要,只要您在关机期间提供剩余的节点,就有足够的时间来完成重新分区。例如,在4个节点的群集中,如果取出1个节点并给其他3个空间以便完成重新分区,则不会丢失数据。如果您一起取出2个节点,则群集将没有备份存储在您取出的2个节点中的1个上的数据。

对于启动,启动顺序无关紧要,因为每个节点都拥有基于一致性哈希确定的某些分区集。而且,即使有节点离开/加入一个正在运行的集群,这种所有权也会继续发生变化。