Tutorial zur Installation und Nutzungskonfiguration von Docker+nacos+seata1.3.0

Tutorial zur Installation und Nutzungskonfiguration von Docker+nacos+seata1.3.0

Ich habe vorher einen Tag damit verbracht. Obwohl Seata einfach zu bedienen und super einfach zu verwenden ist, ist die Installation und Konfiguration wirklich mühsam und ich bin auf verschiedene Fallstricke gestoßen. Kommen wir zum Punkt. o(╥﹏╥)o

1. Version

Hinweis: Wenn die Versionen nicht übereinstimmen, treten verschiedene Fehler auf. Sie können die Versionen gemäß der offiziellen Website abgleichen.

Sitz: 1.3.0
alibaba.cloud:2.2.3.RELEASE
nacos:2.0.2

2. Docker-Installation und Aufbau des Seata-Servers

2.1 Seata-Bild herunterladen

Docker Pull Seataio/Seata-Server: 1.3.0

2.2 Erstellen Sie die Datei registry.conf im Linux-Verzeichnis. Mein Pfad lautet /data/seate/registry.conf. Alle weiteren Erstellungen erfolgen in diesem Verzeichnis.

CD /Daten
mkdir-Sitz
vim-Registrierung.conf

2.3 Der Inhalt von registry.conf ist wie folgt

Registrierung {
  Typ = "nacos"
 
  nacos
    Anwendung = "Seata-Server"
    Serveradresse = "127.0.0.1:8848"
    Gruppe = "SEATA_GROUP"
    Namespace = ""
    Cluster = "Standard"
    Benutzername = ""
    Passwort = ""
  }
}
 
Konfiguration {
  Typ = "nacos"
 
  nacos
    Serveradresse = "127.0.0.1:8848"
    Namespace = ""
    Gruppe = "SEATA_GROUP"
    Benutzername = ""
    Passwort = ""
  }
}

Beachten Sie, dass Registrierung und Konfiguration in derselben Gruppe sein müssen. Ich verwende nacos als Registrierungscenter. Beachten Sie, dass die Adresse von nacos geändert werden muss.

----->>>Hier möchte ich einen Satz hinzufügen. Sie müssen eine neue Datenbank seata und drei neue Tabellen erstellen.

---------------------------------- 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(96),
    `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;

Um eine verteilte Geschäftsdatenbank zu implementieren, müssen Sie jeder Datenbank eine Undo_log-Tabelle hinzufügen , andernfalls wird ein Fehler gemeldet.

Tabelle „undo_log“ erstellen (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'Primärschlüssel',
  `branch_id` bigint(20) NICHT NULL KOMMENTAR 'Branch-Transaktions-ID',
  `xid` varchar(100) NOT NULL COMMENT 'globale Transaktions-ID',
  `Kontext` varchar(128) NOT NULL COMMENT 'undo_log Kontext, wie Serialisierung',
  `rollback_info` longblob NICHT NULL KOMMENTAR 'Rollback-Info',
  `log_status` int(11) NICHT NULL KOMMENTAR '0:normaler Status,1:Verteidigungsstatus',
  `log_created` datetime(6) NICHT NULL KOMMENTAR 'create datetime',
  `log_modified` datetime(6) NICHT NULL KOMMENTAR 'Datum und Uhrzeit ändern',
  Primärschlüssel (`id`),
  EINDEUTIGER SCHLÜSSEL `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='AT-Transaktionsmodus Undo-Tabelle';

2.4 Erstellen Sie eine Push-Konfigurationsdatei vim config.txt, um die Konfiguration in der Datei an nacos zu pushen.

vim config.txt
service.vgroupMapping.btb_tx_group=Standard
store.mode=db
store.db.datasource=Druide
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://172.0.0.1:3306/seata?useUnicode=true
store.db.Benutzer=root
store.db.password=root
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=globale_Tabelle
store.db.branchTable=Zweigtabelle
store.db.queryLimit=100
store.db.lockTable=Sperrtabelle
store.db.maxWait=5000

Beachten Sie, dass btb_tx_group mit dem Client übereinstimmen muss. Achten Sie übrigens auf den Datenbanktreiber. Wenn es 8 oder höher ist, verwenden Sie meinen Treiber. Wenn es 5.7 ist, verwenden Sie com.mysql.jdbc.Driver

2.5 Erstellen Sie ein Push-Skript. Da sich das Ausführungsskript in der nächsten Ebene von config.txt befinden muss, fügen Sie ein Verzeichnis hinzu

mkdir sh
CD-Sch
vim nacos-config.sh

Der Inhalt lautet wie folgt: Am besten keine Änderungen vornehmen

#!/usr/bin/env bash
# Urheberrecht: 1999–2019 Seata.io-Gruppe.
#
# Lizenziert unter der Apache-Lizenz, Version 2.0 (die „Lizenz“);
# Sie dürfen diese Datei nur in Übereinstimmung mit der Lizenz verwenden.
# Sie können eine Kopie der Lizenz erhalten unter
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Sofern nicht gesetzlich vorgeschrieben oder schriftlich vereinbart,
# Die Verteilung unter dieser Lizenz erfolgt auf einer "AS IS"-Basis,
# OHNE GARANTIEN ODER BEDINGUNGEN JEGLICHER ART, weder ausdrücklich noch stillschweigend.
# Siehe die Lizenz für die spezifische Sprache, die Berechtigungen regelt und
# Einschränkungen gemäß der Lizenz.
 
während getopts ":h:p:g:t:u:w:" opt
Tun
  Fall $opt-in
  H)
    Host=$OPTARG
    ;;
  P)
    port=$OPTARG
    ;;
  G)
    Gruppe=$OPTARG
    ;;
  T)
    Mieter=$OPTARG
    ;;
  u)
    Benutzername=$OPTARG
    ;;
  b)
    Passwort=$OPTARG
    ;;
  ?)
    echo " VERWENDUNGSOPTION: $0 [-h Host] [-p Port] [-g Gruppe] [-t Mandant] [-u Benutzername] [-w Passwort] "
    Ausfahrt 1
    ;;
  esac
Erledigt
 
wenn [[ -z ${host} ]]; dann
    Host=lokaler Host
fi
wenn [[ -z ${port} ]]; dann
    Port = 8848
fi
wenn [[ -z ${group} ]]; dann
    Gruppe="SEATA_GROUP"
fi
wenn [[ -z ${tenant} ]]; dann
    Mieter=""
fi
wenn [[ -z ${Benutzername} ]]; dann
    Benutzername=""
fi
wenn [[ -z ${password} ]]; dann
    Passwort=""
fi
 
nacosAddr=$Host:$Port
Inhaltstyp = "Inhaltstyp:Anwendung/json;Zeichensatz=UTF-8"
 
echo "setze nacosAddr=$nacosAddr"
echo "Gruppe festlegen=$group"
 
Fehleranzahl = 0
tempLog=$(mktemp -u)
Funktion addConfig() {
  curl -X POST -H "${contentType}" "http://$nacosAddr/nacos/v1/cs/configs?dataId=$1&group=$group&content=$2&tenant=$tenant&username=$username&password=$password" >"${tempLog}" 2>/dev/null
  wenn [[ -z $(cat "${tempLog}") ]]; dann
    echo " Bitte überprüfen Sie den Clusterstatus. "
    Ausfahrt 1
  fi
  wenn [[ $(cat "${tempLog}") =~ "true" ]]; dann
    echo "$1=$2 erfolgreich gesetzt"
  anders
    echo "Setzen von $1=$2 fehlgeschlagen"
    (( Fehleranzahl++ ))
  fi
}
 
Anzahl=0
für Zeile in $(cat $(dirname "$PWD")/config.txt | sed s/[[:space:]]//g); mache
  (( zählen++ ))
	Schlüssel=${line%%=*}
    Wert=${line#*=}
	addConfig "${Schlüssel}" "${Wert}"
Erledigt
 
echo "================================================================================="
echo " Initialisierungsparameter vollständig, Gesamtanzahl: $count , Anzahl der Fehler: $failCount "
echo "================================================================================="
 
wenn [[ ${failCount} -eq 0 ]]; dann
	echo " Initialisierung der Nacos-Konfiguration abgeschlossen, bitte starten Sie den Seata-Server. "
anders
	echo " Initialisierung der Nacos-Konfiguration fehlgeschlagen. "
fi

2.6 Führen Sie das Push-Skript aus, gefolgt von der Nacos-IP-Adresse. Wenn der Port nicht 8848 ist, müssen Sie -p 8884 hinzufügen, um Ihren Port festzulegen.

bash nacos-config.sh -h 127.0.0.1

2.7 Erstellen Sie einen Container. Beachten Sie, dass Sie die externe Netzwerk-IP-Adresse schreiben müssen, wenn SEATA_IP ein Alibaba Cloud-Server ist.

docker run -d --restart always --name seata-server -p 8091:8091 -e SEATA_IP=172.0.0.1 -e SEATA_CONFIG_NAME=file:/data/seata/registry -v /data/seata:/data/seata seataio/seata-server:1.3.0

3. Client (d. h. Microservice, der Seata im Projekt verwendet)

3.1 pom.xml führt Abhängigkeiten ein

<!-- Verteilte Transaktionen von Seata -->
        <Abhängigkeit>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
            <Ausschlüsse>
                <Ausschluss>
                    <groupId>io.seata</groupId>
                    <artifactId>seata-spring-boot-starter</artifactId>
                </Ausschluss>
            </Ausschlüsse>
        </Abhängigkeit>
        <Abhängigkeit>
            <groupId>io.seata</groupId>
            <artifactId>seata-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </Abhängigkeit>

Beachten Sie, dass das ursprüngliche io.seata-Paket entfernt werden muss und die Paketversionen von Server und Client konsistent sein müssen.

3.2 Projektkonfigurationsdateien konfigurieren

#sitzen
seata.application-id=${spring.application.name}
seata.tx-service-group=btb_tx_group
seata.config.type=nacos
seata.config.nacos.server-addr=172.0.0.1:8848
seata.config.nacos.group=SITZGRUPPE
seata.registry.type=nacos
seata.registry.nacos.application=seata-server
seata.registry.nacos.server-addr=172.0.0.1:8848
seata.registry.nacos.group=SITZGRUPPE

Hinweis: Die btb_tx_group hier sollte mit dem Schlüssel nach dem vgroupMapping auf dem Server übereinstimmen.

Beispiel: service.vgroupMapping.btb_tx_group=default

3.3 Anmerkungen zur Verwendung hinzufügen

@GlobalTransactional

Erweiterung: Ich habe eine Datenbank verwendet und während der Ausführung wurde ein Fehler gemeldet, der besagte, dass mir ein Primärschlüssel fehlte. Daher habe ich der Undo_log-Tabelle eine inkrementelle Primärschlüssel-ID hinzugefügt. Das SQL zum Erstellen der Undo_log-Tabelle oben ist das, dem ich die ID hinzugefügt habe, und das offizielle ist ohne ID. Bitte beachten! ! ! !

Frage: In der Singular-Quelle liegt ein Fehler vor. Der Grund ist, dass ich eine Datenbank bin und die Proxy-Konfiguration wie folgt festlegen muss. Gemäß meiner tatsächlichen Situation bezieht es sich auf die Konfigurationsdatei, andernfalls wird ein Fehler gemeldet.

#Einzelne Datenquelle seata.enable-auto-data-source-proxy=true
#Mehrere Datenquellenseata.enable-auto-data-source-proxy=false

Dies ist das Ende dieses Artikels über die Installation und Verwendung von Docker+nacos+seata1.3.0. Weitere Informationen zur Installation und Verwendung von Docker+nacos+seata finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung des Implementierungsprozesses der Bereitstellung im Nacos-Docker-Standalone-Modus
  • Detailliertes Tutorial zur Installation von Nacos in Docker und zur Konfiguration der Datenbank
  • Bringen Sie Ihnen bei, wie Sie Nacos in Docker bereitstellen

<<:  LinkedIn wird überarbeitet, um das Surfen auf der Website zu vereinfachen

>>:  So verwenden Sie Xtrabackup zum Sichern und Wiederherstellen von MySQL

Artikel empfehlen

Lösung für leere Seite nach Vue-Verpackung

1. Lösung für das Problem, dass die Seite leer is...

Detaillierte Erläuterung der Redis-Master-Slave-Replikationspraxis mit Docker

Inhaltsverzeichnis 1. Hintergrund 2. Bedienungssc...

So legen Sie Remotezugriffsberechtigungen in MySQL 8.0 fest

Im vorherigen Artikel wurde erklärt, wie man das ...

Schleifenmethoden und verschiedene Durchlaufmethoden in js

Inhaltsverzeichnis for-Schleife While-Schleife do...

So ändern Sie das ROOT-Passwort in MySql8.0 und höheren Versionen richtig

Bereitstellungsumgebung: Installationsversion Red...

Vorteile von INSERT INTO SET in MySQL

Daten in MySQL-Datenbank einfügen. Bisher häufig ...

Analyse des Prinzips und der Verwendung von MySQL-Benutzerdefinierten Funktionen

Dieser Artikel veranschaulicht anhand von Beispie...

Löschvorgang für Docker-Volumes

prune Um diesen Befehl verwenden zu können, müsse...

Vue-Anfängerhandbuch: Erstellen des ersten Vue-cli-Scaffolding-Programms

1. Vue – Das erste Vue-CLI-Programm Die Entwicklu...

JavaScript zum Wechseln zwischen mehreren Bildern

In diesem Artikel wird der spezifische JavaScript...