これはシナリオです。Webアプリケーションを2つのTomcatサーバーにデプロイし、Apacheセッションをクラスタ化するためにApache Igniteを使用します。ロードバランサはラウンドロビン方式で配置されます。BinaryObjectException:コンパクトフッタを持つオブジェクトのスキーマが見つかりません
私が使用するソフトウェアは、以下のとおりです。
- JDK 1.8.0_66
- のApache Tomcat 7.0.68
- のApacheのIgnite 1.6.0
- クロスロード、ロードバランサのバージョン2.65
以下は私がセッションに入れたデータです:
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() {
}
}
2つのアプリケーションが同じデータを共有し、すべてが完全に機能することを確認できます。
それから私はへのセッションデータのクラスを更新:
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() {
}
}
そして私は、サーバの1つに新しいWebアプリケーションを配備します。今度は、セッションデータのカウンタを読み込んで更新する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の本当の問題か、私の誤った設定や誤解のために気になりますか?それが問題なら、回避策はありますか?または、最悪の場合、すべてのサーバーをシャットダウンする必要があります。永続ストアを使用する場合は、永続ストア内のすべてのデータをパージする必要がありますか?
コンパクトフッターを無効にすると役立ちます!ありがとう@Valentin。なぜこの設定がどういう仕組みになっているのかを少し説明してください。コンパクトフッターが無効になっているクラスタ化されたアプリケーションに何らかの副作用がありますか?ありがとうございました。 – Yuci