A detailed introduction to seata docker high availability deployment

A detailed introduction to seata docker high availability deployment

Version

1.4.2
Official Documentation
dockerhub

start up

Specify the configuration file location /root/seata-config/registry.conf via the environment variable SEATA_CONFIG_NAME

docker run --name seata-server \
        -p 8091:8091 \
        -e SEATA_CONFIG_NAME=file:/root/seata-config/registry \ 
        -v /User/seata/config:/root/seata-config \
        seataio/seata-server

Configuration Files

Achieving high availability requires relying on the registration center, configuration center, and database
registry.conf

registry {
  type = "nacos"

  nacos
    application = "seata-server"
    serverAddr = "192.168.199.2"
    namespace = "test"
    group = "SEATA_GROUP"
    cluster = "default"
    username = ""
    password = ""
  }
}

config {
  type = "nacos"  
  nacos
    serverAddr = "192.168.199.2"
    namespace = "test"
    group = "SEATA_GROUP"
    username = ""
    password = ""
  }
}

NACOS Configuration

Note: When using nacos configuration, you need to configure text values ​​for each configuration item under the corresponding group (SEATA_GROUP) instead of creating a properties file containing all configurations. You can use the script in the official source code to import all available configuration references

1. Using a database

store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://192.168.199.2:3306/seata?useUnicode=true&rewriteBatchedStatements=true
store.db.user=root
store.db.password=123456

Create a database

Database creation script

-- -------------------------------- The script used when storeMode is 'db' --------------------------------
-- the table to store GlobalSession data
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(128),
    `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;

Exception handling

1. The client reports an error: Data too long for column 'application_id'

io.seata.core.exception.TmTransactionException: TransactionException[begin global request failed. xid=null, msg=Data truncation: Data too long for column 'application_id' at row 1]
at io.seata.tm.DefaultTransactionManager.begin(DefaultTransactionManager.java:55) ~[seata-all-1.3.0.jar:1.3.0]
at io.seata.tm.api.DefaultGlobalTransaction.begin(DefaultGlobalTransaction.java:104) ~[seata-all-1.3.0.jar:1.3.0]
at io.seata.tm.api.TransactionalTemplate.beginTransaction(TransactionalTemplate.java:175) ~[seata-all-1.3.0.jar:1.3.0]

The default length of the global_table.application_id field in the seata database is varchar(32). If the client application ID is too long, this error will be reported. You can manually modify the field type to increase the length.

This is the end of this article about seata docker high availability deployment. For more relevant seata docker deployment content, please search 123WORDPRESS.COM's previous articles or continue to browse the following related articles. I hope everyone will support 123WORDPRESS.COM in the future!

You may also be interested in:
  • Detailed explanation of the deployment process of SEATA transaction service Docker
  • Docker deploys mysql remote connection to solve 2003 problems
  • Implementation of docker-compose deployment project based on MySQL8

<<:  How to change fixed positioning of child elements to absolute positioning by CSS3 transform

>>:  Basic knowledge: What does http mean before a website address?

Recommend

Docker configures the storage location of local images and containers

Use the find command to find files larger than a ...

SQL interview question: Find the sum of time differences (ignore duplicates)

When I was interviewing for a BI position at a ce...

How to reduce the memory and CPU usage of web pages

<br />Some web pages may not look large but ...

Best way to replace the key in json object

JSON (JavaScript Object Notation, JS Object Notat...

How to embed other web pages in a web page using iframe

How to use iframe: Copy code The code is as follo...

jQuery realizes the effect of theater seat selection and reservation

jQuery realizes the effect of theater seat select...

The whole process record of vue3 recursive component encapsulation

Table of contents Preface 1. Recursive components...

Learn the operating mechanism of jsBridge in one article

Table of contents js calling method Android 1.js ...

A detailed introduction to the use of block comments in HTML

Common comments in HTML: <!--XXXXXXXX-->, wh...

Detailed explanation of Angular routing sub-routes

Table of contents 1. Sub-route syntax 2. Examples...

How to set underline in HTML? How to underline text in HTML

Underlining in HTML used to be a matter of enclos...

Design perspective technology is an important capital of design ability

A design soldier asked: "Can I just do pure ...

Does the website's text still need to be designed?

Many people may ask, does the text on the website...

Example of how to configure nginx to implement SSL

Environmental Description Server system: Ubuntu 1...