用docker部署seata的時候遇見了一個大坑,不過,有了上次的經驗,處理比較方便
下面的流程誤會盡量詳細
問題:seata是怎么部署的
一開始我看文章,以為seata是和sentinel一樣的方式,其實不然,它的服務端是獨立的需要單獨配置
這里都是使用的最新版seata
第一步:下載seata的源碼 https://github.com/seata/seata.git
進入目錄seata\script\config-center
找到文件 config.txt
# 修改存儲模式為數據庫存儲 store.mode=db # 指定數據庫為mysql,其他數據庫類型根據自身情況修改 store.db.dbType=mysql # 指定引擎,mysql8以下為com.mysql.jdbc.Driver,mysql8為com.mysql.cj.jdbc.Driver store.db.driverClassName=com.mysql.cj.jdbc.Driver store.db.url=jdbc:mysql://{ip}:3306/{db_name}?useUnicode=true store.db.user={db_user} store.db.password={db_password}
持久化方式為mysql,修改這里的配置,注意!!!!
如果是用的docker部署mysql,在沒有創建容器網絡的情況下
容器之間的訪問不是127.0.0.1
在容器中使用 ping docker.host internal
找到宿主機的局域網ip
配置完這一步之后
轉到seata\script\config-center\nacos
sh nacos-config.sh -h {nacos服務的host} -u {nacos用戶名} -w {nacos密碼}
運行sh文件,這一步是把這個txt文件中的內容上傳至nacos的配置中心
在宿主機運行的時候這個nacos地址可以用127.0.0.1:8848
查看nacos的配置列表
第二步
目錄 seata\script\server\config
我是將nacos作為注冊和配置中心
所以只需要修改registry.conf這個文件
數據庫初始化
eata\test\src\test\resources\saga\sql
這個文件下面有mysql的初始sql
新建一個數據庫名字就叫seata
將修改后的registry.conf文件復制到容器的seata-server/resources目錄下
然后在docker中運行seata,注意需要開放8091端口
也可以使用docker-compose的方式
version: "1.0"
services:
# 分布式事務服務
seata-server:
image: seataio/seata-server
ports:
- "8091:8091"
environment:
#宿主機ip
- SEATA_IP={宿主機host}
- SEATA_PORT=8091
- STORE_MODE=db
volumes:
# 復制文件到容器
- "./seata_server/resources/registry.conf:/seata-server/resources/registry.conf"
# 日志文件夾
- "./seata_server/logs:/root/logs/seata"
啟動完成后去nacos查看
出現seata-server表示服務端注冊成功
可能會有遺漏,有問題可以在評論告知