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 がウェブサイト閲覧を簡素化するためにリニューアル

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

推薦する

MySQLのROUND関数の丸め演算における落とし穴の分析

この記事では、MySQL の ROUND 関数を使用した丸め操作の落とし穴を例を使って説明します。ご...

DockerコンテナでJupyterノートブックを設定する方法

Jupyter ノートブックは、主に Python コードの記述、より具体的にはディープラーニング開...

CSSアニメーションを使用して背景のシームレスな無限ループを実装する例

1. 需要絵が左から右へ無限ループで動く2. コードモバイルデバイスに適用されているため、rem 単...

Docker が MySQL を作成する説明

1. MySQLイメージをダウンロードするコマンド: docker pull mysql 2. コン...

HTML ファイルにファイルの内容を含める方法の概要

フォーラムでは、ネットユーザーから「HTML ファイル内の別の HTML ファイルの内容を読み取るこ...

CSS3 テキストアニメーション効果

効果 html <div class="sp-container">...

Docker プルタイムアウトの解決策

最近、Docker イメージのプルが非常に不安定です。遅く、タイムアウトすることがよくあります。 x...

TypeScript の Enum が問題となる理由

目次どうしたの?いつ使うか列挙の数を制御するビット値コントロールインデックス非数値列挙結論はType...

Docker で Tomcat を使用して Web アプリケーションを迅速にデプロイする方法の例

Docker の基本的な操作を学習した後、コンテナにいくつかの基本的なアプリケーションをデプロイして...

jquery-multiselect を使用した IE6 のバグの解決方法

jquery-multiselect (ドロップダウン ボックスをチェックボックス付きの複数選択コン...

VMware Workstationはデバイス/資格情報ガードと互換性がありません

仮想マシンをインストールするときに、「VMware ワークステーションはデバイス/資格情報ガードと互...

ネイティブjsは9マスグリッドのドラッグアンドドロップを実現します

ネイティブJSを使用して9つの正方形のグリッドを記述し、9つのグリッドの位置をドラッグして変更する効...

InnoDB がシリアル化分離レベルを実装する方法

シリアル化の実装InnoDB は 2 つの方法でシリアル化を実装します。まず、SELECT 文が明示...

Ubuntu 16.04 にソースコードから Mininet をインストールする

ミニネットMininet は軽量のソフトウェア定義ネットワークおよびテスト プラットフォームです。軽...

vue.config.js パッケージ最適化構成

Baiduの情報は多様すぎて目が回ります。心配しないでください。私はあなたのためにそれを体験しました...