Docker+nacos+seata1.3.0 のインストールと使用設定チュートリアル

Docker+nacos+seata1.3.0 のインストールと使用設定チュートリアル

これに先立ち、1日かけてやってみました。Seataは使い方が簡単で超シンプルですが、インストールや設定が本当に面倒で、いろいろな落とし穴に遭遇しました。本題に入りましょう。オ(╥﹏╥)オ

1. バージョン

注意:バージョンが一致しないと、さまざまなエラーが発生します。公式サイトに従ってバージョンを合わせることができます。

シータ:1.3.0
alibaba.cloud:2.2.3.リリース
ナコス:2.0.2

2. Dockerのインストールとseataサーバーの構築

2.1 seataイメージをダウンロードする

docker pull seataio/seata-server:1.3.0

2.2 Linux ディレクトリに registry.conf を作成します。私のパスは /data/seate/registry.conf です。以降のすべての作成はこのディレクトリにあります。

cd /データ
mkdir シート
vim レジストリ.conf

2.3 registry.confの内容は次のとおりです。

レジストリ {
  タイプ = "ナコス"
 
  ナコス
    アプリケーション = "seata-server"
    サーバーアドレス = "127.0.0.1:8848"
    グループ = "SEATA_GROUP"
    名前空間 = ""
    クラスター = "デフォルト"
    ユーザー名 = ""
    パスワード = ""
  }
}
 
設定{
  タイプ = "ナコス"
 
  ナコス
    サーバーアドレス = "127.0.0.1:8848"
    名前空間 = ""
    グループ = "SEATA_GROUP"
    ユーザー名 = ""
    パスワード = ""
  }
}

レジストリと設定は同じグループにある必要があることに注意してください。登録センターとして nacos を使用します。nacos のアドレスを変更する必要があることに注意してください。

----->>>ここで文を追加したいと思います。新しいデータベース seata と 3 つの新しいテーブルを作成する必要があります。

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

分散ビジネス データベースを実装するには、各データベースに undo_log テーブルを追加する必要があります。そうしないと、エラーが報告されます。

テーブル `undo_log` を作成します (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主キー',
  `branch_id` bigint(20) NOT NULL COMMENT 'ブランチトランザクションID',
  `xid` varchar(100) NOT NULL COMMENT 'グローバルトランザクションID',
  `context` varchar(128) NOT NULL COMMENT 'undo_logコンテキスト、シリアル化など',
  `rollback_info` longblob NOT NULL COMMENT 'ロールバック情報',
  `log_status` int(11) NOT NULL COMMENT '0:通常状態、1:防御状態',
  `log_created` datetime(6) NOT NULL COMMENT 'create datetime',
  `log_modified` datetime(6) NOT NULL COMMENT 'modify datetime',
  主キー (`id`)、
  ユニークキー `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='AT トランザクション モード UNDO テーブル';

2.4 プッシュ設定ファイル vim config.txt を作成し、ファイル内の設定を nacos にプッシュします。

vim config.txt
service.vgroupMapping.btb_tx_group=デフォルト
ストアモード=db
store.db.datasource=ドルイド
ストア.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.user=ルート
store.db.password=ルート
ストア.db.minConn=5
ストア.db.maxConn=30
store.db.globalTable=グローバルテーブル
store.db.branchTable=ブランチテーブル
ストア.db.クエリ制限=100
store.db.lockTable=ロックテーブル
ストア.db.maxWait=5000

btb_tx_group はクライアントと一貫性がある必要があることに注意してください。ちなみに、データベース ドライバーに注意してください。8 以上の場合は、私のドライバーを使用してください。5.7 の場合は、com.mysql.jdbc.Driver を使用してください。

2.5 プッシュスクリプトを作成します。実行スクリプトはconfig.txtの次のレイヤーに配置する必要があるため、ディレクトリを追加します。

mkdir sh
cd sh
vim nacos-config.sh

内容は以下のとおりです。変更は行わない方がよいでしょう

#!/usr/bin/env バッシュ
# 著作権 1999-2019 Seata.io グループ。
#
# Apache License バージョン 2.0 (以下「ライセンス」) に基づいてライセンス供与されます。
# ライセンスに従わない限り、このファイルを使用することはできません。
# ライセンスのコピーは以下から入手できます。
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# 適用法で義務付けられている場合、または書面で同意されている場合を除き、ソフトウェア
# ライセンスに基づいて配布されるものは「現状有姿」で配布されます。
# 明示的または黙示的を問わず、いかなる種類の保証または条件もありません。
# 権限と使用許諾を規定する具体的な言語についてはライセンスを参照してください。
# ライセンスに基づく制限。
 
getopts ":h:p:g:t:u:w:" が opt されるとき
する
  ケース$opt in
  h)
    ホスト=$OPTARG
    ;;
  p)
    ポート=$OPTARG
    ;;
  グ)
    グループ=$OPTARG
    ;;
  t)
    テナント=$OPTARG
    ;;
  u)
    ユーザー名=$OPTARG
    ;;
  わ)
    パスワード=$OPTARG
    ;;
  ?)
    echo " 使用オプション: $0 [-h ホスト] [-p ポート] [-g グループ] [-t テナント] [-u ユーザー名] [-w パスワード] "
    出口1
    ;;
  エサック
終わり
 
[[ -z ${host} ]]の場合
    ホスト=ローカルホスト
フィ
[[ -z ${port} ]]の場合
    ポート=8848
フィ
[[ -z ${group} ]]の場合
    グループ="SEATA_GROUP"
フィ
[[ -z ${tenant} ]]の場合
    テナント=""
フィ
[[ -z ${username} ]];の場合
    ユーザー名=""
フィ
[[ -z ${password} ]]の場合
    パスワード=""
フィ
 
nacosAddr=$ホスト:$ポート
コンテンツタイプ="コンテンツタイプ:application/json;文字セット=UTF-8"
 
echo "nacosAddr=$nacosAddr を設定"
echo "グループ=$group を設定"
 
失敗回数=0
tempLog=$(mktemp -u)
関数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
  [[ -z $(cat "${tempLog}") ]]; の場合
    echo " クラスターのステータスを確認してください。 "
    出口1
  フィ
  [[ $(cat "${tempLog}") =~ "true" ]] の場合、
    echo "$1=$2 の設定に成功しました"
  それ以外
    echo "$1=$2 の設定に失敗しました "
    (( 失敗回数++ ))
  フィ
}
 
カウント=0
$(cat $(dirname "$PWD")/config.txt | sed s/[[:space:]]//g); の行に対して
  (( カウント++ ))
	キー=${行%%=*}
    値=${行番号*=}
	addConfig "${キー}" "${値}"
終わり
 
エコー "= ...
echo " 初期化パラメータを完了しました。合計数:$count、失敗数:$failCount "
エコー "= ...
 
[[ ${failCount} -eq 0 ]]の場合
	echo " Init nacos config が完了しました。seata-server を起動してください。"
それ以外
	echo " init nacos config が失敗しました。 "
フィ

2.6 プッシュ スクリプトを実行し、その後に nacos IP アドレスを指定します。ポートが 8848 でない場合は、-p 8884 を追加してポートを設定する必要があります。

bash nacos-config.sh -h 127.0.0.1

2.7 コンテナを作成します。SEATA_IP が Alibaba Cloud サーバーの場合は、外部ネットワーク IP アドレスを書き込む必要があることに注意してください。

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. クライアント(つまり、プロジェクトで seata を使用するマイクロサービス)

3.1 pom.xml は依存関係を導入します

<!-- Seata 分散トランザクション -->
        <依存関係>
            <グループ ID>com.alibaba.cloud</グループ ID>
            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
            <除外事項>
                <除外>
                    <groupId>io.seata</groupId>
                    <artifactId>seata-spring-boot-starter</artifactId>
                </除外>
            </除外>
        </依存関係>
        <依存関係>
            <groupId>io.seata</groupId>
            <artifactId>seata-spring-boot-starter</artifactId>
            <バージョン>1.3.0</バージョン>
        </依存関係>

元の io.seata パッケージを削除する必要があり、サーバーおよびクライアントのパッケージ バージョンが一致している必要があることに注意してください。

3.2 プロジェクト構成ファイルを構成する

#シータ
seata.application-id=${spring.application.name}
seata.tx-サービスグル​​ープ=btb_tx_group
seata.config.type=ナコス
seata.config.nacos.server-addr=172.0.0.1:8848
seata.config.nacos.group=SEATA_GROUP
seata.registry.type=ナコス
seata.registry.nacos.application=seata サーバー
seata.registry.nacos.server-addr=172.0.0.1:8848
seata.registry.nacos.group=SEATA_GROUP

注: ここでの btb_tx_group は、サーバーの vgroupMapping の後のキーと一致している必要があります。

例: service.vgroupMapping.btb_tx_group=default

3.3 使用するための注釈を追加する

@グローバルトランザクション

拡張:データベースを使用したところ、実行時に主キーが不足しているというエラーが報告されたため、undo_log テーブルに増分主キー ID を追加しました。上記の undo_log テーブルを作成するための SQL は ID を追加したもので、正式な SQL には ID がありません。ご留意ください! ! ! !

質問:単一のソースにエラーがあります。 理由は、データベースであり、プロキシ構成を次のように設定する必要があるためです。 私の実際の状況によると、これは構成ファイルを参照しており、そうでない場合はエラーが報告されます。

#単一データソース seata.enable-auto-data-source-proxy=true
#複数のデータソースseata.enable-auto-data-source-proxy=false

Docker+nacos+seata1.3.0のインストールと使用に関する記事はこれで終了です。Docker+nacos+seataのインストールと使用に関する詳細については、123WORDPRESS.COMの以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも123WORDPRESS.COMをよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Nacos docker スタンドアロンモードのデプロイメントの実装プロセスの詳細な説明
  • docker に nacos をインストールしてデータベースを構成する詳細なチュートリアル
  • dockerでnacosをデプロイする方法を教えます

<<:  LinkedIn がウェブサイト閲覧を簡素化するためにリニューアル

>>:  あまり多くのコードを書かずに、ハイパーリンクを使ってシンプルで美しいカスタムチェックボックスを実装できます。

推薦する

CSS で複数の境界線を実装するためのヒント

1. 複数の国境[1]背景: ボックスシャドウ、アウトライン使用シナリオの多様性を考慮すると、複数の...

17 個の JavaScript ワンライナー

目次1. DOMとBOM関連1. 要素にフォーカスがあるかどうかを確認する2. 要素の兄弟ノードをす...

Vite と Vue CLI の長所と短所

Vue エコシステムには Vite と呼ばれる新しいビルド ツールがあり、Vue CLI よりも 1...

Linux で crontab 出力リダイレクトが有効にならない問題の解決方法

質問LINUX では、定期的なタスクは通常、cron デーモン プロセス [ps -ef | gre...

Linux で完全な Samba サーバーを構築する方法 (CentOS バージョン)

序文smb は、クライアントとサーバー間の Web 接続および情報通信に使用できるプロトコルの名前で...

丸い角や鋭い角を表現するために、絵の代わりに文字を使用する研究

Google Gmail ページから撮った次のスクリーンショットをご覧ください (同じ場所からスクリ...

標準のMySQL (x64) Windowsバージョンのインストール手順の詳細な説明

MySQL x64 はインストーラーを提供していません、インストーラーを提供していません、インストー...

MySQLオンラインデッドロック分析練習

序文MySQL を学習する際に、MySQL のロック メカニズムについて簡単に理解したことがあると思...

VueはOpenLayersを使用してTiandi MapとAmapを読み込み

目次1. 世界地図1. VueにOpenLayersをインストールする2. アマップ1. 世界地図1...

document.getElementBy系メソッドがオブジェクトを取得できない問題を解決する

getElementByIdはオブジェクトを取得できませんブラウザがドキュメントを解析するときにはシ...

Linux での一般的なシェル スクリプト コマンドと関連知識

目次1. 覚えておくべき知識1. 変数タイプ2. シェル変数の説明3. シングルクォート、ダブルクォ...

設定ファイルを変更した後、操作を再開します

余計なことは言わないで、コードだけ見てみましょう〜 # docker-compose をダウン # ...

MySql の集計関数に条件式を追加する方法

MySQL のフィルタリングのタイミングは、集計関数で使用される where 条件と having ...

HTML+CSS+JavaScript でガールフレンド版のスクラッチ カードを作成します (一度見ればすぐに覚えられます)

誰もがスクラッチ チケットで遊んだことがあると思います。子供の頃、ポケットにお金が入るとすぐに友達に...

よく使われる HTML 形式のタグ_Powernode Java Academy

1. タイトルHTML では、<h1></h1> から <h6>...