在分布式系统中,事务协调器TC是全局事务的“大脑”。一旦TC单点故障:
# seata-server 配置注册中心
registry {
type = "nacos"
nacos {
application = "seata-server"
serverAddr = "192.168.1.10:8848,192.168.1.11:8848"
namespace = ""
cluster = "default"
}
}
Seata依赖存储层持久化事务日志,需保证存储层无单点故障:
store {
mode = "db"
db {
datasource = "druid"
url = "jdbc:mysql://mysql-vip:3306/seata?useSSL=false"
user = "seata"
password = "seata@123"
}
}
store {
mode = "redis"
redis {
host = "redis-sentinel:26379"
mode = "sentinel"
sentinelMasterId = "mymaster"
}
}
客户端需支持自动切换TC节点:
seata:
tx-service-group: my_tx_group
service:
vgroup-mapping:
my_tx_group: "default"
enable-degrade: false
disable-global-transaction: false
registry:
type: nacos
nacos:
application: seata-server
server-addr: 192.168.1.10:8848,192.168.1.11:8848
namespace: ""
file.conf
中配置多个TC地址通过注册中心实现动态扩缩容:
# 启动Seata Server时指定集群名
sh seata-server.sh -p 8091 -h 192.168.1.20 -n 3 \
-e test -m db -r nacos
# Kubernetes Deployment配置存活探针
livenessProbe:
httpGet:
path: /actuator/health
port: 7091
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /actuator/health
port: 7091
initialDelaySeconds: 30
periodSeconds: 10
# Seata暴露Metrics端点
metrics:
enabled: true
registry-type: compact
exporter:
enabled: true
port: 9898
# 客户端与TC通信超时
client.tm.degradeCheckPeriod=2000
client.rm.reportRetryCount=3
# 随机kill一个TC进程
kill -9 $(ps -ef | grep seata-server | grep -v grep | awk '{print $2}')
Client Apps
│
▼
Load Balancer
│
┌──────┼──────┐
▼ ▼ ▼
[TC1] [TC2] [TC3] ← 通过注册中心同步状态
│ │ │
└──────┼──────┘
▼
高可用存储层(MySQL Cluster/Redis Sentinel)
记住黄金法则:
“TC无单点、存储多副本、客户端能切换、监控无盲区”
做好这四点,你的Seata集群将坚如磐石!