Kubernetes에서 Seata 고가용성 배포 및 구성
1. Seata 데이터베이스 초기화
curl -o mysql.sql https://raw.githubusercontent.com/apache/incubator-seata/1.3.0/script/server/db/mysql.sql
mysql -h rm-uf6ivpxt4j5rrpqal.mysql.rds.aliyuncs.com -uroot -p
CREATE DATABASE IF NOT EXISTS seata_config DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;
USE seata_config;
SOURCE /root/mysql.sql;
CREATE USER 'seata_user'@'%' IDENTIFIED BY 'MXl#GX8hw0wEv!ID';
GRANT ALL PRIVILEGES ON seata_config.* TO 'seata_user'@'%';
FLUSH PRIVILEGES;
EXIT;
2. Seata 서버 배포 및 설정
wget https://github.com/apache/incubator-seata/releases/download/v1.3.0/seata-server-1.3.0.tar.gz
tar -xzf seata-server-1.3.0.tar.gz -C /usr/local/
cd /usr/local/seata/conf/
cp registry.conf registry.conf.bak
cp file.conf.example file.conf
vim file.conf
store {
mode = "db"
db {
datasource = "druid"
dbType = "mysql"
driverClassName = "com.mysql.cj.jdbc.Driver"
url = "jdbc:mysql://rm-xxxxxxxxxx.mysql.rds.aliyuncs.com:3306/seata_config?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true"
user = "seata_user"
password = "Mxxxxxxxx!ID"
minConn = 10
maxConn = 50
globalTable = "global_table"
branchTable = "branch_table"
lockTable = "lock_table"
queryLimit = 200
maxWait = 5000
}
}
vim registry.conf
registry {
type = "nacos"
nacos {
application = "seata-server"
serverAddr = "192.168.102.8:8848"
group = "SEATA_GROUP"
namespace = "seata"
cluster = "default"
username = "nacos"
password = "eMxxxxxxxxxJ"
}
}
config {
type = "nacos"
nacos {
serverAddr = "192.168.102.8:8848"
namespace = "seata"
group = "SEATA_GROUP"
username = "nacos"
password = "eM63S9V1QeXgLeRJ"
}
}
3. Nacos 구성 설정 추가
git clone https://github.com/apache/incubator-seata.git -b 1.3.0
cd incubator-seata-1.3.0/script
# Nacos 콘솔에서 새 네임스페이스 생성
# 이름: seata, ID: seata, 설명: seata
unzip -q incubator-seata-1.3.0.zip
cd script/config-center
# config.txt 파일 생성 및 편집 (주석 제거)
> config.txt
vim config.txt
service.vgroupMapping.tx-group=default
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://rm-xxxxxxx.mysql.rds.aliyuncs.com:3306/seata_config?useUnicode=true&rewriteBatchedStatements=true&serverTimezone=GMT%2B8
store.db.user=seata_user
store.db.password=xxxx
store.db.minConn=10
store.db.maxConn=100
store.db.queryLimit=100
store.db.maxWait=5000
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.lockTable=lock_table
metrics.enabled=true
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898
# Nacos에 구성 적용
sh nacos/nacos-config.sh -h 192.168.102.8 -p 8848 -g SEATA_GROUP -t seata -u nacos -w eM63S9V1QeXgLeRJ
4. systemd 서비스로 Seata 관리 구성
vim /etc/systemd/system/seata.service
[Unit]
Description=Seata Server Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/seata/bin/seata-server.sh -p 8091 -n 1
Restart=always
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start seata.service
systemctl status seata.service
systemctl enable seata.service
5. 클러스터 배포 및 검증
scp -r /usr/local/seata/ 192.168.200.102:/usr/local/
scp -r /usr/local/seata/ 192.168.200.103:/usr/local/
scp /etc/systemd/system/seata.service 192.168.200.103:/etc/systemd/system/
scp /etc/systemd/system/seata.service 192.168.200.102:/etc/systemd/system/
# 각 노드의 -n 값은 고유하게 설정 필요 (예: 1, 2 등)
6. 모니터링 통합 설정
# file.conf에 다음 항목 추가
metrics {
enabled = true
registryType = "compact"
exporterList = "prometheus"
exporterPrometheusPort = 9898
}
# Seata 1.5.0 이상에서는 application.yaml 사용 가능
seata:
metrics:
enabled: true
registryType: compact
exporterList: prometheus
exporterPrometheusPort: 9898
# Nacos 구성 중앙에서 설정 시
# 네임스페이스: seata, dataId: metrics, group: SEATA_GROUP, 타입: Text
metrics.enabled=true
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898
7. 주의사항 및 필수 절차
AT 모드 사용 시, 각 애플리케이션 데이터베이스에 아래 테이블 생성 필요:
CREATE TABLE IF NOT EXISTS `undo_log` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'increment id',
`branch_id` BIGINT(20) NOT NULL COMMENT 'branch transaction id',
`xid` VARCHAR(100) NOT NULL COMMENT 'global transaction id',
`context` VARCHAR(128) NOT NULL COMMENT 'undo_log context',
`rollback_info` LONGBLOB NOT NULL COMMENT 'rollback info',
`log_status` INT(11) NOT NULL COMMENT '0:normal, 1:defense',
`log_created` DATETIME NOT NULL COMMENT 'create time',
`log_modified` DATETIME NOT NULL COMMENT 'modify time',
PRIMARY KEY (`id`),
UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='AT mode undo table';
태그:
seata
kubernetes
nacos
MySQL
distributed-tracing
6월 22일 21:56에 게시됨