ICE.ICE|

韩憨

园龄:4年7个月粉丝:42关注:47

使用 Docker 部署 Seata Server(分布式事务解决方式)

1.获取镜像

## 使用下面命令获取最新版本的镜像,此时我的版本是1.3.0

## 或者可以使用docker pull seataio/seata-server:latest获取最新的镜像

docker pull seataio/seata-server:1.3.0

 

2.运行容器并获取配置

为方便我们对seata配置修改我们需要先运行下seata-server,然后将配置拷贝到宿主机中,完成之后删除之前配置并通过宿主机运行容器。

## 运行容器

docker run --name seata-server -p 8091:8091 -d  seataio/seata-server:1.3.0

## 将容器中的配置拷贝到/data/seata

docker cp seata-server:/seata-server /data/seata

## 完成后就会在/data/seata出现容器的配置,我们现在可以将原来容器停止并删除

docker stop seata-server

docekr rm -f seata-server

 

3.修改配置文件

进入目录/data/seata/resources中修改file.confregistry.conf中的内容

file.conf中的内容:

 

## transaction log store, only used in seata-server

store {

  ## store mode: filedbredis

  mode = "db" ## 原来为file

 

  ## file store property

  file {

    ## store location dir

    dir = "sessionStore"

    # branch session size , if exceeded first try compress lockkey, still exceeded throws exceptions

    maxBranchSessionSize = 16384

    # globe session size , if exceeded throws exceptions

    maxGlobalSessionSize = 512

    # file buffer size , if exceeded allocate new buffer

    fileWriteBufferCacheSize = 16384

    # when recover batch read size

    sessionReloadReadSize = 100

    # async, sync

    flushDiskMode = async

  }

 

  ## 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"

    ## 因为设置为db,所以需要选择数据库,这里设置数据库及密码,seata是需要创建的,默认的表是通过脚本运行得到的

    url = "jdbc:mysql://172.18.99.38:3306/seata"

    user = "root"

    password = "admindev123$%^"

    minConn = 5

    maxConn = 30

    globalTable = "global_table"

    branchTable = "branch_table"

    lockTable = "lock_table"

    queryLimit = 100

    maxWait = 5000

  }

 

  ## redis store property

  redis {

    host = "127.0.0.1"

    port = "6379"

    password = ""

    database = "0"

    minConn = 1

    maxConn = 10

    queryLimit = 100

  }

 

registry.conf内容:

 

registry {

  # file nacos eurekarediszkconsuletcd3sofa

  ## 我们这里使用nacos作为注册中心,所以需要设置typenacos并设置nacos的属性

  type = "nacos"

  nacos {

    application = "seata-server"

    serverAddr = "172.18.99.36:8844"

    group = "SEATA_GROUP"

    ## 这里的namespace是你nacos服务的namespacedata-id,设置那里,到时就会在那个namespace,不设置就填public

    namespace = "public"

    cluster = "default"

    username = "nacos"

    password = "nacos"

  }

}

 

config {

  # filenacos apollozkconsuletcd3

  type = "file"

 

  file {

    name = "file.conf"

  }

}

 

4.初始化数据库

这里配置完成后,需要初始化数据库,sql如下

 

  4.1 seata库执行sql

 

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;

 

  4.2 业务数据库执行

CREATE TABLE `undo_log` (

  `id` bigint(20) NOT NULL AUTO_INCREMENT,

  `branch_id` bigint(20) NOT NULL,

  `xid` varchar(100) NOT NULL,

  `context` varchar(128) NOT NULL,

  `rollback_info` longblob NOT NULL,

  `log_status` int(11) NOT NULL,

  `log_created` datetime NOT NULL,

  `log_modified` datetime NOT NULL,

  PRIMARY KEY (`id`),

  UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)

)  ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

 

5.启动seata

 

docker run -d --restart always \

--net=host \

--name  seata-server \

-p 8091:8091  -v /data/seata/seata-server:/seata-server \

-e SEATA_IP=172.18.99.36 -e SEATA_PORT=8091 \

seataio/seata-server:1.3.0

 

 

 

6.查看nacos

 

7.环境变量

seata-server 支持以下环境变量:

SEATA_IP

可选, 指定seata-server启动的IP, IP用于向注册中心注册时使用, eureka

SEATA_PORT

可选, 指定seata-server启动的端口, 默认为 8091

STORE_MODE

可选, 指定seata-server的事务日志存储方式, 支持db file, 默认是 file

SERVER_NODE

可选, 用于指定seata-server节点ID, 1,2,3..., 默认为 1

SEATA_ENV

可选, 指定 seata-server 运行环境, dev, test , 服务启动时会使用 registry-dev.conf 这样的配置

SEATA_CONFIG_NAME

可选, 指定配置文件位置, file:/root/registry, 将会加载 /root/registry.conf 作为配置文件,如果需要同时指定 file.conf文件,需要将registry.confconfig.file.name的值改为类似file:/root/file.conf

 

本文作者:韩憨

本文链接:https://www.cnblogs.com/hanby/p/15514393.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   韩憨  阅读(427)  评论(0编辑  收藏  举报
//看板娘

剑桥

评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 隔离 (Studio Live Duet) 陈凯咏,林家谦
  2. 2 明知做戏 吴雨霏
  3. 3 残酷游戏 卫兰
  4. 4 你,好不好? 周兴哲
  5. 5 我可以 蔡旻佑
  6. 6 云烟成雨 房东的猫
  7. 7 说散就散 JC 陈咏桐
  8. 8 我配不上你 夏天Alex
  9. 9 不再联系 夏天Alex
  10. 10 等我先说 夏天Alex
  11. 11 我知道他爱你 夏天Alex
  12. 12 多想在平庸的生活拥抱你 隔壁老樊
  13. 13 这一生关于你的风景 隔壁老樊
  14. 14 我曾 隔壁老樊
  15. 15 关于孤独我想说的话 隔壁老樊
  16. 16 过客 周思涵
  17. 17 备爱 周思涵
  18. 18 嚣张 en
  19. 19 海口 后弦
明知做戏 - 吴雨霏
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : Xia Zhi

作曲 : Fong Man Leung

编曲 : 吴国恩

监制 : Gary Chan

等你的汽水喝一半给你加片薄冰

等你的桌面满泻我总会打理重整

不想纯情 不够聪明

你未发现我的身影

得我帮你依照编码整理家里电影

得我帮你依照编码整理家里电影

只会得我一个帮你选购喜爱铃声

天天如常 估你心情

等一个眼神求证 一闪擦过如流星

怎么我为我做过的感到惊怕

就像爱吗我也不肯定恐怕

我以为存在吗 千变万化

从来不肯开口可相信吗 离谱吗

请你不要阻我喜欢你

明明是爱但你未说话你扮作闪避

这个沉默冷静的你毫无办法处理

其实我亦怕是错摸心理

总有天会等到好天气

游行示爱大叫着你在某大片草地

等你无用退避不过仍然害羞的你

还是顾忌太不争气 明知做戏

即使你未太在意不感到惊讶

即使你未太在意不感到惊讶

现在要说爱你请准备招架

勇气还存在吗 不要害怕

随时真的胆敢亲手送花 离谱吗

请你不要阻我喜欢你

明明是爱但你未说话你扮作闪避

这个沉默冷静的你亳无办法处理

其实我亦怕是错摸心理

总有天会等到好天气

游行示爱大叫着你在某大片草地

等你无用退避不过仍然害羞的你

还是顾忌太不争气 明知做戏

不过不要阻我紧张你

如何令你愉快让我办妥为你准备

喜爱沉默冷静的你还是自信的你

仍愿意为你造一些惊喜

总有天会等到好天气

游行示爱大叫着你在某大片草地

等你无用退避不过途人目光不理

期待贴着你的手臂 无须做戏

等你喜爱等你不爱就凭摘毫验证

等你喜爱等你不爱就凭摘毫验证

想爱不爱偏爱不理亦同样难划清

天天如常 估你心情

不想扑索来求证 争取过趁还年青

终于你下决定来答应 太动听

点击右上角即可分享
微信分享提示