用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表示服务端注册成功
可能会有遗漏,有问题可以在评论告知