單機(jī)及集群兩種方式部署Seata揖盘。
我們來學(xué)習(xí)部署單機(jī) Seata TC Server,常用于學(xué)習(xí)或測(cè)試使用亚隅,不建議在生產(chǎn)環(huán)境中部署單機(jī)怕膛。
因?yàn)?TC 需要進(jìn)行全局事務(wù)和分支事務(wù)的記錄缀棍,所以需要對(duì)應(yīng)的存儲(chǔ)宅此。目前,TC 有兩種存儲(chǔ)模式( store.mode ):
-
file
模式:適合單機(jī)模式爬范,全局事務(wù)會(huì)話信息在內(nèi)存中讀寫父腕,并持久化本地文件 root.data,性能較高青瀑。 -
db
模式:適合集群模式璧亮,全局事務(wù)會(huì)話信息通過 db 共享萧诫,相對(duì)性能差點(diǎn)。
一枝嘶、部署單機(jī) TC Server
顯然帘饶,我們將采用 file 模式,最終我們部署單機(jī) TC Server 如下圖所示:
1.1 下載 Seata 軟件包
打開 Seata 下載頁面群扶,選擇想要的 Seata 版本及刻。這里,我們選擇 v1.1.0 最新版本竞阐。
由于github國內(nèi)訪問有問題缴饭,我使用的相關(guān)的一臺(tái)阿里云服務(wù)器進(jìn)行下載后通過xftp傳輸?shù)奖镜亍?/p>
# 創(chuàng)建目錄
$ mkdir -p /Users/guoxiuzhi/Seata
$ cd /Users/guoxiuzhi/Seata
# 下載
$ wget https://github.com/seata/seata/releases/download/v1.1.0/seata-server-1.1.0.tar.gz
# 解壓
$ tar -zxvf seata-server-1.1.0.tar.gz
# 查看目錄
$ cd seata
$ ls -ls
24 -rw-r--r-- 1 guoxiuzhi staff 11365 May 13 2019 LICENSE
0 drwxr-xr-x 4 guoxiuzhi staff 128 Apr 2 07:46 bin # 執(zhí)行腳本
0 drwxr-xr-x 9 guoxiuzhi staff 288 Feb 19 23:49 conf # 配置文件
0 drwxr-xr-x 138 guoxiuzhi staff 4416 Apr 2 07:46 lib # seata-*.jar + 依賴庫
1.2 啟動(dòng) TC Server
執(zhí)行nohup sh bin/seata-server.sh &
命令,啟動(dòng) TC Server 在后臺(tái)骆莹。在 nohup.out 文件中颗搂,我們看到如下日志,說明啟動(dòng)成功:
# 使用 File 存儲(chǔ)器
2020-06-18 08:36:01.302 INFO [main]io.seata.common.loader.EnhancedServiceLoader.loadFile:247 -load TransactionStoreManager[FILE] extension by class[io.seata.server.store.file.FileTransactionStoreManager]
2020-06-18 08:36:01.302 INFO [main]io.seata.common.loader.EnhancedServiceLoader.loadFile:247 -load SessionManager[FILE] extension by class[io.seata.server.session.file.FileBasedSessionManager]
# 啟動(dòng)成功
2020-06-18 08:36:01.597 INFO [main]io.seata.core.rpc.netty.RpcServerBootstrap.start:155 -Server started ...
默認(rèn)配置下幕垦,Seata TC Server 啟動(dòng)在 8091 端點(diǎn)丢氢。
因?yàn)槲覀兪褂?file 模式,所以可以看到用于持久化的本地文件 root.data智嚷。操作命令如下
$ ls -ls sessionStore/
total 0
0 -rw-r--r-- 1 guoxiuzhi staff 0 Apr 2 08:36 root.data
二卖丸、部署集群 TC Server
集群 Seata TC Server,實(shí)現(xiàn)高可用盏道,生產(chǎn)環(huán)境下必備稍浆。在集群時(shí),多個(gè) Seata TC Server 通過 db 數(shù)據(jù)庫猜嘱,實(shí)現(xiàn)全局事務(wù)會(huì)話信息的共享衅枫。
同時(shí),每個(gè) Seata TC Server 可以注冊(cè)自己到注冊(cè)中心上朗伶,方便應(yīng)用從注冊(cè)中心獲得到他們弦撩。最終我們部署 集群 TC Server 如下圖所示:Seata TC Server 對(duì)主流的注冊(cè)中心都提供了集成,具體可見 discovery 目錄论皆。前面文章的注冊(cè)中心使用 Nacos 益楼,這里我們采用它。
2.1 下載 Seata 軟件包
方法同上面的單機(jī)版下載步驟点晴。
2.2 初始化數(shù)據(jù)庫
在 MySQL 中感凤,創(chuàng)建seata
數(shù)據(jù)庫,并在該庫下執(zhí)行如下腳本粒督。
使用 mysql.sql 腳本陪竿,初始化 Seata TC Server 的 db 數(shù)據(jù)庫。腳本內(nèi)容如下:
-- -------------------------------- The script used when storeMode is 'db' --------------------------------
-- the table to store GlobalSession data
CREATE TABLE IF NOT EXISTS `global_table`
(
`xid` VARCHAR(128) NOT NULL,
`transaction_id` BIGINT,
`status` TINYINT NOT NULL,
`application_id` VARCHAR(32),
`transaction_service_group` VARCHAR(32),
`transaction_name` VARCHAR(128),
`timeout` INT,
`begin_time` BIGINT,
`application_data` VARCHAR(2000),
`gmt_create` DATETIME,
`gmt_modified` DATETIME,
PRIMARY KEY (`xid`),
KEY `idx_gmt_modified_status` (`gmt_modified`, `status`),
KEY `idx_transaction_id` (`transaction_id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8;
-- the table to store BranchSession data
CREATE TABLE IF NOT EXISTS `branch_table`
(
`branch_id` BIGINT NOT NULL,
`xid` VARCHAR(128) NOT NULL,
`transaction_id` BIGINT,
`resource_group_id` VARCHAR(32),
`resource_id` VARCHAR(256),
`branch_type` VARCHAR(8),
`status` TINYINT,
`client_id` VARCHAR(64),
`application_data` VARCHAR(2000),
`gmt_create` DATETIME(6),
`gmt_modified` DATETIME(6),
PRIMARY KEY (`branch_id`),
KEY `idx_xid` (`xid`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8;
-- the table to store lock data
CREATE TABLE IF NOT EXISTS `lock_table`
(
`row_key` VARCHAR(128) NOT NULL,
`xid` VARCHAR(96),
`transaction_id` BIGINT,
`branch_id` BIGINT NOT NULL,
`resource_id` VARCHAR(256),
`table_name` VARCHAR(32),
`pk` VARCHAR(36),
`gmt_create` DATETIME,
`gmt_modified` DATETIME,
PRIMARY KEY (`row_key`),
KEY `idx_branch_id` (`branch_id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8;
最終結(jié)果如下圖:2.3 修改Seata安裝目錄下conf/file.conf
配置文件
修改使用 db 數(shù)據(jù)庫屠橄,實(shí)現(xiàn) Seata TC Server 的全局事務(wù)會(huì)話信息的共享族跛。如下圖所示:2.4 設(shè)置使用 Nacos 注冊(cè)中心
修改conf/registry.conf
配置文件闰挡,設(shè)置使用 Nacos 注冊(cè)中心。如下圖所示:
2.5 啟動(dòng) TC Server
2.5.1 執(zhí)行nohup sh bin/seata-server.sh -p 18091 -n 1 &
命令礁哄,啟動(dòng)第一個(gè) TC Server 在后臺(tái)长酗。
-p:Seata TC Server 監(jiān)聽的端口。
-n:Server node姐仅。在多個(gè) TC Server 時(shí)花枫,需區(qū)分各自節(jié)點(diǎn),用于生成不同區(qū)間的 transactionId 事務(wù)編號(hào)掏膏,以免沖突劳翰。
在 nohup.out 文件中,我們看到如下日志馒疹,說明啟動(dòng)成功:
# 使用 DB 存儲(chǔ)器
2020-06-18 16:54:12.793 INFO [main]io.seata.common.loader.EnhancedServiceLoader.loadFile:247 -load DataSourceGenerator[dbcp] extension by class[io.seata.server.store.db.DbcpDataSourceGenerator]
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2020-06-18 16:54:13.442 INFO [main]io.seata.common.loader.EnhancedServiceLoader.loadFile:247 -load LogStore[DB] extension by class[io.seata.core.store.db.LogStoreDataBaseDAO]
2020-06-18 16:54:13.442 INFO [main]io.seata.common.loader.EnhancedServiceLoader.loadFile:247 -load TransactionStoreManager[DB] extension by class[io.seata.server.store.db.DatabaseTransactionStoreManager]
2020-06-18 16:54:13.442 INFO [main]io.seata.common.loader.EnhancedServiceLoader.loadFile:247 -load SessionManager[DB] extension by class[io.seata.server.session.db.DataBaseSessionManager]
# 啟動(dòng)成功
2020-06-18 16:54:13.779 INFO [main]io.seata.core.rpc.netty.RpcServerBootstrap.start:155 -Server started ...
# 使用 Nacos 注冊(cè)中心
2020-06-18 16:54:13.788 INFO [main]io.seata.common.loader.EnhancedServiceLoader.loadFile:247 -load RegistryProvider[Nacos] extension by class[io.seata.discovery.registry.nacos.NacosRegistryProvider]
2.5.2 執(zhí)行 nohup sh bin/seata-server.sh -p 28091 -n 2 & 命令佳簸,啟動(dòng)第二個(gè) TC Server 在后臺(tái)。
2.5.3 打開 Nacos 注冊(cè)中心的控制臺(tái)颖变,我們可以看到有兩個(gè) Seata TC Server 示例生均。