基于Docker安装部署Seata:1.3.0

注意:docker部署的127.0.0.0和localhost全部改为服务器内网IP,否则会链接失败。

  1. 下载Seata的docker镜像:
docker pull seataio/seata-server:1.3.0
  1. 启动nacos容器 获取配置文件:
docker run --name seata-server -p 8091:8091 -d  seataio/seata-server:1.3.0
  1. 创建挂载目录 方便修改配置:
docker cp seata-server:/seata-server /data/seata
  1. 停止用来复制配置文件的Seata容器
#停止容器
docker stop seata-server
#删除容器
docker rm seata-server
  1. 修改配置文件,进入目录/data/seata/resources中修改file.conf和registry.conf中的内容
  2. 修改文件 file.conf
	## transaction log store, only used in seata-server
	store {
	  ## store mode: file、db、redis
	  mode = "db"

	  ## file store property
	  file {
		## store location dir
		dir = "sessionStore"
		# branch session size , if exceeded first try compress lockkey, still exceeded throws exceptions
		maxBranchSessionSize = 16384
		# globe session size , if exceeded throws exceptions
		maxGlobalSessionSize = 512
		# file buffer size , if exceeded allocate new buffer
		fileWriteBufferCacheSize = 16384
		# when recover batch read size
		sessionReloadReadSize = 100
		# async, sync
		flushDiskMode = async
	  }

	  ## database store property
	  db {
		## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp)/HikariDataSource(hikari) etc.
		datasource = "druid"
		## mysql/oracle/postgresql/h2/oceanbase etc.
		dbType = "mysql"
		## 注意使用mysql8.0及以上版本的需要更改:driverClassName = "com.mysql.cj.jdbc.Driver"
		driverClassName = "com.mysql.jdbc.Driver"
		url = "jdbc:mysql://127.0.0.1:3306/dbname?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&&zeroDateTimeBehavior=convertToNull"
		user = "dbuser"
		password = "dbpwd"
		minConn = 5
		maxConn = 30
		globalTable = "global_table"
		branchTable = "branch_table"
		lockTable = "lock_table"
		queryLimit = 100
		maxWait = 5000
	  }

	  ## redis store property
	  redis {
		host = "127.0.0.1"
		port = "6379"
		password = "pwd_123"
		database = "0"
		minConn = 1
		maxConn = 10
		queryLimit = 100
	  }
	}
  1. 修改文件 registry.conf,参考一下配置。
    (nacos服务对应的ip地址假设为:127.0.0.1;nacos服务的用户名密码假设都为:nacos):
	registry {
	  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
	  type = "nacos"

	  nacos {
		application = "seata-server"
		serverAddr = "127.0.0.1:8848"
		group = "SEATA_GROUP"
		namespace = ""
		cluster = "default"
		username = "nacos"
		password = "nacos"
	  }
	  redis {
		serverAddr = "localhost:6379"
		db = 0
		password = "pwd_123"
		cluster = "default"
		timeout = 0
	  }
	  file {
		name = "file.conf"
	  }
	}

	config {
	  # file、nacos 、apollo、zk、consul、etcd3
	  type = "file"

	  nacos {
		serverAddr = "127.0.0.1:8848"
		namespace = ""
		group = "SEATA_GROUP"
		username = "nacos"
		password = "nacos"
	  }
	  file {
		name = "file.conf"
	  }
	}
  1. 准备 config.txt 文件 放入 /data/seata/文件夹中,内容参考以下配置(主要注意数据库连接串和用户名密码的修改):
transport.type=TCP
transport.server=NIO
transport.heartbeat=true
transport.enableClientBatchSendRequest=true
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
service.vgroupMapping.my_test_tx_group=default
service.default.grouplist=127.0.0.1:8091
service.enableDegrade=false
service.disableGlobalTransaction=false
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=false
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
store.mode=db
store.lock.mode=file
store.session.mode=file
store.publicKey=
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
store.db.datasource=druid
store.db.dbType=mysql
#注意使用mysql8.0及以上版本的需要更改:store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/dbname?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&&zeroDateTimeBehavior=convertToNull
store.db.user=root   #数据库用户名
store.db.password=root #数据库密码
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
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
client.undo.dataValidation=true
client.undo.logSerialization=jackson
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
log.exceptionRate=100
transport.serialization=seata
transport.compressor=none
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898
tcc.fence.logTableName=tcc_fence_log
tcc.fence.cleanPeriod=1h
  1. 新建 nacos-config.sh 放入 /data/seata/resources文件夹中;参考配置如下:
	#!/bin/sh
	# Copyright 1999-2019 Seata.io Group.
	#
	# Licensed under the Apache License, Version 2.0 (the "License");
	# you may not use this file except in compliance with the License.
	# You may obtain a copy of the License at、
	#
	#      http://www.apache.org/licenses/LICENSE-2.0
	#
	# Unless required by applicable law or agreed to in writing, software
	# distributed under the License is distributed on an "AS IS" BASIS,
	# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
	# See the License for the specific language governing permissions and
	# limitations under the License.

	while getopts ":h:p:g:t:u:w:" opt
	do
	  case $opt in
	  h)
		host=$OPTARG
		;;
	  p)
		port=$OPTARG
		;;
	  g)
		group=$OPTARG
		;;
	  t)
		tenant=$OPTARG
		;;
	  u)
		username=$OPTARG
		;;
	  w)
		password=$OPTARG
		;;
	  ?)
		echo " USAGE OPTION: $0 [-h host] [-p port] [-g group] [-t tenant] [-u username] [-w password] "
		exit 1
		;;
	  esac
	done

	if [ -z ${host} ]; then
		host=localhost
	fi
	if [ -z ${port} ]; then
		port=8848
	fi
	if [ -z ${group} ]; then
		group="SEATA_GROUP"
	fi
	if [ -z ${tenant} ]; then
		tenant=""
	fi
	if [ -z ${username} ]; then
		username=""
	fi
	if [ -z ${password} ]; then
		password=""
	fi

	nacosAddr=$host:$port
	contentType="content-type:application/json;charset=UTF-8"

	echo "set nacosAddr=$nacosAddr"
	echo "set group=$group"

	urlencode() {
	  length="${#1}"
	  i=0
	  while [ $length -gt $i ]; do
		char="${1:$i:1}"
		case $char in
		[a-zA-Z0-9.~_-]) printf $char ;;
		*) printf '%%%02X' "'$char" ;;
		esac
		i=`expr $i + 1`
	  done
	}

	failCount=0
	tempLog=$(mktemp -u)
	function addConfig() {
	  dataId=`urlencode $1`
	  content=`urlencode $2`
	  curl -X POST -H "${contentType}" "http://$nacosAddr/nacos/v1/cs/configs?dataId=$dataId&group=$group&content=$content&tenant=$tenant&username=$username&password=$password" >"${tempLog}" 2>/dev/null
	  if [ -z $(cat "${tempLog}") ]; then
		echo " Please check the cluster status. "
		exit 1
	  fi
	  if [ "$(cat "${tempLog}")" == "true" ]; then
		echo "Set $1=$2 successfully "
	  else
		echo "Set $1=$2 failure "
		failCount=`expr $failCount + 1`
	  fi
	}

	count=0
	for line in $(cat $(dirname "$PWD")/config.txt | sed s/[[:space:]]//g); do
		count=`expr $count + 1`
		key=${line%%=*}
		value=${line#*=}
		addConfig "${key}" "${value}"
	done

	echo "========================================================================="
	echo " Complete initialization parameters,  total-count:$count ,  failure-count:$failCount "
	echo "========================================================================="

	if [ ${failCount} -eq 0 ]; then
		echo " Init nacos config finished, please start seata-server. "
	else
		echo " init nacos config fail. "
	fi
  1. 准备好以上4步骤的文件后:
#进入/data/seata/resources
cd /data/seata/resources
# 导入配置(注意替换nacos的用户名密码)
sh nacos-config.sh -h 127.0.0.1 -p 8848 -g SEATA_GROUP -u nacos -w nacos
  1. 重新启动seata:
    注意:这里启动的时候检查一下挂载的配置文件目录,/data/seata根据实际目录配置。有的环境可能是/data/seata/seata-server
docker run -d --restart always \
--name  seata-server \
-v /etc/localtime:/etc/localtime \
-p 8091:8091  -v /data/seata:/seata-server \
seataio/seata-server:1.3.0
  1. 确认是否注册成功,如图是成功的内容。
    在这里插入图片描述
    在这里插入图片描述
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值