k8s部署seata用nacos做注册中心

本文详细介绍了Seata分布式事务解决方案及其四种模式(AT、TCC、SAGA、XA),并指导如何在Kubernetes(K8s)环境中使用Nacos作为注册中心进行Seata的部署,包括配置步骤和必要的YAML文件示例。
摘要由CSDN通过智能技术生成

目录

一、Seata是什么:

AT 模式(自动补偿模式):

TCC 模式(Try-Confirm-Cancel):

SAGA 模式:

XA 模式:

二、K8s部署Seata用Nacos做注册中心

        1、添加nacos相关配置  

        2、创建k8s配置文件


一、Seata是什么:

Seata 是一个开源的分布式事务解决方案,旨在为微服务架构提供高性能和简单易用的事务管理。Seata 致力于确保在分布式系统中,即便系统分布在不同的服务和数据库中,也能保持数据的一致性。Seata 的主要功能包括分布式事务的协调和管理。它通过一系列的组件和协议实现了事务的统一处理,主要支持四种事务模式,分别是:AT 模式、TCC 模式、SAGA 模式和 XA 模式。下面详细介绍这四种模式的特点和区别:

  1. AT 模式(自动补偿模式)

    • AT 模式是 Seata 的默认事务模式,主要用于处理简单的 CRUD 操作。
    • 这种模式通过记录数据的前后状态,实现了事务的自动回滚。
    • 在执行业务操作时,会将相关的数据更改暂时记录在事务日志中,事务提交时再统一提交这些更改。如果事务失败,则使用这些记录来回滚数据到事务开始前的状态。
  2. TCC 模式(Try-Confirm-Cancel)

    • TCC 是一种基于补偿的事务模式,涉及三个操作步骤:尝试(Try)、确认(Confirm)和取消(Cancel)。
    • 在 Try 阶段,事务尝试执行所有业务操作,并检查是否能够成功。
    • 如果所有 Try 操作成功,则进入 Confirm 阶段,正式提交事务。如果任一 Try 操作失败,就进入 Cancel 阶段,执行补偿操作回滚事务。
    • 这种模式适用于业务流程复杂、需要明确业务操作的场景。
  3. SAGA 模式

    • SAGA 模式通常用于长事务,特别适合于微服务架构中服务间调用频繁的场景。
    • SAGA 模式通过定义一系列的局部事务,这些局部事务被按顺序执行。
    • 每个局部事务执行完后,都会发布一个事件,这个事件会触发下一个局部事务的执行。如果某个局部事务失败,将会触发一系列的补偿事务来回滚之前已完成的事务。
  4. XA 模式

    • XA 模式基于 XA 协议,是一个两阶段提交的分布式事务处理过程。
    • 第一阶段是准备阶段,所有参与者都会锁定资源,准备提交事务。
    • 第二阶段是提交或回滚阶段,根据第一阶段的结果,决定是提交还是回滚事务。
    • XA 模式适用于需要强一致性保证的场景,但由于两阶段提交的性质,它可能会导致资源锁定时间较长,影响系统的响应时间和并发能力。

二、K8s部署Seata用Nacos做注册中心

        1、添加nacos相关配置  

                考虑到seata官方文档比较复杂,我这里简化了一下,通过连接:百度网盘 请输入提取码下载后,直接解压到服务器的某个路径下,进入nacos-seata路径执行:

sh nacos-config-interactive.sh

Please enter the host of nacos.
请输入nacos的host [localhost]:
>>>
Please enter the port of nacos.
请输入nacos的port [8848]:
>>>
Please enter the group of nacos.
请输入nacos的group [SEATA_GROUP]:
>>>
Please enter the tenant of nacos.
请输入nacos的tenant:
>>>
Please enter the username of nacos.
请输入nacos的username:
>>>
Please enter the password of nacos.
请输入nacos的password:
>>>
Are you sure to continue? [y/n]

                   或者

sh nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t 5a3c7d6c-f497-4d68-a71a-2e5e3340b3ca -u username -w password

                参数说明:

                -h:主机,默认值为localhost。

                -p:端口,默认值为8848。

                -g:配置分组,默认值为'SEAT_GROUP'。

                -t:租户信息,对应Nacos的namespace ID字段,默认值为''。

                -u:用户名,nacos 1.2.0+ 进行权限控制,默认值为''。

                -w:密码,nacos 1.2.0+ 上进行权限控制,默认值为 ''。

        Seata官方教程:incubator-seata/script/config-center at develop · apache/incubator-seata · GitHub

        2、创建k8s配置文件

           devSeata.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: seata
spec:
  replicas: 1
  serviceName: "seata-server"
  selector:
    matchLabels:
      app: seata-public
  template:
    metadata:
      labels:
        app: seata-public
    spec:
      nodeName: master01
      imagePullSecrets:
      - name: registry-pull-secret
      containers:
        - name: seata-server
          image: docker.io/seataio/seata-server:1.4.1
          imagePullPolicy: IfNotPresent
          #env:
          # - name: SEATA_CONFIG_NAME
          #   value: file:/seata-server/resources/registry.conf
          ports:
            - containerPort: 8091
          volumeMounts:
            - name: seata-config
              mountPath: /seata-server/resources
      volumes:
      - name: seata-config
        hostPath:
          path: <物理机所在目录>  #物理机所在目录
          type: DirectoryOrCreate

seata-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: seata-server
spec:
  type: NodePort
  ports:
    - port: 8091
      nodePort: <开放端口号>
      name: seata
  selector:
    app: seata-public

seata-configmap.yaml

kind: ConfigMap
apiVersion: v1
metadata:
  name: seata-configmap
data:
  registry.conf: |
    registry {
        type = "nacos"
        nacos {
          application = "seata-server"
          serverAddr = "nacos地址:端口"
          group = "SEATA_GROUP"
          namespace = ""
          cluster = "default"
          username = ""
          password = ""
        }
    }
    config {
      type = "nacos"
      nacos {
        serverAddr = "nacos地址:端口"
        namespace = ""
        group = "SEATA_GROUP"
        username = ""
        password = ""
      }
    }

然后执行:

#创建配置信息

kubectl create -f seata-configmap.yaml

#创建pod

kubectl apply -f devSeata.yaml

#查看pod列表
 kubectl get pod,svc -A -o wide

#这时候就可以看到你刚创建的pod了

  • 22
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Kubernetes部署 Seata,您可以按照以下步骤进行操作: 1. 创建 Seata 的配置文件: 在您的 Kubernetes 集群上创建一个 ConfigMap,将 Seata 的配置文件存储为一个或多个配置项。您可以根据需要创建一个名为 `seata-config` 的 ConfigMap,并将 Seata 的配置文件内容存储在其中。 2. 部署 Seata Server: 创建一个名为 `seata-server` 的 Deployment,指定 Seata Server 的容器镜像和其他相关配置。确保将 Seata Server 的端口暴露出来,以便其他服务可以连接到它。 3. 部署 Seata TC(Transaction Coordinator): 创建一个名为 `seata-tc` 的 Deployment,指定 Seata TC 的容器镜像和其他相关配置。确保将 Seata TC 的端口暴露出来,并将其连接到 Seata Server。 4. 配置微服务应用: 对于使用 Seata 进行分布式事务管理的微服务应用,需要添加 Seata 的依赖,并配置相关的数据源代理、事务管理器等。 5. 配置 Seata AT(Automatic Transaction)模式: 如果您使用的是 Seata AT 模式(自动事务),则需要在需要进行分布式事务管理的业务方法上添加 `@GlobalTransactional` 注解。 6. 部署其他微服务应用: 部署其他需要使用 Seata 进行分布式事务管理的微服务应用,并按照第 5 步的方式配置。 请注意,以上步骤仅提供了一个大致的部署流程,具体的实现细节可能会根据您的实际需求和环境而有所不同。建议您参考 Seata 官方文档以获取更详细的部署指南和配置说明。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值