seata docker 高可用性デプロイメントの詳細な紹介

seata docker 高可用性デプロイメントの詳細な紹介

バージョン

1.4.2
公式ドキュメント
ドッカーハブ

起動する

環境変数SEATA_CONFIG_NAMEを使用して、設定ファイルの場所/root/seata-config/registry.confを指定します。

docker run --name seata-server \
        -p 8091:8091 \
        -e SEATA_CONFIG_NAME=ファイル:/root/seata-config/registry \ 
        -v /User/seata/config:/root/seata-config \
        seataio/seata-server

設定ファイル

高可用性を実現するには、登録センター、構成センター、データベースに依存する必要があります。
レジストリ.conf

レジストリ {
  タイプ = "ナコス"

  ナコス
    アプリケーション = "seata-server"
    サーバーアドレス = "192.168.199.2"
    名前空間 = "テスト"
    グループ = "SEATA_GROUP"
    クラスター = "デフォルト"
    ユーザー名 = ""
    パスワード = ""
  }
}

設定{
  タイプ = "ナコス"  
  ナコス
    サーバーアドレス = "192.168.199.2"
    名前空間 = "テスト"
    グループ = "SEATA_GROUP"
    ユーザー名 = ""
    パスワード = ""
  }
}

NACOS 構成

注: nacos 構成を使用する場合、すべての構成を含むプロパティ ファイルを作成するのではなく、対応するグループ (SEATA_GROUP) の下の各構成項目のテキスト値を構成する必要があります。公式ソース コードのスクリプトを使用して、使用可能なすべての構成参照をインポートできます。

1. データベースの使用

ストアモード=db
store.db.datasource=ドルイド
ストア.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.user=ルート
ストア.db.パスワード=123456

データベースを作成する

データベース作成スクリプト

-- -------------------------------- storeMode が 'db' の場合に使用されるスクリプト --------------------------------
-- GlobalSessionデータを保存するテーブル
存在しない場合はテーブルを作成 `global_table`
(
    `xid` VARCHAR(128) NOT NULL、
    `transaction_id` BIGINT、
    `status` TINYINT NOT NULL、
    `アプリケーションID` VARCHAR(32)、
    `transaction_service_group` VARCHAR(32)、
    `トランザクション名` VARCHAR(128)、
    `タイムアウト` INT,
    `begin_time` BIGINT、
    `application_data` VARCHAR(2000)、
    `gmt_create` 日付時刻、
    `gmt_modified` 日付時刻、
    主キー (`xid`)、
    キー `idx_gmt_modified_status` (`gmt​​_modified`, `status`),
    キー `idx_transaction_id` (`transaction_id`)
) エンジン = InnoDB
  デフォルト文字セット = utf8;

-- BranchSessionデータを保存するテーブル
`branch_table` が存在しない場合はテーブルを作成します
(
    `branch_id` BIGINT NOT NULL、
    `xid` VARCHAR(128) NOT NULL、
    `transaction_id` BIGINT、
    `リソースグループID` VARCHAR(32)、
    `resource_id` VARCHAR(256)、
    `branch_type` VARCHAR(8)、
    `ステータス` TINYINT、
    `client_id` VARCHAR(64)、
    `application_data` VARCHAR(2000)、
    `gmt_create` 日付時刻(6)、
    `gmt_modified` 日付時刻(6)、
    主キー (`branch_id`)、
    キー `idx_xid` (`xid`)
) エンジン = InnoDB
  デフォルト文字セット = utf8;

-- ロックデータを保存するテーブル
存在しない場合はテーブルを作成する `lock_table`
(
    `row_key` VARCHAR(128) NOT NULL、
    `xid` VARCHAR(128)、
    `transaction_id` BIGINT、
    `branch_id` BIGINT NOT NULL、
    `resource_id` VARCHAR(256)、
    `テーブル名` VARCHAR(32)、
    `pk` VARCHAR(36)、
    `gmt_create` 日付時刻、
    `gmt_modified` 日付時刻、
    主キー (`row_key`)、
    キー `idx_branch_id` (`branch_id`)
) エンジン = InnoDB
  デフォルト文字セット = utf8;

例外処理

1. クライアントがエラーを報告します: 列 'application_id' のデータが長すぎます

io.seata.core.exception.TmTransactionException: TransactionException[グローバル要求の開始に失敗しました。xid=null、msg=データの切り捨て: 行 1 の列 'application_id' のデータが長すぎます]
io.seata.tm.DefaultTransactionManager.begin(DefaultTransactionManager.java:55) で ~[seata-all-1.3.0.jar:1.3.0]
io.seata.tm.api.DefaultGlobalTransaction.begin(DefaultGlobalTransaction.java:104) で ~[seata-all-1.3.0.jar:1.3.0]
io.seata.tm.api.TransactionalTemplate.beginTransaction(TransactionalTemplate.java:175) で ~[seata-all-1.3.0.jar:1.3.0]

seata データベースの global_table.application_id フィールドのデフォルトの長さは varchar(32) です。クライアント アプリケーション ID が長すぎる場合、このエラーが報告されます。フィールド タイプを手動で変更して長さを増やすことができます。

seata docker 高可用性デプロイメントに関するこの記事はこれで終わりです。 seata docker デプロイメントに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。 今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • SEATAトランザクションサービスDockerのデプロイ手順の詳細説明
  • Docker は 2003 年の問題を解決するために MySQL リモート接続を導入しました
  • MySQL8 ベースの docker-compose デプロイメント プロジェクトの実装

<<:  JavaScript におけるシリアル操作と並列操作

>>:  CSS3 変換によって子要素の固定位置を絶対位置に変更する方法

推薦する

MySQL シリーズ 14 MySQL 高可用性実装

1. 内閣府マスターノードを監視することで、他のスレーブノードへの自動フェイルオーバーを実現できます...

Vue プロジェクトに Electron を追加するための詳細なコード

1. package.jsonに追加する "メイン": "electr...

入力テキストボックスの入力実装プロパティを無効にする

今日は、開発でよく使われる、非常に便利な HTML タグをいくつかまとめてみたいと思います。これらの...

MySQL InnoDB ロックの概要

目次1. 共有ロックと排他ロック2. 意図ロック3. レコードロック4. ギャップロック5. ネクス...

テキストの両側に水平線を描くための CSS のサンプルコード

この記事では、テキスト中央の両側に水平線を引く効果を実現する CSS のサンプルコードを紹介し、皆さ...

アップロード画像コントロールを実現するネイティブ js

この記事の例では、アップロード画像コントロールを実装するためのjsの具体的なコードを参考までに共有し...

MySQL のインデックス障害の一般的なシナリオと回避方法

序文これまでにも、一部の SQL ステートメントを不適切に使用すると MySQL インデックスが失敗...

Nginx バージョンのスムーズなアップグレードソリューションの詳細説明

目次背景: Nginx スムーズ アップグレード ソリューションフォールバック手順要約する背景:負荷...

Linux で圧縮ファイルの内容を表示する 10 の方法 (要約)

一般的に、アーカイブされたファイルや圧縮されたファイルの内容を表示するには、まず解凍してから表示する...

...

Ubuntu 18.04 のすべての Python ライブラリを一度にアップグレードする方法

ピップとは何かpip は、Python パッケージの検索、ダウンロード、インストール、アンインストー...

Windows サービス 2012 Alibaba Cloud サーバーで MySQL をビルドするときに msvcr100.dll ファイルが見つからないという問題を解決します

解決策1: msvcr100.dll ファイルをダウンロードし (インターネットからソース ファイル...

MySQL における識別子の大文字と小文字の区別の問題の詳細な分析

MySQL では、テーブル名の大文字と小文字の区別の問題が発生する可能性があります。実際、これはプラ...

JS初心者が配列を処理するための実践的な方法のまとめ

join() メソッド: 指定された区切り文字を使用して配列内のすべての要素を文字列に接続します。例...