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.103PORT=3306USERNAME=rootPASSWD=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="−ℎ/:///1.8.0102//."="JAVAOPTS−Xbootclasspath/a:/usr/local/jdk1.8.0102/lib/tools.jar"JAVAOPTS="{JAVA_OPTS} -javaagent://−/−ℎ−."="DIR/simulator−agent/simulator−launcher−instrument.jar"JAVAOPTS="{JAVA_OPTS} -javaagent://−//−ℎ−−2.12.1."="DIR/simulator−agent/bootstrap/transmittable−thread−local−2.12.1.jar"JAVAOPTS="{JAVA_OPTS} -Dsimulator.delay=10"
JAVA_OPTS="−.="="JAVAOPTS−Dsimulator.unit=SECONDS"JAVAOPTS="{JAVA_OPTS} -Dpradar.project.name=easydemo-gateway-1.0.0"
JAVA_OPTS="−.ℎ.ℎ="ℎJAVAOPTS−Djdk.attach.allowAttachSelf=true"nohupjava{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="−ℎ/:///1.8.0102//."="JAVAOPTS−Xbootclasspath/a:/usr/local/jdk1.8.0102/lib/tools.jar"JAVAOPTS="{JAVA_OPTS} -javaagent://−/−ℎ−."="DIR/simulator−agent/simulator−launcher−instrument.jar"JAVAOPTS="{JAVA_OPTS} -javaagent://−//−ℎ−−2.12.1."="DIR/simulator−agent/bootstrap/transmittable−thread−local−2.12.1.jar"JAVAOPTS="{JAVA_OPTS} -Dsimulator.delay=10"
JAVA_OPTS="−.="="JAVAOPTS−Dsimulator.unit=SECONDS"JAVAOPTS="{JAVA_OPTS} -Dpradar.project.name=easydemo-gateway-1.0.0"
JAVA_OPTS="−.ℎ.ℎ="ℎJAVAOPTS−Djdk.attach.allowAttachSelf=true"nohupjava{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目录,使用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