docker-compose安装部署seata-server(nacos做注册、配置中心)

请先安装好nacos~

1.启动一个seata的临时容器,提取配置文件备用

  • 用-rm启动一个seata的临时容器,方便提取配置文件,stop的时候容器也会被删除。
docker run --rm --name seata-server -d -p 8091:8091 seataio/seata-server:1.4.0
  • 提取配置文件到宿主机
#在宿主机对应路径下创建conf文件夹,放置导出的配置文件
docker cp [容器id]:/seata-server/resources/* /usr/app/seata-server/conf
#复制完即可stop停止容器,自动删除掉

2.修改registry.conf文件,nacos做注册中心、配置中心

  • 修改registry.conf文件,使用nacos作为seata server端的注册配置中心
#注册中心
registry {
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  type = "nacos" #表示注册中心是nacos
  nacos {
    serverAddr = "172.18.0.1:8848" #这是docker内部的地址 可通过docker inspect [容器id]查询
    namespace = ""
    cluster = "default"
  }
}
#配置中心
config {
  # file、nacos 、apollo、zk、consul、etcd3
  type = "nacos" #这里配置nacos表示seata的配置,如mysql之类的链接配置从nacos获取,也就是说file.conf文件就不用配置了,因为配置信息直接维护在nacos里面了
  nacos {
    serverAddr = "172.18.0.1:8848"
    namespace = ""
  }
}
  • seata的client端使用nacos做注册和配置中心

首先,需要将 nacos-client 的 Maven 依赖添加到您的项目 pom.xml 文件中,并且强烈地推荐您使用 Seata 1.4.0(编辑于2020年11月30日):

           
                io.seata
                seata-spring-boot-starter
                最新版
            
            
                com.alibaba.nacos
                nacos-client
                1.3.2
            
#application.yml 
seata:
    #配置中心
  config:
    type: nacos
    nacos:
      server-addr: 192.168.57.107:8848
      group : "SEATA_GROUP"
      namespace: ""
      username: "nacos"
      password: "nacos"
  #注册中心
  registry:
    type: nacos
    nacos:
      application: seata-server
      server-addr: 192.168.57.107:8848
      group : "SEATA_GROUP"
      namespace: ""
      username: "nacos"
      password: "nacos"

3.新建mysql数据库,seata配置使用db事务日志存储方式

file 模式为单机模式,全局事务会话信息内存中读写并持久化本地文件 root.data,性能较高;

db 模式为高可用模式,全局事务会话信息通过 db 共享,相应性能差些。

考虑到 Seata 的扩展和高可用,我们这节来修改相关配置让 Seata 支持 db 模式

  • 新建数据库seata

从https://github.com/seata/seata/blob/develop/script/server/db/mysql.sql下载最新的sql语句到数据库执行建表语句。

  • 配置file.conf文件,设置db模式(如果上面的registry.conf里面的config配置了使用nacos,则这里不用配置
## transaction log store, only used in seata-server
store {
  ## store mode: file、db、redis
  mode = "db"
  
  ## database store property
  db {
    ## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp)/HikariDataSource(hikari) etc.
    datasource = "druid"
    ## mysql/oracle/postgresql/h2/oceanbase etc.
    dbType = "mysql"
    driverClassName = "com.mysql.jdbc.Driver"
    url = "jdbc:mysql://172.18.0.1:3306/seata"
    user = "root"
    password = "123456"
    minConn = 5
    maxConn = 100
    globalTable = "global_table" #全局事务表
    branchTable = "branch_table" #分支子事务表
    lockTable = "lock_table" #全局锁表
    queryLimit = 100
    maxWait = 5000
  }
}

4.配置docker-compose文件

version: '3'
services:
  seata-server:
    restart: always
    image: seataio/seata-server:1.4.0
    environment:
     #seata-server启动的IP,用于向注册中心注册使用,默认使用容器IP可能无法与客户端通讯;
     #此ip后续连过来的client需要用到,也就是上面第2点中client端连接的seata服务的配置信息。
     #我这里配置的是seata所在的docker容器之外的linux虚拟机ip
     - SEATA_IP=192.168.57.107
     - SEATA_CONFIG_NAME=file:/root/seata-config/registry
    volumes:
      - /usr/app/seata-server/conf:/root/seata-config
      - /usr/app/seata-server/logs:/root/logs
    ports:
      - "8091:8091"
    container_name: "seata-server"
#配置和mysql容器互通的网络net-docker!!!!!!!!
#注意,这里没加网络配置的话,seata从nacos获取了数据库连接配置之后,是连不上同docker容器里面的mysql的!!!!!!
networks: 
  default:
    external:
      name: mysql8_default

5.上传seata配置信息到nacos

  1. 在/use/app/seata-server/目录下创建config.txt文件夹,参考官网:https://github.com/seata/seata/blob/develop/script/config-center/config.txt 的配置信息配置此文件。由于我们是使用db来存储事务的会话信息,所以只保留db相应的配置即可。
service.vgroupMapping.my_test_tx_group=default
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
#store.db.driverClassName=com.mysql.jdbc.Driver 这个是mysql8以下的驱动
store.db.driverClassName=com.mysql.cj.jdbc.Driver #这个是mysql8的驱动
store.db.url=jdbc:mysql://172.18.0.1:3306/seata?useUnicode=true
store.db.user=root
store.db.password=123456
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000
  1. 进入/use/app/seata-server/conf/目录下,创建nacos-config.sh文件,拉取官网: https://github.com/seata/seata/blob/develop/script/config-center/nacos/nacos-config.sh 对应的内容填充。
#默认config.txt在nacos-config.sh的上一层文件夹即可。
  1. 运行nacos-config.sh脚本上传配置到nacos
#sh命令无法识别"[[]]"表达式,所以使用bash
#参考https://github.com/seata/seata/blob/develop/script/config-center/README.md编写此命令
bash ./nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP  -u nacos -w nacos

6.启动seata的docker容器

​ 确保MySQL和Nacos的容器已经启动,用docker-compose up -d 启动seata容器。

7.seata的使用

在服务业务上注解@GlobalTransactional即可开启分布式事务

参考博文

https://developer.aliyun.com/article/768872

Demo:https://github.com/longxiaonan/springcloud-demo

你可能感兴趣的:(docker-compose安装部署seata-server(nacos做注册、配置中心))