Eine detaillierte Einführung in die Bereitstellung von Seata Docker mit hoher Verfügbarkeit

Eine detaillierte Einführung in die Bereitstellung von Seata Docker mit hoher Verfügbarkeit

Version

1.4.2
Offizielle Dokumentation
Dockerhub

Start-up

Geben Sie den Speicherort der Konfigurationsdatei /root/seata-config/registry.conf über die Umgebungsvariable SEATA_CONFIG_NAME an

docker run --name seata-server \
        -p 8091:8091 \
        -e SEATA_CONFIG_NAME=Datei:/root/seata-config/registry \ 
        -v /Benutzer/seata/config:/root/seata-config \
        seataio/seata-server

Konfigurationsdateien

Um eine hohe Verfügbarkeit zu erreichen, müssen Sie sich auf das Registrierungscenter, das Konfigurationscenter und die Datenbank verlassen können.
registry.conf

Registrierung {
  Typ = "nacos"

  nacos
    Anwendung = "Seata-Server"
    serverAddr = "192.168.199.2"
    Namespace = "Test"
    Gruppe = "SEATA_GROUP"
    Cluster = "Standard"
    Benutzername = ""
    Passwort = ""
  }
}

Konfiguration {
  Typ = "nacos"  
  nacos
    serverAddr = "192.168.199.2"
    Namespace = "Test"
    Gruppe = "SEATA_GROUP"
    Benutzername = ""
    Passwort = ""
  }
}

NACOS-Konfiguration

Hinweis: Wenn Sie die Nacos-Konfiguration verwenden, müssen Sie für jedes Konfigurationselement unter der entsprechenden Gruppe (SEATA_GROUP) Textwerte konfigurieren, anstatt eine Eigenschaftendatei mit allen Konfigurationen zu erstellen. Sie können das Skript im offiziellen Quellcode verwenden, um alle verfügbaren Konfigurationsreferenzen zu importieren

1. Verwenden einer Datenbank

store.mode=db
store.db.datasource=Druide
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://192.168.199.2:3306/seata?useUnicode=true&rewriteBatchedStatements=true
store.db.Benutzer=root
store.db.password=123456

Erstellen einer Datenbank

Skript zur Datenbankerstellung

---------------------------------- Das Skript, das verwendet wird, wenn der StoreMode „db“ ist ---------------------------------
-- die Tabelle zum Speichern von GlobalSession-Daten
TABELLE ERSTELLEN, WENN `global_table` NICHT VORHANDEN IST
(
    `xid` VARCHAR(128) NICHT NULL,
    `Transaktions-ID` BIGINT,
    `status` TINYINT NICHT NULL,
    `Anwendungs-ID` VARCHAR(32),
    `Transaktionsservicegruppe` VARCHAR(32),
    `Transaktionsname` VARCHAR(128),
    `Zeitüberschreitung` INT,
    `begin_time` BIGINT,
    `Anwendungsdaten` VARCHAR(2000),
    `gmt_create` DATETIME,
    `gmt_modified` DATETIME,
    PRIMÄRSCHLÜSSEL (`xid`),
    SCHLÜSSEL `idx_gmt_modified_status` (`gmt_modified`, `status`),
    SCHLÜSSEL `idx_transaction_id` (`Transaktions-ID`)
) ENGINE = InnoDB
  STANDARD-ZEICHENSATZ = utf8;

-- die Tabelle zum Speichern von BranchSession-Daten
TABELLE ERSTELLEN, WENN `branch_table` NICHT VORHANDEN IST
(
    `branch_id` BIGINT NICHT NULL,
    `xid` VARCHAR(128) NICHT NULL,
    `Transaktions-ID` BIGINT,
    `Ressourcengruppen-ID` VARCHAR(32),
    `Ressourcen-ID` VARCHAR(256),
    `Zweigtyp` VARCHAR(8),
    `status` TINYINT,
    `client_id` VARCHAR(64),
    `Anwendungsdaten` VARCHAR(2000),
    `gmt_create` DATETIME(6),
    `gmt_modified` DATETIME(6),
    PRIMÄRSCHLÜSSEL (`branch_id`),
    SCHLÜSSEL `idx_xid` (`xid`)
) ENGINE = InnoDB
  STANDARD-ZEICHENSATZ = utf8;

- die Tabelle zur Speicherung der Sperrdaten
TABELLE ERSTELLEN, WENN `lock_table` NICHT VORHANDEN IST
(
    `row_key` VARCHAR(128) NICHT NULL,
    `xid` VARCHAR(128),
    `Transaktions-ID` BIGINT,
    `branch_id` BIGINT NICHT NULL,
    `Ressourcen-ID` VARCHAR(256),
    `Tabellenname` VARCHAR(32),
    `pk` VARCHAR(36),
    `gmt_create` DATETIME,
    `gmt_modified` DATETIME,
    PRIMÄRSCHLÜSSEL (`row_key`),
    SCHLÜSSEL `idx_branch_id` (`branch_id`)
) ENGINE = InnoDB
  STANDARD-ZEICHENSATZ = utf8;

Ausnahmebehandlung

1. Der Client meldet einen Fehler: Daten zu lang für Spalte „application_id“

io.seata.core.exception.TmTransactionException: TransactionException[Beginn der globalen Anforderung fehlgeschlagen. xid=null, msg=Datenkürzung: Daten zu lang für Spalte „application_id“ in Zeile 1]
bei io.seata.tm.DefaultTransactionManager.begin(DefaultTransactionManager.java:55) ~[seata-all-1.3.0.jar:1.3.0]
bei io.seata.tm.api.DefaultGlobalTransaction.begin(DefaultGlobalTransaction.java:104) ~[seata-all-1.3.0.jar:1.3.0]
bei io.seata.tm.api.TransactionalTemplate.beginTransaction(TransactionalTemplate.java:175) ~[seata-all-1.3.0.jar:1.3.0]

Die Standardlänge des Felds global_table.application_id in der Seata-Datenbank ist varchar(32). Wenn die Client-Anwendungs-ID zu lang ist, wird dieser Fehler gemeldet. Sie können den Feldtyp manuell ändern, um die Länge zu erhöhen.

Dies ist das Ende dieses Artikels über die Bereitstellung von Seata Docker mit hoher Verfügbarkeit. Weitere relevante Inhalte zur Bereitstellung von Seata Docker finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung des Bereitstellungsprozesses des SEATA-Transaktionsdienstes Docker
  • Docker stellt eine MySQL-Remoteverbindung bereit, um 2003-Probleme zu lösen
  • Implementierung eines Docker-Compose-Bereitstellungsprojekts basierend auf MySQL8

<<:  So ändern Sie die feste Positionierung untergeordneter Elemente durch CSS3-Transformation in eine absolute Positionierung

>>:  Basiswissen: Was bedeutet http vor einer Website-Adresse?

Artikel empfehlen

Zusammenfassung der Wissenspunkte zu Null in der MySQL-Datenbank

In der MySQL-Datenbank ist Null eine häufige Situ...

So verwenden Sie SVG-Symbole in WeChat-Applets

SVG wurde in den letzten Jahren aufgrund seiner v...

So verwenden Sie Nginx, um einen RTMP-Liveserver auszuführen

Dieses Mal haben wir einen RTMP-Liveübertragungss...

So stellen Sie mit C++ eine Verbindung zu MySQL her

C++ stellt zu Ihrer Information eine Verbindung z...

3 Möglichkeiten zum Erstellen von JavaScript-Objekten

Inhaltsverzeichnis 1. Objektliterale 2. Das neue ...

Mehrere Möglichkeiten zum Zentrieren einer Box in der Webentwicklung

1. Notieren Sie mehrere Methoden zum Zentrieren d...

Lösung für das Problem des MySQL-Master-Slave-Switch-Kanals

Nach der VIP-Konfiguration wird beim Aktiv/Standb...

JavaScript zum Erzielen eines Vollbild-Seiten-Scrolleffekts

Nachdem ich mit der Lektüre von JavaScript DOM fe...

So verwenden Sie JS WebSocket zur Implementierung eines einfachen Chats

Inhaltsverzeichnis Kurze Umfrage Langfristige Abf...

HTML-Tabellen-Tag-Tutorial (45): Tabellen-Body-Tag

Mit dem Tag <tbody> wird der Stil des Tabel...