呕心沥血研究半个月的全球首款生产环境全链路压测平台takin(羚牛)

先来看官网:https://news.shulie.io/

 他们还有个文档地址:https://docs.shulie.io/docs/opensource/opensource-1d40ib39m90bu

 然而根据文档却不是那么好部署的:

 接下来我们根据文档一步步的操作:

简介:Takin是基于Java的开源系统,可以在无业务代码侵入的情况下,嵌入到各个应用程序节点,实现生产环境的全链路性能测试,适用于复杂的微服务架构系统。

 

 

 

GitHub开源地址如下:https://github.com/shulieTech/Takin

 

 

 

术语表

业务活动

业务活动指的就是单接口的链路。在压测场景里可以对业务活动发起压测。

影子库表

影子表:原始表的副本。影子表前缀通常以PT_开头,作用是存储压测生产的数据,目的是做数据隔离确保真实业务数据的安全。
影子库: 同影子表,只是以库的维度隔离。
方案选择:
①影子库方案:不清楚表的调用情况,就从原始库copy一份,不用去梳理库里表的详细情况
②影子表方案:清楚表的调用情况,那就在同库里建影子表

白名单

在客户端应用里,将对外调用的接口加入到白名单,表示允许压测流量通过。

挡板

顾名思义,阻止/限制作用。挡板可以将请求拦截,并返回预设好的结果,模拟正常或异常的请求结果。

SLA

Service-Level Agreement的缩写,意思是服务等级协议。在全链路产品中,通过SLA可以保障系统负载的底线,异常指标规则的定义。当压测过程中,触发SLA熔断指标,压测将自动停止,以保障生产安全。

指标统计

并发数

同时发起业务操作的用户数,在压测中也指虚拟用户数(Virtual User)。

TPS

Transaction Per Second, 每秒事务数, 是衡量系统性能的一个非常重要的指标。

业务活动详情统计

TPS取当前节点最近5分钟的平均值,包含压测流量+业务流量。

压测统计

TPS当前压测业务活动中,取压测期间的平均值,每 10 秒刷新一次。

RT

Response Time,响应时间,执行一个请求从开始到最后收到响应数据所花费的总体时间。

业务活动详情统计

RT取当前节点最近5分钟的平均值,包含压测流量+业务流量。RT取当前节点最近5分钟的平均值,包含压测流量+业务流量。

压测统计

RT当前压测业务活动中,取压测期间的平均值,每 10 秒刷新一次。

成功率

对于请求:一个请求返回200 状态的次数/总请求次数。
对于链路内部节点:上游节点调用下游节点成功次数/总次数。

业务活动详情统计

取最近 24 小时的累加值,包含压测流量+业务流量。

压测统计

取压测期间的平均值,每 5 秒刷新一次。

SA

RT的达标率,请求中RT达到目标值的百分比。

压测统计

取压测期间的平均值,每 5 秒刷新一次。

前期准备工作

业务场景梳理

确定全链路压测的业务范围,根据业务范围接口,确定应用维度的系统架构,即确定需要安装LinkAgent的应用范围。梳理清楚各场景的组件依赖、第三方依赖,为后续联调工作做准备。

准备压测脚本

根据业务场景编写JMeter压测脚本

测试环境联调

安装LinkAgent

相关应用全部都需要安装探针

链路梳理

使用正常流量做单接口、复合场景的测试、回归,确保业务正常;研发确认相关调用链是否正常、完整;
通过LinkAgent自动梳理相关应用的依赖、应用间调用关系、依赖的DB、缓存、RPC、消息等中间件。

影子数据准备

确定表关联字段、偏移规则、脱敏规则;
DBA建库建表并依据规则准备数据库铺底数据

压测流量联调

确定白名单、影子规则、Mock规则并配置到系统中;
使用压测流量做单接口、复合场景的测试,确保业务正常;
确认相关调用链是否正常、完整,确认数据是否全部落入影子库表。

生产环境验证

安装LinkAgent

相关应用全部都需要安装探针

影子数据准备

DBA建库建表并依据规则准备数据库铺底数据

压测流量联调

将白名单、影子规则、Mock规则迁移到生产环境;
使用小批量压测流量做单接口、复合场景的测试,确保业务正常;
确认相关调用链是否正常、完整,确认数据是否全部落入影子库表。

生产环境压测演练

演练前准备

确定业务场景的压测目标;
进行业务场景的施压配置;
确定业务场景的SLA熔断机制。

压测演练

压测演练;
演练过程监控。

压测报告分析

获取压测报告,进行压测报告分析、性能分析

环境要求:最低8GB的内存,20GB的硬盘
镜像大小:2.1GB

在使用Takin-web镜像的前提条件是必须有安装docker,还不会安装docker的同学请自行百度(在公司的同学,可以请运维帮忙部署一下)。
装完docker之后只需要执行两步即可快速使用我们的takin-web。

拉取takin镜像:docker pull registry.cn-hangzhou.aliyuncs.com/shulie-takin/takin:v1.0.1

 启动takin容器:docker run -e APPIP=192.168.1.103  -p 80:80 -p 2181:2181 -p 29900-29999:29900-29999 -p 3306:3306 -p 6379:6379 registry.cn-hangzhou.aliyuncs.com/shulie-takin/takin:v1.0.1

参数说明如下:

-e:添加系统参数。
-d:后台启动,如果不想查看部署日志可以在-e前面添加-d参数。

APPIP:是运行容器所在的宿主机IP。
默认surge-deploy是读取docker网卡的ip进行注册到zookeeper上的,这样会导致agent无法与容器中的surge-deploy进行通信,通过指定APPIP可以将宿主机的IP注册到zookeeper上,这样agent就可以在容器外通过宿主机IP与容器内的surge-deploy应用进行通信。

-p:需要开放的端口
前面的端口表示宿主机需要开放的端口,后面的表示容器中需要开放的端口。例如80:80指就是用宿主机的80端口映射到容器中的80端口。当然,你也可以使用其它的端口来与容器内的80端口进行映射,例如70:80,这样也是可以的。
但是,在访问的时候你就需要把70这个端口加上,例如使用2000:2181 agent在连接zookeeper的时候就需要把端口改成2000。其中80,2181,29900-29999这些端口是必须要开放的。
如果你想连接系统的redis,mysql你还可以选开放6379和3306端口。

安装tips

Tips:整个安装部署过程大概2分钟左右,mysql比较大需要动态编译因此耗时稍微久一点。
部署成功之后如果出现:
错误代码:502 ,Bad Gateway/错误的网关!
这是因为容器内的takin-web还未完全启动完成,请再等一下,刷新页面就好了。

如果映射的是81端口需要改index.html文件

docker ps 

docker ps -a

docke exec -it 容器id /bin/bash

/data/apps/dist/web

vi index.html

DEMO应用环境准备

开源地址

https://github.com/shulieTech/EasyDemo

下载demo

进入应用服务器(cd  /opt目录),准备DEMO应用:

curl -O https://install-pkg.oss-cn-hangzhou.aliyuncs.com/demo/easydemo_0712.tgz

解压:

tar xvf easydemo_0712.tgz

配置更新

easydemo-gateway

app/gateway/application.properties无需更改

easydemo-usercenter

app/user/application.properties无需更改

更新数据库配置

demoEnv.conf里更新配置

配置demo应用的数据库连接

demoEnv.conf里的数据库相关配置更改为您的数据源地址

MYSQLURL=192.168.1.103
PORT=3306
USERNAME=root
PASSWD=shulie@2020
需要有java环境和
tools.jar(见centos7下java安装https://www.cnblogs.com/zhang-da/p/13027872.html)

启动demo

./demoInstall.sh

如果这里报错 line 5:create_table_sql:no such file or directory
是因为这个脚本里有mysql命令去创建表,所以要么本机装个mysql客户端,要么修改一下脚本,只启动应用,单独去mysql那边建下表

linkAgent接入

agent接入到应用后,需要与压测控制台进行数据传输。二者的网络需要打通。

linkAgent开源地址

https://github.com/shulieTech/LinkAgent

linkAgent下载

https://github.com/shulieTech/LinkAgent/blob/main/doc/QuickStart.md
进入opt目录

curl -O https://install-pkg.oss-cn-hangzhou.aliyuncs.com/manual/agent-opensource.zip

#没有unzip的可以使用yum源或者其他源安装一下
unzip agent-opensource.zip

mv agent-opensource ./simulator-agent

最后的agent目录为:opt/simulator-agent

接入到demo应用

解压到应用服务器

配置更新

agent.properties

 vi simulator-agent/config/agent.properties
#配置zookeeper连接 请填写takin部署的docker宿主机的ip
simulator.zk.servers=宿主机ip:2181

# tro web url  请填写takin部署的docker宿主机的ip
tro.web.url=http://宿主机ip/takin-web

simulator.properties

vi simulator-agent/agent/simulator/config/simulator.properties
# pradar zk server path,如果是使用docker镜像的控制台,请使用/config/log/pradar/cloud/server
pradar.server.zk.path=/config/log/pradar/cloud/server

demo应用linkAgent启动方式

更改启动参数

原生启动命令: gateway.sh

start(){
    nohup  java -jar easydemo-gateway.jar >> gateway.log 2>&1 &
}

linkAgent启动方式 gatewayLinkAgent.sh

start(){
    DIR="/opt"
    JAVA_OPTS="${JAVA_OPTS} -Xbootclasspath/a:$JAVA_HOME/lib/tools.jar"
    JAVA_OPTS="${JAVA_OPTS} -javaagent:/${DIR}/simulator-agent/simulator-launcher-instrument.jar"
    JAVA_OPTS="${JAVA_OPTS} -javaagent:/${DIR}/simulator-agent/bootstrap/transmittable-thread-local-2.12.1.jar"
    JAVA_OPTS="${JAVA_OPTS} -Dsimulator.delay=10"
    JAVA_OPTS="${JAVA_OPTS} -Dsimulator.unit=SECONDS"
    JAVA_OPTS="${JAVA_OPTS} -Dpradar.project.name=easydemo-gateway-1.0.0"
    JAVA_OPTS="${JAVA_OPTS} -Djdk.attach.allowAttachSelf=true"
    nohup  java ${JAVA_OPTS} -XX:+PrintGCTimeStamps -Xloggc:gc.log -jar easydemo-gateway.jar >> gateway.log 2>&1 &
}

其中
DIR请填写探针包解压的目录
pradar.project.name请填写业务应用名称,全局唯一

也可以修改成下面的

start(){
DIR="/opt"
JAVA_OPTS="${JAVA_OPTS} -Xbootclasspath/a:/usr/local/jdk1.8.0_102/lib/tools.jar"
JAVA_OPTS="${JAVA_OPTS} -javaagent:/${DIR}/simulator-agent/simulator-launcher-instrument.jar"
JAVA_OPTS="${JAVA_OPTS} -javaagent:/${DIR}/simulator-agent/bootstrap/transmittable-thread-local-2.12.1.jar"
JAVA_OPTS="${JAVA_OPTS} -Dsimulator.delay=10"
JAVA_OPTS="${JAVA_OPTS} -Dsimulator.unit=SECONDS"
JAVA_OPTS="${JAVA_OPTS} -Dpradar.project.name=easydemo-gateway-1.0.0"
JAVA_OPTS="${JAVA_OPTS} -Djdk.attach.allowAttachSelf=true"
nohup java ${JAVA_OPTS} -XX:+PrintGCTimeStamps -Xloggc:gc.log -jar easydemo-gateway.jar >> gateway.log 2>&1 &
}

同理更新usercenter应用的启动参数:usercenterLinkAgent.sh

start(){
    DIR="/opt"
    JAVA_OPTS="${JAVA_OPTS} -Xbootclasspath/a:$JAVA_HOME/lib/tools.jar"
    JAVA_OPTS="${JAVA_OPTS} -javaagent:/${DIR}/simulator-agent/simulator-launcher-instrument.jar"
    JAVA_OPTS="${JAVA_OPTS} -javaagent:/${DIR}/simulator-agent/bootstrap/transmittable-thread-local-2.12.1.jar"
    JAVA_OPTS="${JAVA_OPTS} -Dsimulator.delay=10"
    JAVA_OPTS="${JAVA_OPTS} -Dsimulator.unit=SECONDS"
    JAVA_OPTS="${JAVA_OPTS} -Dpradar.project.name=easydemo-usercenter-1.0.0"
    JAVA_OPTS="${JAVA_OPTS} -Djdk.attach.allowAttachSelf=true"
    nohup  java ${JAVA_OPTS} -XX:+PrintGCTimeStamps -Xloggc:gc.log -jar easydemo-usercenter.jar >> usercenter.log 2>&1 &
}

也可以修改成下面的

start(){
DIR="/opt"
JAVA_OPTS="${JAVA_OPTS} -Xbootclasspath/a:/usr/local/jdk1.8.0_102/lib/tools.jar"
JAVA_OPTS="${JAVA_OPTS} -javaagent:/${DIR}/simulator-agent/simulator-launcher-instrument.jar"
JAVA_OPTS="${JAVA_OPTS} -javaagent:/${DIR}/simulator-agent/bootstrap/transmittable-thread-local-2.12.1.jar"
JAVA_OPTS="${JAVA_OPTS} -Dsimulator.delay=10"
JAVA_OPTS="${JAVA_OPTS} -Dsimulator.unit=SECONDS"
JAVA_OPTS="${JAVA_OPTS} -Dpradar.project.name=easydemo-gateway-1.0.0"
JAVA_OPTS="${JAVA_OPTS} -Djdk.attach.allowAttachSelf=true"
nohup java ${JAVA_OPTS} -XX:+PrintGCTimeStamps -Xloggc:gc.log -jar easydemo-gateway.jar >> gateway.log 2>&1 &
}

重启应用

./demoInstallLinkAgent.sh

验证

进入压测控制台:http://192.168.1.220/tro/#/appManage或http://192.168.1.103/web/#/dashboard

第一个坑:应用管理里没有识别到应用

问题现象:


如图,教程接入后控制台没有识别到应用
排查思路:
1.应用没有启动起来
2.应用挂载agent失败

应用没有启动起来

情景1:
看一下应用是否启动起来了
/root/easydemo/app/gateway/gateway.log


这个问题是没找到agent包
去看下simulator的包路径

发现路径配置错了,默认配置是如下的配置:

修改路径后问题解决

情景2:
应用日志没报错

agent日志报错了
去看下应用的agent启动日志
/app/logs_pradar/easydemo-gateway-1.0.0/simulator.log

是lib下没有tools.jar,重装jdk ,openjdk找不到tools.jar 换成oracle的jdk 问题解决

第二个坑:探针管理页面显示探针状态为未安装

问题现象


或者

排查思路

  • 首先登录容器
  • 进入zk bin目录,使用zkCLi.sh 连接zk
    sh /data/apache-zookeeper-3.5.9-bin/bin/zkCli.sh
  • 查询zk中的数据,如下图,可以查询出以下内容
    get /config/log/pradar/status/应用名/实例IP-PID
  • 如果其中agentStatus字段值不为INSTALLED,查看errorMsg字段,根据内容排查相关问题;如果为INSTALLED,登录amdb数据库执行以下脚本:
    alter table t_amdb_app_instance_status convert to character set utf8mb4;
  • 重启对应应用并再次检查探针管理中的探针状态
  • 问题应当得到解决

确定压测链路

确定链路范围

确定一条要压测的链路,这里选用了easydemo
查看easydemo里的HTTP接口,选择带有写入操作的接口curl --location --request POST 'http://192.168.1.203:28881/gateway/api/register'进行压测。

链路梳理

自动链路梳理前,请先用curl或者postman发起一些流量。

curl --location --request POST 'http://192.168.1.203:28881/gateway/api/register' --header 'Content-Type: application/json' --data '{"mobile":"15558172233","password":"123456","nickName":"name-1000033","email":"1000000033@qq.com","birthDay":"2000-11-05","provinceName":"浙江","cityName":"杭州"}'

发起流量请求后,系统会自动进行链路梳理,梳理出应用的服务,以及服务经过的应用、中间件等数据信息

查询后台数据库

 字段含义

 

 

 第三个坑:新增业务活动-无入口

问题现象

新增业务活动,选择应用后,服务下拉框无数据

排查思路

首先查询amdb数据库入口表,根据应用名称和服务名称查询库中是否有记录

select * from t_amdb_pradar_link_entrance where app_name = '' and service_name = '';

如果没有找到,检查surge-deploy任务是否正常启动

ps -ef | grep surge-deploy

如果没有启动,需将任务启动,并重新发起流量。
等待2分钟后再次尝试新增业务活动,应在下拉框中看到对应接口。如依旧无数据,此时登录amdb数据库,使用以下sql查询表中是否含有最新流量数据:

select * from t_trace_all where appName = '你的目标应用' and serviceName = '你的目标url' order by startDate desc;

如果没有最新流量数据,可以参考 https://docs.shulie.io/docs/opensource/cjwt_08 此排查手册确认surge-deploy是否正常对外服务。

如zk中服务节点正常,通过以下命令查看surge任务运行日志

vi /data/surge.out

如含有以下报错:

代表使用的探针包存在问题,可以使用以下探针包替换后重新使用:
https://install-pkg.oss-cn-hangzhou.aliyuncs.com/manual/agent-opensource.zip

如以上排查步骤都不能解决您的问题,请到github仓库提交一个issue并附上以上排查步骤的排查结果,如:
1.t_amdb_pradar_link_entrance表中有无数据
2.surge-deploy任务是否正常启动
3.t_trace_all表中是否有最新流量数据

 也可以在黑窗口里面发请求

新增业务活动

进入「仿真平台->链路梳理->业务活动」,点击「新增业务活动」

数据隔离&数据安全配置

–header “User-Agent:PerfomanceTest” 注意,在header带上了压测标记,以区分压测流量和正式流量。若传入了压测标记,linkAgent会进行数据隔离的处理。

远程调用-白名单配置

白名单是压测流量是否可以调用某个接口的校验机制,可有效防止压测流量泄露至未接入的应用
1加入白名单:加入白名单代表压测流量可调用该接口
2取消白名单:取消白名单代表压测流量不可调用该接口
若未添加白名单,发起压测流量时,会报错

进入easydemo-gateway-1.0.0应用详情-远程调用

对业务活动发起流量后,系统会自动梳理业务活动流经的应用的对外调用请求,以及提供了该接口名称的服务端应用。


/user-center/user/add配置为白名单

影子库表

对于有写操作的接口,若未配置影子库表,发起压测流量时,会报错:提示未进行影子库表的配置。


这里我们使用影子表模式

线下建影子表

--影子表模式
use easydemo_db;
CREATE TABLE `PT_t_user` (
                             `id` bigint(20) NOT NULL AUTO_INCREMENT,
                             `mobile` varchar(16) NOT NULL COMMENT '手机号',
                             `password` varchar(16) NOT NULL COMMENT '登录密码',
                             `nick_name` varchar(32) DEFAULT NULL COMMENT '昵称',
                             `email` varchar(32) DEFAULT NULL COMMENT '邮箱',
                             `birth_day` varchar(16) DEFAULT NULL COMMENT '生日',
                             `province_name` varchar(64) DEFAULT NULL COMMENT '省',
                             `city_name` varchar(64) DEFAULT NULL COMMENT '市',
                             `create_time` datetime DEFAULT CURRENT_TIMESTAMP,
                             `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
                             PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

压测平台配置影子表

进入easydemo-usercenter-1.0.0应用详情,配置影子表。
数据库URL:填写应用使用的数据源地址
jdbc:mysql://192.168.1.173:3306/easydemo_db
影子表:填写接口用到的表,加上PT_前缀

数据隔离验证

数据隔离和安全隔离都配置完成后,可发起压测流量进行验证

./curl.sh

压测准备

JMeter脚本

curl --location --request POST 'http://192.168.1.203:28881/gateway/api/register'准备压测JMeter脚本

注:需使用并发线程组


压测流量文件

若要进行大流量的压测,先准备好数据csv文件,并上传到JMeter脚本

上传脚本到压测平台

进入压测平台->脚本管理->新增脚本

注意:JMeter脚本、jar包、在JMeter里的【csv data set config】/【csv数据文件设置】上传的csv文件,请上传到上面的文件框;

上传:

附注:JMeter脚本中的url若使用了附件类型的参数,如图片等,请上传到下面的附件文件框
文件将与JMeter脚本存储在同一目录下,
所以JMeter脚本中的文件调用路径仅使用文件名即可

创建压测场景

新增场景

进入压测平台->压测场景->新增场景

压测SLA

在生产环境做压测时,为了确保业务应用不会受到影响,可设置某些指标出现异常结果时进行报警提醒或立即终止压测,

可选择全部或单个业务活动;
选择指标,可从TPS、RT、成功率、SA中选择;
设置触发条件和阈值;
点击➕可添加多条SLA规则;

保存完压测场景之后,就可以在列表点击启动压测了。

压测

在压测场景列表选择压测场景,启动压测

压测实况

在压测过程中,需要实时关注压测的指标变化情况,以便于能对压测做出实时性的判断和应急操作。压测实况正是在压测过程中对压测链路进行实时监控的可视化界面,压测实况的全部数据都会保存在压测报告中,也可以手动停止压测,直接到压测报告中查看完整数据。

压测报告

在压测结束后,系统会自动生成一份压测报告,将本次压测所产生的数据进行记录和存档,可随时通过查看报告来回溯压测时的性能指标变化情况,分析性能瓶颈与定位定能问题。

可通过压测场景-查看报告按钮查看,也可以通过菜单路径:压测管理>压测报告查看。

报告详情页包括:压测结果总览、问题分析、压测概览、压测明细、容量水位、告警明细、请求流量明细等。

压测结果总览

压测结论和结果指标:压测是否通过、具体的告警数量、请求总数、最大并发、TPS、平均RT、成功率、SA;

压测概览

可查看压测全局或单个业务活动的TPS、RT、成功率、SA的指标趋势。

压测明细

可查看各个业务活动的具体压测明细指标,包括请求数、平均TPS的实际与目标值、平均RT的实际与目标值、请求成功率的实际与目标值、SA的目标与实际值、最大TPS、最大RT、最小RT;

告警明细

压测过程中根据SLA设定触发的压测告警信息

请求流量明细

记录压测过程中所有的具体请求明细数据,每个请求均拥有唯一的TraceID标识,可点击请求详情查看具体的请求采样日志,包括调用的接口服务、所属的应用、携带的参数、请求状态与本次请求的时间轴,日志信息保留3天,过期会自动清除;


选择耗时较长的请求,查看链路调用详情

4、查看所有的容器:

docker ps

docker ps -a

查看镜像命令

docker images

显示镜像的id

docker images -q

删除镜像

docker rmi name|id

删除全部镜像

docker rmi `docker images -q`

5、docker exec -it 容器id /bin/bash

6、查看日志:

cd apps/takin-web/

7、cd logs/takin-web/

8、tail -200f service.log

9、docker 默认地址: 192.168.99.100 默认账号: docker 默认密码: tcuser

10、移除所有停止状态的容器

docker container prune

11、删除容器

docker rm # 默认只能删除未运行的容器

-f 强制删除

12、停止容器:

docker stop id/名字

13、启动docker容器

docker start 容器id或者容器名称

docker restart id 重启之前运行过/停止的容器

docker ps -a docker restart id

14、
-- 业务库
CREATE DATABASE IF NOT EXISTS easydemo_db DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

USE easydemo_db;

CREATE TABLE `t_user` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`mobile` VARCHAR(16) NOT NULL COMMENT '手机号',
`password` VARCHAR(16) NOT NULL COMMENT '登录密码',
`nick_name` VARCHAR(32) DEFAULT NULL COMMENT '昵称',
`email` VARCHAR(32) DEFAULT NULL COMMENT '邮箱',
`birth_day` VARCHAR(16) DEFAULT NULL COMMENT '生日',
`province_name` VARCHAR(64) DEFAULT NULL COMMENT '省',
`city_name` VARCHAR(64) DEFAULT NULL COMMENT '市',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

SELECT * FROM t_user

CREATE TABLE `pt_t_user` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`mobile` VARCHAR(16) NOT NULL COMMENT '手机号',
`password` VARCHAR(16) NOT NULL COMMENT '登录密码',
`nick_name` VARCHAR(32) DEFAULT NULL COMMENT '昵称',
`email` VARCHAR(32) DEFAULT NULL COMMENT '邮箱',
`birth_day` VARCHAR(16) DEFAULT NULL COMMENT '生日',
`province_name` VARCHAR(64) DEFAULT NULL COMMENT '省',
`city_name` VARCHAR(64) DEFAULT NULL COMMENT '市',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

SELECT * FROM pt_t_user

/*
Navicat Premium Data Transfer

Source Server : 118.178.122.106
Source Server Type : MySQL
Source Server Version : 50732
Source Host : 118.178.122.106:3306
Source Schema : trodb

Target Server Type : MySQL
Target Server Version : 50732
File Encoding : 65001

Date: 29/03/2021 12:05:50
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(255) DEFAULT NULL,
`password` VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=151083 DEFAULT CHARSET=utf8mb4;

-- ----------------------------
-- Records of user
-- ----------------------------
BEGIN;
INSERT INTO `user` VALUES (6, 'aa', '123');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

SELECT * FROM USER

15、查看日志

cat /opt/easydemo/app/gateway/gateway.log

16、启动应用:

cd /opt/easydemo/app/gateway

./gateway.sh

./gatewayLinkAgent.sh

cd /opt/easydemo/app/user

./usercenterLinkAgent.sh

cd /opt/easydemo

./demoInstallLinkAgent.sh

1.docker容器commit成镜像文件
//docker commit 容器名 想要创建的镜像名:版本号
docker commit mmdetection_zjh mmdetection_zjh:v1
2.网站端登录docker_hub并创建仓库
登录: https://hub.docker.com/
有账号就登录,没有就注册一个
注册登录之后创建一个仓库,用来待会存储上传的镜像
3.本地端链接本地镜像与仓库
// docker tag 本地镜像名:版本号 dockerhub用户名/仓库名:版本号
//没有版本号默认latest
docker tag mmdetection_zjh:v1 zjh96/mmdetection_zjh:v1
4.本地端登录账户并push镜像
docker login
然后依次输入docker用户名,密码.

//push本地镜像到仓库
docker push zjh96/mmdetection_zjh:v1

posted @ 2022-02-21 00:44  干it的小张  阅读(361)  评论(0编辑  收藏  举报