本文提供kubernetes中部署seata部署方式,采用存储模式为db。其他部署方式请参考官方文档
什么是Seata?
Seata是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。
原理
注册在nacos上微服务和seata服务端,通过nacos互访;
- 1、seata配置文件中保存了nacos地址,nacos中保存了seata的配置信息(包括数据库地址,用户名,密码等)
- 2、启动seata后,seata注册到nacos配置中心。
- 3、spring cloud微服务项目通过nacos注册中心找到seata服务,把事务数据保存到seata在nacos配置中心中指定的数据库中。
服务器操作
一、预备工作
确保后台已经启动 Nacos 服务。如果您尚且不熟悉 Nacos 的基本使用的话,可先行参考 Nacos 快速入门。建议使用 Nacos 1.2.0 及以上的版本
获取server安装包
https://github.com/seata/seata/releases
获取数据库脚本
https://github.com/seata/seata/tree/develop/script/server/db
二、导入数据库配置
三、修改server配置
Server端存储模式(store.mode)现有file、db、redis三种(后续将引入raft,mongodb),file模式无需改动,直接启动即可,下面专门讲下db启动步骤。
注: file模式为单机模式,全局事务会话信息内存中读写并持久化本地文件root.data,性能较高;
db模式为高可用模式,全局事务会话信息通过db共享,相应性能差些;
redis模式Seata-Server 1.3及以上版本支持,性能较高,存在事务信息丢失风险,请提前配置合适当前场景的redis持久化配置
1、nacos配置中心导入脚本
下载nacos-config.sh执行脚本放置于conf文件夹内;
2、config.txt配置信息
(包含server和client,原名nacos-config.txt)为通用参数文件
下载config.txt放置于seata软件包根目录、修改store.db.url 、store.db.user、store.db.password 数据库相关的配置信息
注意: 如果我们后面准备在服务器上启动seata服务端,这里只需要修改conf文件夹下面的file.conf(修改mode字段和数据库相关配置)和registry.conf(type字段和nacos相关配置)即可。
3、修改registry.conf和file.conf 【可选操作】
四、nacos创建seata命名空间
打开Nacos控制台,建议新建一个命名空间,因为config.txt中配置信息太多太乱。
五、上传配置至Nacos配置中心
参考https://github.com/seata/seata/tree/develop/script/config-center 的config.txt并修改(我们在第三步已经修改过了),之后运行仓库中提供的nacos脚本,将信息提交到nacos控制台,如果有需要更改,可直接通过控制台更改。
执行命令:bash seata/conf/nacos-config.sh -h nacos-****.top -p 80 -g SEATA_GROUP -t 3a05*******e8457
-h: nacos服务端IP或域名 -p: nacos服务端端口 -g: 分组信息 -t: nacos的命名空间ID -u: nacos登录名 -w: nacos登录密码
导入配置完毕后,检查nacos中配置导入信息
上面我们在服务器上执行了导入seata配置信息,接下来需要在kubernetes集群中启动一个seata服务端
kubernetes集群操作
在k8s集群中部署服务,我们需要确定以下几点
1、首先服务是否需要持久化存储? 2、服务是否有确定镜像需求? 3、服务是否有命名空间和副本数量要求? 4、服务是集群内还是集群内访问,对域名的需求?
根据上面几点的考虑,我们seata镜像版本选择1.4.0(特定业务需求);由于我们选择db存储数据,因此无需持久到某个存储介质上;服务无特定命名空间和副本数量要求,可以自定;由于seata也作为一个微服务注册到nacos上,和其他注册到nacos的服务,通过注册中心互访即可,无需域名。
六、修改registry.conf的注册中心配置
需要修改seata连接nacos配置信息
registry {type = "nacos"nacos {application = "seata-server"serverAddr = "nacos*******.top:80"group = "SEATA_GROUP"namespace = ""cluster = "default"username = ""password = ""}}config {type = "nacos"nacos {serverAddr = "nacos******.top:80"namespace = "3a05*******e8457"group = "SEATA_GROUP"username = ""password = ""}}
修改后的配置信息作为ConfigMap挂载到容器内/root/seata-config目录下
七、启动server端
部署文件参考
apiVersion: v1kind: Servicemetadata:name: seata-ha-servernamespace: infralabels:app.kubernetes.io/name: seata-ha-serverspec:type: ClusterIPports:- port: 8091protocol: TCPname: httpselector:app.kubernetes.io/name: seata-ha-server---apiVersion: apps/v1kind: Deploymentmetadata:name: seata-ha-servernamespace: infralabels:app.kubernetes.io/name: seata-ha-serverspec:replicas: 3selector:matchLabels:app.kubernetes.io/name: seata-ha-servertemplate:metadata:labels:app.kubernetes.io/name: seata-ha-serverspec:containers:- name: seata-ha-serverimage: docker.io/seataio/seata-server:1.4.0imagePullPolicy: IfNotPresentenv:- name: SEATA_CONFIG_NAMEvalue: file:/root/seata-config/registryports:- name: httpcontainerPort: 8091protocol: TCPvolumeMounts:- name: seata-configmountPath: /root/seata-configvolumes:- name: seata-configconfigMap:name: seata-ha-server-config---apiVersion: v1kind: ConfigMapmetadata:name: seata-ha-server-confignamespace: infradata:registry.conf: |registry {type = "nacos"nacos {application = "seata-server"serverAddr = "nacos*******.top:80"group = "SEATA_GROUP"namespace = ""cluster = "default"username = ""password = ""}}config {type = "nacos"nacos {serverAddr = "nacos******.top:80"namespace = "3a059*****be8457"group = "SEATA_GROUP"username = ""password = ""}}
1、启动服务
kubectl apply -f seata-ha-server.yaml
2、检查seata是否注册到nacos

在nacos web界面,服务管理—>服务列表中,如果发现上面图片内容,说明我们的seata已经成功注册到了nacos。

