这是一个场景:我将我的Web应用程序部署到两个Tomcat服务器,并使用Apache Ignite来集群Web会话。负载均衡器以循环方式进行。
我使用的软件是:
以下是我在会话中输入的数据:
import java.io.Serializable;
public class SessionData implements Serializable {
private static final long serialVersionUID = 1L;
private int counter;
public int getCounter() {
return counter;
}
public void setCounter(int counter) {
this.counter = counter;
}
public SessionData() {
}
}
我可以验证两个应用程序是否共享相同的数据,一切都运行良好。
然后我将会话数据类更新为:
public class SessionData implements Serializable {
private static final long serialVersionUID = 1L;
private int counter;
private String ip;
public int getCounter() {
return counter;
}
public void setCounter(int counter) {
this.counter = counter;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public SessionData() {
}
}
我将新的Web应用程序部署到其中一台服务器上。现在,当我刷新网页时,会反过来读取和更新会话数据中的计数器,我不断从两台服务器收到以下错误,页面永远不会加载。
ERROR - root - Failed to update web session: null
class org.apache.ignite.binary.BinaryObjectException: Cannot find schema for object with compact footer [typeId=-2056860774, schemaId=1954049593]
at org.apache.ignite.internal.binary.BinaryReaderExImpl.getOrCreateSchema(BinaryReaderExImpl.java:1721)
at org.apache.ignite.internal.binary.BinaryReaderExImpl.<init>(BinaryReaderExImpl.java:278)
at org.apache.ignite.internal.binary.BinaryReaderExImpl.<init>(BinaryReaderExImpl.java:177)
at org.apache.ignite.internal.binary.BinaryReaderExImpl.<init>(BinaryReaderExImpl.java:156)
at org.apache.ignite.internal.binary.GridBinaryMarshaller.deserialize(GridBinaryMarshaller.java:298)
at org.apache.ignite.internal.binary.BinaryMarshaller.unmarshal(BinaryMarshaller.java:109)
at org.apache.ignite.cache.websession.WebSessionV2.unmarshal(WebSessionV2.java:336)
at org.apache.ignite.cache.websession.WebSessionV2.getAttribute(WebSessionV2.java:200)
我相信这是一个常见的情感。想象一下,集群中有几十个节点,我们需要一个接一个地将更新版本的Web应用程序重新部署到所有节点。在重新部署过程中,这个问题将浮出水面,用户将会受到影响。
不知道这是Apache Ignite的真正问题,还是由于我的错误配置/误解?如果有问题,有没有解决方法?或者我必须在最坏的情况下关闭所有服务器;如果我们使用持久存储,我们是否需要清除持久存储中的所有数据?
答案 0 :(得分:1)
我不确定原因,但这看起来不正确。创建了一张票:https://issues.apache.org/jira/browse/IGNITE-3194
作为一种解决方法,您可以尝试禁用紧凑的页脚。为此,请向您添加以下内容:Ignite configuration:
<property name="binaryConfiguration">
<bean class="org.apache.ignite.configuration.BinaryConfiguration">
<property name="compactFooter" value="false"/>
</bean>
</property>