构建自己专属seata-server 镜像(分布式事务)?(第二篇)

码云地址:https://gitee.com/jessyxu/yc-seata-server

一.镜像构建前确保自己的seata-server 能够启动成功!

seata-server

官方建议:JDK版本不低于 1.8.0_281版本,兼容JDK 8、JDK11,可使用OpenJDK 8/11Alibaba Dragonwell 8/BiShengJDK 8/11

一 部署前准备

1.1 导入数据库脚本

导入数据库脚本前需要创建数据库

方式一:

Seata官方提供的数据库脚本

/script/server/db/mysql.sql导入数据库中

方式二:

本文最上方csdn资源-提供的数据库脚本,包括Seata相关表、SeataNacos中的配置、环境相关配置信息

yc-database项目中的/java微服务/{version}/nacos-mysql.sql导入数据库中

1.2 修改配置文件
注册至Nacos

打开/conf/application.yml配置文件,找到第11行,修改Nacos相关配置,如下所示

spring:
  application:
    name: seata-server
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:30099
      config:
        server-addr: ${spring.cloud.nacos.discovery.server-addr}
读取nacos上的配置

打开/conf/application.yml配置文件,找到第46行,如下所示,

seata-server.properties为Nacos的配置

seata:
  config:
    # support: nacos 、 consul 、 apollo 、 zk  、 etcd3
    type: nacos
    nacos:
      # nacos ip地址
      server-addr: ${spring.cloud.nacos.discovery.server-addr}
      group: DEFAULT_GROUP
      namespace:
      username: "nacos"
      password: "nacos"
      ##if use MSE Nacos with auth, mutex with username/password attribute
      #access-key: ""
      #secret-key: ""
      # 读取nacos上的配置文件
      data-id: seata-server.properties
1.3 增加Nacos配置

打开Nacos控制台并登录,依次点击【配置管理】-【配置列表】-【public】,点击右侧【+】,

  • Data ID:seata-server (注意:和上述1.2中读取nacos上的配置中的data-id名称保持一致)
  • Group:默认即可
  • 配置格式:Properties (注意:和上述1.2中读取nacos上的配置中的data-id格式保持一致)
  • 配置内容:复制/script/config-center/config.txt所有内容,并做如下调整
# 第26行
#######事务分组名#######
service.vgroupMapping.default_tx_group=default

# 第28行
#######Seata服务地址#######
service.default.grouplist=127.0.0.1:30095

# 第69-71
######mode改成db模式(根据实际场景修改)######
store.mode=db
store.lock.mode=db
store.session.mode=db

# 第86-89行
######MySQL配置内容######
store.db.datasource=druid
store.db.dbType=mysql
# MySQL5.7.x 驱动为com.mysql.jdbc.Driver,MySQL8.0.x驱动为com.mysql.cj.jdbc.Driver
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/yc_nacos?characterEncoding=utf8&rewriteBatchedStatements=true&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8
store.db.user=username
store.db.password=password

二、启动、停止操作

2.1 Windows环境
  • 启动:双击seata-server.bat
  • 停止:双击shutdown.bat
2.2 Linux环境
# 启动
sh startup.sh

# 停止
sh shutdown.sh

三 访问控制台

  • 访问地址: http://127.0.0.1:30095
  • 用户名:seata
  • 密码:seata

四 常见问题

如果直接使用官方下载的安装包并在JDK11环境下运行,需要将bin/seata-server.sh文件中第132行替换成如下内容

JAVA_MAJOR_VERSION=$($JAVACMD -version 2>&1 | head -1 | cut -d'"' -f2 | sed 's/^1\.//' | cut -d'.' -f1)

二、构建docker镜像

nacos 配置文件如下

在这里插入图片描述

#For details about configuration items, see https://seata.io/zh-cn/docs/user/configurations.html
#Transport configuration, for client and server
transport.type=TCP
transport.server=NIO
transport.heartbeat=true
transport.enableTmClientBatchSendRequest=false
transport.enableRmClientBatchSendRequest=true
transport.enableTcServerBatchSendResponse=false
transport.rpcRmRequestTimeout=30000
transport.rpcTmRequestTimeout=30000
transport.rpcTcRequestTimeout=30000
transport.threadFactory.bossThreadPrefix=NettyBoss
transport.threadFactory.workerThreadPrefix=NettyServerNIOWorker
transport.threadFactory.serverExecutorThreadPrefix=NettyServerBizHandler
transport.threadFactory.shareBossWorker=false
transport.threadFactory.clientSelectorThreadPrefix=NettyClientSelector
transport.threadFactory.clientSelectorThreadSize=1
transport.threadFactory.clientWorkerThreadPrefix=NettyClientWorkerThread
transport.threadFactory.bossThreadSize=1
transport.threadFactory.workerThreadSize=default
transport.shutdown.wait=3
transport.serialization=seata
transport.compressor=none

#Transaction routing rules configuration, only for the client
service.vgroupMapping.default_tx_group=default
#If you use a registry, you can ignore it
service.default.grouplist=127.0.0.1:30095
service.enableDegrade=false
service.disableGlobalTransaction=false

#Transaction rule configuration, only for the client
client.rm.asyncCommitBufferLimit=10000
client.rm.lock.retryInterval=10
client.rm.lock.retryTimes=30
client.rm.lock.retryPolicyBranchRollbackOnConflict=true
client.rm.reportRetryCount=5
client.rm.tableMetaCheckEnable=true
client.rm.tableMetaCheckerInterval=60000
client.rm.sqlParserType=druid
client.rm.reportSuccessEnable=false
client.rm.sagaBranchRegisterEnable=false
client.rm.sagaJsonParser=fastjson
client.rm.tccActionInterceptorOrder=-2147482648
client.tm.commitRetryCount=5
client.tm.rollbackRetryCount=5
client.tm.defaultGlobalTransactionTimeout=60000
client.tm.degradeCheck=false
client.tm.degradeCheckAllowTimes=10
client.tm.degradeCheckPeriod=2000
client.tm.interceptorOrder=-2147482648
client.undo.dataValidation=true
client.undo.logSerialization=kryo
client.undo.onlyCareUpdateColumns=true
server.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000
client.undo.logTable=undo_log
client.undo.compress.enable=true
client.undo.compress.type=zip
client.undo.compress.threshold=64k
#For TCC transaction mode
tcc.fence.logTableName=tcc_fence_log
tcc.fence.cleanPeriod=1h

#Log rule configuration, for client and server
log.exceptionRate=100

#Transaction storage configuration, only for the server. The file, DB, and redis configuration values are optional.
store.mode=db
store.lock.mode=db
store.session.mode=db
#Used for password encryption
store.publicKey=

#If `store.mode,store.lock.mode,store.session.mode` are not equal to `file`, you can remove the configuration block.
store.file.dir=file_store/data
store.file.maxBranchSessionSize=16384
store.file.maxGlobalSessionSize=512
store.file.fileWriteBufferCacheSize=16384
store.file.flushDiskMode=async
store.file.sessionReloadReadSize=100

#These configurations are required if the `store mode` is `db`. If `store.mode,store.lock.mode,store.session.mode` are not equal to `db`, you can remove the configuration block.
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://10.0.2.211:31190/nacos_dev?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8
store.db.user=nacos
store.db.password=nacos
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.distributedLockTable=distributed_lock
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000

#These configurations are required if the `store mode` is `redis`. If `store.mode,store.lock.mode,store.session.mode` are not equal to `redis`, you can remove the configuration block.
store.redis.mode=single
store.redis.single.host=10.0.2.211
store.redis.single.port=31120
store.redis.sentinel.masterName=
store.redis.sentinel.sentinelHosts=
store.redis.maxConn=10
store.redis.minConn=1
store.redis.maxTotal=100
store.redis.database=0
store.redis.password=123qwe##
store.redis.queryLimit=100

#Transaction rule configuration, only for the server
server.recovery.committingRetryPeriod=1000
server.recovery.asynCommittingRetryPeriod=1000
server.recovery.rollbackingRetryPeriod=1000
server.recovery.timeoutRetryPeriod=1000
server.maxCommitRetryTimeout=-1
server.maxRollbackRetryTimeout=-1
server.rollbackRetryTimeoutUnlockEnable=false
server.distributedLockExpireTime=10000
server.xaerNotaRetryTimeout=60000
server.session.branchAsyncQueueSize=5000
server.session.enableBranchAsyncRemove=false
server.enableParallelRequestHandle=false

#Metrics configuration, only for the server
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898

docker镜像源码目录结构,请参看本文的资源

在这里插入图片描述

构建docker 运行配置

在这里插入图片描述

构建日志

Sending build context to Docker daemon…
[==================================================>] 130.1MB
Done

Step 1/12 : FROM openjdk:8u232-jre-stretch
 ---> b3f3caa5767c
Step 2/12 : LABEL maintainer="Seata <seata.io>"
 ---> Using cache
 ---> b0097c486d2f
Step 3/12 : WORKDIR /$BASE_DIR
 ---> Using cache
 ---> 0f0989dffd45
Step 4/12 : ADD bin/ /seata-server/bin
 ---> Using cache
 ---> cf3e4e1c8999
Step 5/12 : ADD ext/ /seata-server/ext
 ---> Using cache
 ---> 950ef7efe613
Step 6/12 : ADD target/ /seata-server/target
 ---> Using cache
 ---> ce72c7af1f96
Step 7/12 : ADD lib/ /seata-server/lib
 ---> Using cache
 ---> 3805cc58ad95
Step 8/12 : ADD conf/ /seata-server/conf
 ---> Using cache
 ---> e88a16b691b6
Step 9/12 : ADD LICENSE /seata-server/LICENSE
 ---> Using cache
 ---> 2b0d5c93750e
Step 10/12 : ENV LOADER_PATH="/seata-server/lib"
 ---> Using cache
 ---> 61d27642c102
Step 11/12 : ENV TZ="Asia/Shanghai"
 ---> Using cache
 ---> 50c76acd87c7
Step 12/12 : CMD ["bash","-c","/seata-server/bin/seata-server.sh && tail -f /dev/null"]
 ---> Using cache
 ---> 5ba8681944cd

Successfully built 5ba8681944cd
Successfully tagged yc-seata-server:1.0.0
Creating container…
Container Id: 0d315169c09de2a3cef87d3dcab37a5b6bb054ba875d798e1b6569c02447b483
Container name: 'yc-seata-server'
Starting container 'yc-seata-server'
'yc-seata-server Dockerfile: dockerfile/1spring-cloud-alibaba/yc-seata-server/Dockerfile' has been deployed successfully.

启动日志

apm-skywalking not enabled
2023-12-13T02:20:17.130679960Z JMX disabled
2023-12-13T02:20:17.135467210Z /usr/local/openjdk-8/bin/java  -Dlog.home=/root/logs/seata -server -Dloader.path=/seata-server/lib -Xmx2048m -Xms2048m -Xss640k -XX:SurvivorRatio=10 -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -XX:MaxDirectMemorySize=1024m -XX:-OmitStackTraceInFastThrow -XX:-UseAdaptiveSizePolicy -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/root/logs/seata/java_heapdump.hprof -XX:+DisableExplicitGC -Xloggc:/root/logs/seata/seata_gc.log -verbose:gc -XX:+PrintGCDetails  -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -Dio.netty.leakDetectionLevel=advanced -Dapp.name=seata-server -Dapp.pid=7 -Dapp.home=/seata-server -Dbasedir=/seata-server  -Dspring.config.additional-location=/seata-server/conf/ -Dspring.config.location=/seata-server/conf/application.yml -Dlogging.config=/seata-server/conf/logback-spring.xml -jar /seata-server/target/seata-server.jar  >> /dev/null 2>&1 &
2023-12-13T02:20:17.135748459Z seata-server is starting, you can check the /root/logs/seata/ *.log

启动页面

网址:127.0.0.1:30085
账号:seata
密码:seata

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/240734.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java - Spring中Bean的循环依赖问题

什么是Bean的循环依赖 A对象中有B属性。B对象中有A属性。这就是循环依赖。我依赖你&#xff0c;你也依赖我。 比如&#xff1a;丈夫类Husband&#xff0c;妻子类Wife。Husband中有Wife的引用。Wife中有Husband的引用。 Spring解决循环依赖的机理 Spring为什么可以解决set s…

MSPM0L1306例程学习-ADC部分(2)

MSPM0L1306例程学习系列 使用的TI的官方例程&#xff0c;即SDK里边包含的例程代码。 可以到TI官网下载并且安装SDK: https://www.ti.com.cn/tool/cn/download/MSPM0-SDK/ MCU使用的是MSPM0L1306, 对于ADC部分&#xff0c;有10个例程&#xff1a; 前边讲了3个例程&#xff0c…

企业选CRM系统,这3个关键点你一定不能错过

在充满竞争的商业市场中&#xff0c;企业需要一种强大的工具来管理客户关系&#xff0c;从而提高销售效率。CRM客户关系管理软件就是企业所需要的。然而仅仅是在国内&#xff0c;CRM的供应商就超过了一千家&#xff0c;那么应该怎样选择适合企业的CRM系统&#xff1f; 一、软件…

设计模式——观察者模式(Observer Pattern)

概述 观察者模式是使用频率最高的设计模式之一&#xff0c;它用于建立一种对象与对象之间的依赖关系&#xff0c;一个对象发生改变时将自动通知其他对象&#xff0c;其他对象将相应作出反应。在观察者模式中&#xff0c;发生改变的对象称为观察目标&#xff0c;而被通知的对象称…

Python 自动化之处理docx文件(一)

批量筛选docx文档中关键词 文章目录 批量筛选docx文档中关键词前言一、做成什么样子二、基本架构三、前期输入模块1.引入库2.路径输入3.关键词输入 三、数据处理模块1.基本架构2.如果是docx文档2.1.读取当前文档内容2.2.遍历匹配关键字2.3.触发匹配并记录日志 3.如果目录下还有…

ajax和Axios快速入门

什么是ajax 概念&#xff1a; Asynchronous JavaScript And XML&#xff0c;异步的JavaScrip和XML&#xff0c;重点在异步。 作用&#xff1a; 1&#xff0c;数据交互&#xff0c;可以通过ajax给服务器发送请求&#xff0c;并获取服务器响应的数据。 2&#xff0c;异步交互&am…

SSD Wear Leveling磨损均衡,并不是一直有效,甚至有负面作用!-part1

1.引言 上一篇WL基础文章中&#xff0c;我们介绍了SSD为何需要Wear Leveling磨损均衡的基本原理和分类&#xff0c;阅读本文之前&#xff0c;建议先了解WL磨损均衡的相关背景&#xff1a; 扩展阅读&#xff1a;深入解析SSD Wear Leveling磨损均衡技术&#xff1a;如何让你的硬…

什么是循环依赖,如何解决

目录 什么是循环依赖&#xff1f; 循环依赖的原因&#xff1a; 如何解决循环依赖问题&#xff1f; 最佳实践和注意事项&#xff1a; 结论&#xff1a; 当在使用 Spring Boot 进行开发时&#xff0c;循环依赖&#xff08;Circular Dependency&#xff09;可能会成为一个常见…

C语言之数组精讲(1)

目录 数组 数组的声明&#xff08;使用数组前的准备&#xff09; 访问数组&#xff08;数组的使用方法&#xff09; 数组的遍历 数组初始化 1.在声明变量时&#xff0c;除了必要的情况下&#xff0c;都需要对变量进行初始化。 2.我们还可以像下面在声明数组时不指定元素…

mitm抓包实践---可用于投票、日常类任务运用

文章目录 一、安装mitm二、证书导入三、抓包三、后话补充 一、安装mitm 第一种方式: 官网下载 https://mitmproxy.org/downloads/ 第二种方式: py库安装 pip install mitmproxy我是第一种&#xff0c;不熟悉py 二、证书导入 下载证书: http://mitm.it/ 首先你要开启代理&am…

【MySQL】MySQL库的操作

MySQL库的操作 一、创建数据库创建数据库案例字符集和校验规则校验规则对数据库的影响 二、操纵数据库1、查看数据库2、查看当前正在使用的数据库3、使用数据库4、显示创建语句5、数据库删除6、数据库的修改7、备份和恢复8、查看连接情况 一、创建数据库 创建数据库的语法如下…

HarmonyOS第一课ArkTS开发语言(TypeScript快速入门)

编程语言介绍 ArkTS是HarmonyOS优选的主力应用开发语言。它在TypeScript&#xff08;简称TS&#xff09;的基础上&#xff0c;匹配ArkUI框架&#xff0c;扩展了声明式UI、状态管理等相应的能力&#xff0c;让开发者以更简洁、更自然的方式开发跨端应用。要了解什么是ArkTS&…

C语言:高精度乘法

P1303 A*B Problem - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 第一次画图&#xff0c;略显简陋。 由图可以看出c的小标与x,y下标的关系为x的下标加上y的下标再减一。 由此得到&#xff1a; c [ i j - 1 ] x [ i ] * y [ j ]x #include<stdio.h> #include<st…

(第67天)RMAN Duplicate 克隆 PDB

介绍 在之前 NONCDB 版本我们经常使用 RMAN Duplicate 方式来在线搭建 DataGuard,非常方便快捷。从 12C 开始 Oracle 推出了 CDB 架构后,自然也就支持使用 Duplicate 的方式来复制 CDB,但是 12C 时还没有那么智能。 从 18C 开始进行了升级,可以支持使用 RMAN Duplicate 方…

react-webApp--响应式布局

rem响应式布局 移动端响应式布局 1.自己实现&#xff0c;需要设计好初始换算比&#xff0c;设为100px方便计算 <meta name"viewport" content"widthdevice-width, initial-scale1.0, maximum-scale1.0, minimum-scale1.0, user-scalableno"/> <…

爬虫学习日记第九篇(爬取seebug)

目标&#xff1a;https://www.seebug.org/vuldb/vulnerabilities 需求&#xff1a;爬取cve_id及影响组件 单线程 cookie是有时效的(过一段时间就不行了&#xff0c;大概半小时左右)&#xff0c;但是并不需要登录(直接抓包拿到的请求头) import base64 import json import ur…

持续集成交付CICD:通过API方式上传Nexus制品

目录 一、实验 1.通过API方式上传Nexus制品 二、问题 1.如何通过API方式上传PNG图片 2.如何通过API方式上传tar.gz 与 ZIP文件 3.如何通过API方式上传Jar file文件 4.如何通过API方式上传制品&#xff08;maven类型的制品&#xff09;文件 5.如何下载制品 一、实验 1.通…

flink找不到隐式项

增加 import org.apache.flink.streaming.api.scala._ 即可

C语言 联合体验证 主机字节序 +枚举

联合体应用&#xff1a;验证当前主机的大小端&#xff08;字节序&#xff09; //验证当前主机的大小端 #include <stdio.h>union MyData {unsigned int data;struct{unsigned char byte0;unsigned char byte1;unsigned char byte2;unsigned char byte3;}byte; };int main…

在Vue2中使用MarkDown编辑器输入(mavonEditor)

在开发一些需求如博客系统时&#xff0c;原始的文本框不满足我们的需求&#xff0c;展示word文档的格式又太麻烦吗&#xff0c;不难想到使用markdown的格式来输入和展示内容。本文介绍了在Vue2中怎么使用markdown格式的输入框和展示框。 先看一下实现的效果 官方文档 我们使用…