0

アウト クラスタには、次の 5 つのノードの複合体があります。

  • 2 つのシード ノード (バックエンド)
  • 1人の労働者
  • IIS 上の 2 つの webapi

クラスターは参加し、稼働しています。しかし、2 番目の IIS がルーター経由でクラスターに最初のメッセージを送信すると、すべてのクラスターが到達不能になり、分離されます。さらに、2 番目の IIS はメッセージを配信できません。

これが私のIIS構成です:

<hocon>
  <![CDATA[
        akka.loglevel = INFO
        akka.log-config-on-start = off
        akka.stdout-loglevel = INFO
        akka.actor {
            provider = "Akka.Cluster.ClusterActorRefProvider, Akka.Cluster"
            deployment {
              /Process {
                router = round-robin-group
                routees.paths = ["/user/Process"] # path of routee on each node
                # nr-of-instances = 3 # max number of total routees
                cluster {
                    enabled = on
                    allow-local-routees = off
                    use-role = Process
                }
              }
            }
            debug {
              receive = on
              autoreceive = on
              lifecycle = on
              event-stream = on
              unhandled = on
            }
        }
        akka.remote {
            helios.tcp {
                # transport-class = "Akka.Remote.Transport.Helios.HeliosTcpTransport, Akka.Remote"
                # applied-adapters = []
                # transport-protocol = tcp
                port = 0
                hostname = 172.16.1.8
            }
            log-remote-lifecyclo-events = DEBUG
        }
        akka.cluster {
          seed-nodes = [
            "akka.tcp://ClusterActorSystem@172.16.1.8:2551",
            "akka.tcp://ClusterActorSystem@172.16.1.8:2552"
          ]
          roles = [Send]
          auto-down-unreachable-after = 10s
          # how often should the node send out gossip information?
          gossip-interval = 1s
          # discard incoming gossip messages if not handled within this duration
          gossip-time-to-live = 2s
        }
        # http://getakka.net/docs/persistence/at-least-once-delivery
        akka.persistence.at-least-once-delivery.redeliver-interval = 300s
        # akka.persistence.at-least-once-delivery.redelivery-burst-limit =
        # akka.persistence.at-least-once-delivery.warn-after-number-of-unconfirmed-attempts =
        akka.persistence.at-least-once-delivery.max-unconfirmed-messages = 1000000
        akka.persistence.journal.plugin = "akka.persistence.journal.sql-server"
        akka.persistence.journal.publish-plugin-commands = on
        akka.persistence.journal.sql-server {
            class = "Akka.Persistence.SqlServer.Journal.SqlServerJournal, Akka.Persistence.SqlServer"
            plugin-dispatcher = "akka.actor.default-dispatcher"
            table-name = EventJournal
            schema-name = dbo
            auto-initialize = on
            connection-string-name = "HubAkkaPersistence"
            refresh-interval = 1s
            connection-timeout = 30s
            timestamp-provider = "Akka.Persistence.Sql.Common.Journal.DefaultTimestampProvider, Akka.Persistence.Sql.Common"
            metadata-table-name = Metadata
        }
        akka.persistence.snapshot-store.plugin = ""akka.persistence.snapshot-store.sql-server""
        akka.persistence.snapshot-store.sql-server {
          class = "Akka.Persistence.SqlServer.Snapshot.SqlServerSnapshotStore, Akka.Persistence.SqlServer"
          plugin-dispatcher = ""akka.actor.default-dispatcher""
          connection-string-name = "HubAkkaPersistence"
          schema-name = dbo
          table-name = SnapshotStore
          auto-initialize = on
        }
  ]]>
</hocon>

global.asax 内に、クラスターへの新しいルーターを作成します。

    ClusterActorSystem = ActorSystem.Create("ClusterActorSystem");

    var backendRouter =
        ClusterActorSystem.ActorOf(
            Props.Empty.WithRouter(FromConfig.Instance), "Process");

    Send = SistemiHubClusterActorSystem.ActorOf(
        Props.Create(() => new Common.Actors.Send(backendRouter)),
        "Send");

バックエンドの設定は次のとおりです。

<hocon><![CDATA[
    akka.loglevel = INFO
    akka.log-config-on-start = on
    akka.stdout-loglevel = INFO
    akka.actor {
        provider = "Akka.Cluster.ClusterActorRefProvider, Akka.Cluster"
        debug {
          receive = on
          autoreceive = on
          lifecycle = on
          event-stream = on
          unhandled = on
        }
    }
    akka.remote {
      helios.tcp {
            # transport-class = "Akka.Remote.Transport.Helios.HeliosTcpTransport, Akka.Remote"
            # applied-adapters = []
            # transport-protocol = tcp
            # 
            # seed-node ports 2551 and 2552
            # non-seed-node port 0
            port = 2551
            hostname = 172.16.1.8
        }
        log-remote-lifecyclo-events = INFO
    }
    akka.cluster {
      seed-nodes = [
        "akka.tcp://ClusterActorSystem@172.16.1.8:2551",
        "akka.tcp://ClusterActorSystem@172.16.1.8:2552"
      ]
      roles = [Process]
      auto-down-unreachable-after = 10s
    }
  ]]></hocon>

Akka 1.1 と Akka 1.2 を使用した現在の問題

アップデート

各 IIS を直接呼び出すと、この問題は LoadBalancer (NetScaler) に関連していることがわかりました。バランサーから呼び出された場合、報告された問題に直面します。バランサーは透過的です (リクエストにいくつかのヘッダーを追加するだけです)。この問題を解決するには何を確認できますか?

4

1 に答える 1