seata docker部署

 

一. docker拉取seata-server鏡像

docker pull seataio/seata-server:1.1.0

二. docker run方式啓動

docker run --name seata-server -it -d  -p 8091:8091 \
-e SEATA_CONFIG_NAME=file:/root/seata/config/registry \
-e SEATA_IP=192.168.2.248 \
-v /opt/seata/config/:/root/seata/config \
--net=bridge --restart=always docker.io/seataio/seata-server:1.1.0

三. docker compose 啓動

docker-compose.yaml 示例

version: '3'
services:
  seata-server:
    restart: always
    image: seataio/seata-server:1.1.0
    environment:
     - SEATA_IP=192.168.2.225
     - SEATA_CONFIG_NAME=file:/root/seata/config/registry
    deploy:
      replicas: 1
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
        window: 120s
      resources:
        limits:
          cpus: '0.5'
          memory: 1024M
        reservations:
          cpus: '1'
          memory: 2408M
    volumes:
      - /opt/seata/config/:/root/seata/config
    ports:
      - "8091:8091"
    container_name: "seata-server"
    networks:
      - back-up
networks:
  back-up:
    driver: bridge

docker-compose 啓動

docker-compose -f docker-compose.yaml up -d

四. 容器命令及查看日誌

docker exec -it seata-server sh
docker logs -f seata-server

五. 使用自定義配置文件

自定義配置文件需要通過掛載文件的方式實現,將宿主機上的 registry.conf 和 file.conf 掛載到容器中相應的目錄

  • 指定 registry.conf

使用自定義配置文件時必須指定環境變量 SEATA_CONFIG_NAME, 並且值需要以file:開始, 如: file:/root/seata/config/registry

關鍵代碼:

#設置seata配置文件名稱
-e SEATA_CONFIG_NAME=file:/root/seata/config/registry 
#掛外宿主機配置文件目錄
-v /opt/seata/config/:/root/seata/config

其中 -e 用於配置環境變量, -v 用於掛載宿主機的目錄

  • 指定 file.conf

如果需要同時指定 file.conf 配置文件,則需要在 registry.conf 文件中將 config 配置改爲以下內容,name 的值爲容器中對應的路徑

registry {
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  type = "eureka"

  eureka {
    serviceUrl = "http://admin:[email protected]:19001/eureka/"
    application = "seata-server"
    weight = "1"
  }
  
}

config {
  type = "file"
  file {
    name = "file:/root/seata/config/file.conf"
  }
}

六. 環境變量

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 運行環境, 如 devtest 等, 服務啓動時會使用 registry-dev.conf 這樣的配置

  • SEATA_CONFIG_NAME

可選, 指定配置文件位置, 如 file:/root/registry, 將會加載 /root/registry.conf 作爲配置文件,如果需要同時指定 file.conf文件,需要將registry.confconfig.file.name的值改爲類似file:/root/file.conf

七. 配置文件詳解

 file.conf

transport {
  # tcp udt unix-domain-socket
  type = "TCP"
  #NIO NATIVE
  server = "NIO"
  #enable heartbeat
  heartbeat = true
  # the client batch send request enable
  enableClientBatchSendRequest = false
  #thread factory for netty
  threadFactory {
    bossThreadPrefix = "NettyBoss"
    workerThreadPrefix = "NettyServerNIOWorker"
    serverExecutorThreadPrefix = "NettyServerBizHandler"
    shareBossWorker = false
    clientSelectorThreadPrefix = "NettyClientSelector"
    clientSelectorThreadSize = 1
    clientWorkerThreadPrefix = "NettyClientWorkerThread"
    # netty boss thread size,will not be used for UDT
    bossThreadSize = 1
    #auto default pin or 8
    workerThreadSize = "default"
  }
  shutdown {
    # when destroy server, wait seconds
    wait = 3
  }
  serialization = "seata"
  compressor = "none"
}
# service configuration, only used in client side
service {
  #transaction service group mapping,需要與註冊中心註冊的服務名一致
  vgroup_mapping.mogu_tx_group="seata-server"
  #only support when registry.type=file, please don't set multiple addresses
  seata-server.grouplist="192.168.2.248:8091"
  #degrade, current not support
  enableDegrade = false
  #disable seata
  disableGlobalTransaction = false
}
#client transaction configuration, only used in client side
client {
  rm {
    asyncCommitBufferLimit = 10000
    lock {
      retryInterval = 10
      retryTimes = 30
      retryPolicyBranchRollbackOnConflict = true
    }
    reportRetryCount = 5
    tableMetaCheckEnable = false
    reportSuccessEnable = false
    sqlParserType = druid
  }
  tm {
    commitRetryCount = 5
    rollbackRetryCount = 5
  }
  undo {
    dataValidation = true
    logSerialization = "jackson"
    logTable = "undo_log"
  }
  log {
    exceptionRate = 100
  }
}

## transaction log store, only used in server side
store {
  ## store mode: file、db
  mode = "db"
  ## 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) etc.
    datasource = "druid"
    ## mysql/oracle/h2/oceanbase etc.
    dbType = "mysql"
    driverClassName = "com.mysql.jdbc.Driver"
    url = "jdbc:mysql://192.168.2.243:3306/seata"
    user = "root"
    password = "root"
    minConn = 1
    maxConn = 10
    globalTable = "global_table"
    branchTable = "branch_table"
    lockTable = "lock_table"
    queryLimit = 100
  }
}
## server configuration, only used in server side
server {
  recovery {
    #schedule committing retry period in milliseconds
    committingRetryPeriod = 1000
    #schedule asyn committing retry period in milliseconds
    asynCommittingRetryPeriod = 1000
    #schedule rollbacking retry period in milliseconds
    rollbackingRetryPeriod = 1000
    #schedule timeout retry period in milliseconds
    timeoutRetryPeriod = 1000
  }
  undo {
    logSaveDays = 7
    #schedule delete expired undo_log in milliseconds
    logDeletePeriod = 86400000
  }
  #unit ms,s,m,h,d represents milliseconds, seconds, minutes, hours, days, default permanent
  maxCommitRetryTimeout = "-1"
  maxRollbackRetryTimeout = "-1"
  rollbackRetryTimeoutUnlockEnable = false
}

## metrics configuration, only used in server side
metrics {
  enabled = false
  registryType = "compact"
  # multi exporters use comma divided
  exporterList = "prometheus"
  exporterPrometheusPort = 9898
}

registry.conf

registry {
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  type = "eureka"

  eureka {
    serviceUrl = "http://admin:[email protected]:19001/eureka/"
    application = "seata-server"
    weight = "1"
  }
  
}

config {
  type = "file"

  file {
    name = "file:/root/seata/config/file.conf"
  }
}

八. 數據庫表結構

CREATE TABLE `global_table` (
  `xid` varchar(128) NOT NULL,
  `transaction_id` bigint(20) DEFAULT NULL,
  `status` tinyint(4) NOT NULL,
  `application_id` varchar(64) DEFAULT NULL,
  `transaction_service_group` varchar(64) DEFAULT NULL,
  `transaction_name` varchar(64) DEFAULT NULL,
  `timeout` int(11) DEFAULT NULL,
  `begin_time` bigint(20) DEFAULT NULL,
  `application_data` varchar(2000) DEFAULT NULL,
  `gmt_create` datetime DEFAULT NULL,
  `gmt_modified` datetime DEFAULT NULL,
  PRIMARY KEY (`xid`),
  KEY `idx_gmt_modified_status` (`gmt_modified`,`status`),
  KEY `idx_transaction_id` (`transaction_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;




CREATE TABLE `branch_table` (
  `branch_id` bigint(20) NOT NULL,
  `xid` varchar(128) NOT NULL,
  `transaction_id` bigint(20) DEFAULT NULL,
  `resource_group_id` varchar(32) DEFAULT NULL,
  `resource_id` varchar(256) DEFAULT NULL,
  `lock_key` varchar(128) DEFAULT NULL,
  `branch_type` varchar(8) DEFAULT NULL,
  `status` tinyint(4) DEFAULT NULL,
  `client_id` varchar(64) DEFAULT NULL,
  `application_data` varchar(2000) DEFAULT NULL,
  `gmt_create` datetime DEFAULT NULL,
  `gmt_modified` datetime DEFAULT NULL,
  PRIMARY KEY (`branch_id`),
  KEY `idx_xid` (`xid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

create table `lock_table` (
  `row_key` varchar(128) not null,
  `xid` varchar(96),
  `transaction_id` long ,
  `branch_id` long,
  `resource_id` varchar(256) ,
  `table_name` varchar(32) ,
  `pk` varchar(32) ,
  `gmt_create` datetime ,
  `gmt_modified` datetime,
  primary key(`row_key`)
)  ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;;


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;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章