經過前兩篇文章咱們使用了Seata
做爲分佈式事務組件,並使用Nacos
做爲Seata
的註冊配置中心,本篇文章咱們將Seata
部署在容器Docker
上。固然了若是你們對Docker
不是很熟悉的話或者僅對Docker
感興趣能夠翻看我以前爲你們準備的兩篇文章。html
在使用Docker
部署服務的時候咱們應該將配置文件外部化,這樣方便後續修改,在修改完成後經過 -v 指令將文件掛載進容器。接下來咱們一步一步來實現容器化過程。java
docker run --rm --name seata-server -d -p 8091:8091 seataio/seata-server:latest
--rm
參數,這樣在中止容器後容器會自動刪除,節省很多時間。 /seata-server/resources
下,咱們將其導出在宿主機指定目錄上docker cp a67c272193c4:/seata-server/resources /app/cloud/seata/conf
registry.conf
Nacos
做爲註冊配置中心只須要修改registry.conf
文件,修改完成後的結果以下 registry {
# file 、nacos 、eureka、redis、zk、consul、etcd三、sofa
type = "nacos"
nacos {
serverAddr = "10.0.10.48:8848"
namespace = ""
cluster = "default"
}
}
config {
# file、nacos 、apollo、zk、consul、etcd3
type = "nacos"
nacos {
serverAddr = "10.0.10.48:8848"
namespace = ""
}
}複製代碼
Seata
配置推送到Nacos
Seata
容器中並無將Nacos
的配置文件放進去,還須要你們先下載Seata-Server
安裝包,而後將其推送到Nacos
。具體操做請參照上篇文章,此處再也不贅述。 docker stop a67c272193c4
--rm
參數,因此容器會被自動刪除。 docker run --name seata-server \
-d -p 8091:8091 \
-e SEATA_CONFIG_NAME=file:/root/seata-config/registry \
-e SEATA_IP=172.31.0.207 \
-v /app/cloud/seata/conf:/root/seata-config \
-v /app/cloud/seata/logs:/root/logs \
seataio/seata-server複製代碼
指定容器註冊IP,將宿主機中修改後的配置文件掛載到容器中。mysql
registry.conf
文件放在微服務的resources
下便可,上篇文章已經改造完成。 account-service
,product-service
,order-service
,觀察Seata日誌三個服務都已連上Seata。執行業務測試觀察是否正常提交與回滾。git
file
模式爲單機模式,全局事務會話信息內存中讀寫並持久化本地文件root.data
,性能較高;db
模式爲高可用模式,全局事務會話信息經過db
共享,相應性能差些。考慮到Seata
的擴展和高可用,咱們這節來修改相關配置讓Seata
支持 db
模式github
seata_config
,並從https://github.com/seata/seata/blob/develop/script/server/db/mysql.sql
下載建表語句,導入數據庫。store.mode
調整爲dbSTORE_MODE=db
指定 nacos
中修改store.db
的相關配置 store.db.url=jdbc:mysql://xxxxxx:3306/seata_config?useUnicode=true
store.db.user=root
store.db.password=xxxxxx複製代碼
docker run --name seata-server \
-d -p 8091:8091 \
-e SEATA_CONFIG_NAME=file:/root/seata-config/registry \
-e SEATA_IP=172.31.0.207 \
-v /app/cloud/seata/conf/resources:/root/seata-config \
-v /app/cloud/seata/logs:/root/logs/seata \
seataio/seata-server複製代碼
啓動容器後重啓微服務,查看是否正常註冊,並執行業務測試觀察是否正常提交與回滾。redis
關注這個系列文章的同窗應該知道咱們第一篇文章用了docker-compose
部署了mysql、nacos、sentinel三個組件,這節咱們完善以前的nacos-base.yml
,將seata也集成進去。有了前2節的基礎這個操做應該很簡單,編寫完成後完成的yml文件以下:sql
version: "3"
services:
mysql:
container_name: mysql
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=123456
volumes:
- /app/cloud/mysql/data:/var/lib/mysql
ports:
- "3306:3306"
restart: always
nacos:
image: nacos/nacos-server:1.1.4
container_name: nacos
environment:
- PREFER_HOST_MODE=hostname
- MODE=standalone
- MYSQL_DATABASE_NUM=1
- SPRING_DATASOURCE_PLATFORM=mysql
- MYSQL_MASTER_SERVICE_HOST=mysql
- MYSQL_MASTER_SERVICE_DB_NAME=nacos_config
- MYSQL_MASTER_SERVICE_PORT=3306
- MYSQL_MASTER_SERVICE_USER=root
- MYSQL_MASTER_SERVICE_PASSWORD=123456
volumes:
- /app/cloud/nacos/logs:/home/nacos/logs
ports:
- "8848:8848"
depends_on:
- mysql
restart: always
sentinel:
image: bladex/sentinel-dashboard:latest
container_name: sentinel
ports:
- "8858:8858"
restart: always
seata:
image: seataio/seata-server:latest
container_name: seata
ports:
- "8091:8091"
environment:
- SEATA_CONFIG_NAME=file:/root/seata-config/registry
- SEATA_IP=10.0.10.48
volumes:
- /app/cloud/seata/conf:/root/seata-config
- /app/cloud/seata/logs:/root/logs
restart: always複製代碼
咱們將此yml文件上傳至服務器,啓動docker-compose docker-compose -f nacos-base.yml up
,啓動客戶端服務並執行業務測試觀察結果。docker
seata-server 支持如下環境變量:數據庫
可選, 指定seata-server啓動的IP, 該IP用於向註冊中心註冊時使用, 如eureka等服務器
可選, 指定seata-server啓動的端口, 默認爲 8091
可選, 指定seata-server的事務日誌存儲方式, 支持db 和 file, 默認是 file
可選, 用於指定seata-server節點ID, 如 1,2,3..., 默認爲 1
可選, 指定 seata-server 運行環境, 如 dev, test 等, 服務啓動時會使用 registry-dev.conf 這樣的配置
可選, 指定配置文件位置, 如 file:/root/registry, 將會加載 /root/registry.conf 做爲配置文件
好了,各位朋友們,本期的內容到此就所有結束啦,若是這篇文章對你有所幫助的話請掃描下面二維碼加個關注。"轉發" 加 "在看",養成好習慣!
系列文章
歡迎掃碼關注微信公衆號或 我的博客