技术运维
运维相关的问题可以在这里进行查看。
若您仍然有部署及调用问题,请提交工单联系百度的工作人员
常用Docker命令
1.docker常用命令
docker ps -a #查看所有容器
docker restart (container_id)#重启container_id容器
docker exec -it (container_id) /bin/bash #进入到container_id容器
docker images #查看所有镜像
docker rm -f 容器ID #删除容器
人脸服务运维
- 如何查看人脸服务是否部署成功?
如果执行部署命令后,未出现错误提示,需要确认服务是否正常:
- 在宿主机上执行命令:nvidia-smi, 查看GPU进程是否启动
- 或者进入容器,执行测试脚本:
进入容器:
docker ps -a #查看所有容器
docker exec -it (container_id) /bin/bash #进入到container_id容器
切换目录
cd testtool
执行测试脚本:
/home/idl-face/odp/php/bin/php FaceApiV3Test.php 127.0.0.1 8300
2.怎么重启鉴权服务
停止服务:
cd /home/baidu/work/c-offline-security-server/ && bash start/c-offline-security-server-stop.sh
启动服务:
cd /home/baidu/work/c-offline-security-server/ && nohup bash start/c-offline-security-server-start.sh &
鉴权服务运维
- 检查鉴权服务是否启动
ps -ef|grep auth_server
服务正常启动后如下图所示:
2.检查鉴权服务端口是否启动
netstat -apn|grep 8443。服务正常启动后如下图所示:
3.查看鉴权启动日志
从/home/baidu/work/c-offline-security-server/log/auth_server.log查看鉴权服务启动日志。
1)启动成功的日志如下图所示:
2)启动时常见的报错提示如下:
如下表示license文件不对,可能的原因是license的版本不对或者人为修改了license。
4.查看鉴权请求日志
从/home/baidu/work/c-offline-security-server/log/aipeinfo日期.log查看鉴权日志。根据应用里鉴权失败的时间或者根据产品名查找日志。
1)鉴权成功日志如下:
或者
2)鉴权常见失败日志如下:
鉴权失败日志 | 原因 |
---|---|
verify finger is invaliid,product=... | 机器指纹校验失败,license和当前指纹对不上 可能原因: (1)申请License时用的指纹不是当前机器的指纹 (2)当前机器硬件发生了变化 (3)采集指纹时的用户和鉴权服务运行时的用户不一致 |
verify product has not found,product=... | License里没有该产品的授权 |
verify product lc is expired,product=... | 该产品授权已过期 |
instance_check reg fail,r_list full,product=...,id=... | 该产品授权的实例池已满。可能原因: (1)该产品的容器超过了授权的实例数 (2)已停止的容器占用了授权实例池,等1分钟后实例池自动清理过期实例,再鉴权即可 (3)应用每次重启后碰到的这种情况,可能是鉴权客户端版本较老,没有把实例id持久化,需要升级应用 |
cache client get context error:Connection refused | 鉴权服务连接本机缓存失败,可能的原因是: (1)鉴权服务配置的ip和服务器实际ip不一致; (2)8991端口或6666端口被占用,导致缓存服务没起来 |
5.重启鉴权服务
停止服务:
cd /home/baidu/work/c-offline-security-server/ && bash start/c-offline-security-server-stop.sh
启动服务:
cd /home/baidu/work/c-offline-security-server/ && nohup bash start/c-offline-security-server-start.sh &
日志查看及修改
1. 如何查看日志
(1)查看所有服务启动的日志
进入容器,查看文件
/home/idl-face/sys_start.log
(2)查看人脸服务的日志
进入容器,查看文件
/home/idl-face/feature-frame/log/service.log.wf
2.修改清理日志时长定时任务(默认为15天定期清理)
(1)进入容器
(2)切换idl-face用户
(3)执行命令crontab -e 修改天数
数据库运维
1.数据库服务加入开机自启
- 在部署过程中一键安装数据库加入开启自启功能
- 手动将数据库启动加入开机启动
vim /etc/rc.local
加入bash /home/idl-face/databus5535/sh/mysql_boot.sh
2.数据库迁移方案
您可以选择直接拷贝数据库到另一台服务器上,也可以选择将服务器中的内容导出到另一台数据库中
方法一:拷贝数据库
(1)查看服务器一是否有databus进程,如果有请kill掉databus进程
查看容器进程
ps aux|grep databus
杀掉进程(示例)
kill 76692(进程号)
(2)进入/home/idl-face/目录 将databus5535目录打包成databus5535.tar.gz,下载到本地
进入目录
cd /home/idl-face
将databus5535目录打包成databus5535.tar.gz
tar -czvf databus5535.tar.gz databus5535/
(3)服务器二中新建idl-face用户,查看是否有/home/idl-face/目录,如果没有则新建/home/idl-face/目录 新建idl-face用户
useradd idl-face
新建/home/idl-face/目录
mkdir -p /home/idl-face/
(4)4、 将databus5535.tar.gz上传到服务器中/home/idl-face/目录,解压 tar –xzvf databus5535.tar.gz (5)5、 切换idl-face用户,进入/home/idl-face/databus5535/bin/目录,启动数据库 进入目录
cd /home/idl-face/databus5535/bin/
启动数据库服务
nohup ./mysqld_safe --defaults-file=../etc/my.cnf &
(6)切换root用户,将数据库加入自启动 打开文件
vim /etc/rc.local
加入数据库自启动
bash /home/idl-face/databus5535/sh/mysql_boot.sh
方法二:数据库导入
(1)在新部署的服务器上面使用自动化脚本部署数据库服务需要提前安装数据库服务 参考部署说明文档进行数据库服务的一键安装
(2)在原数据库服务器进入/home/idl-face/databus5535/bin/目录,执行导出数据库命令 进入目录
cd /home/idl-face/databus5535/bin/
导出数据库命令
./mysqldump -u root -p face > face.sql
输入密码Bs~XIsDDv4XcDGCt)S(+4*yjQ&8NJh
(3)将face.sql下载上传到服务器二的/home/idl-face/目录 (4)进入服务器二/home/idl-face/databus5535/bin目录,进入命令行模式,删除face库 进入目录
cd /home/idl-face/databus5535/bin/
执行进入数据库命令
./mysql -u root -p
输入密码Bs~XIsDDv4XcDGCt)S(+4*yjQ&8NJh 删除数据库
drop database face;
新建数据库
create database face;
导入数据库
source /home/idl-face/face.sql
(5)新建数据库,并执行导入操作
- 数据库的备份与备份删除
(1)在服务器上/home/idl-face/databus5535/sh/目录下查看mysql_export.sh脚本
(2) 执行crontab –e命令
crontab –e
在crontab –e命令里面加入 执行数据库备份命令(eg:每周一上午2点执行数据库备份)
0 2 * * 1 bash /home/idl-face/databus5535/sh/mysql_export.sh
使用此脚本前需要先进行修改
FILE_PATH 此变量为sql备份地址,可进行自定义。如修改位置。备份定时清理地址需同步进行修改
FILE环境变量需要修改为$FILEPATH/face$TIME.sql 修改后为FILE=$FILEPATH/face$TIME.sql
注:若想对备份时间点进行修改,修改前五位数字即可:
前五位代表 分钟 时 天 月 周 ,中间用空格替代
(3)如果您想对备份的数据库进行定时清除,请执行以下操作
执行crontab –e命令,在里面加入执行数据库备份删除命令(eg:每天晚上00:06会将15天前备份的数据库删除)
6 0 * * * find /home/idl-face/sql/face_* -type f -mtime +15 -exec rm -f {} \;
(4)保存
- 清除数据库图片特征值(慎用)
注:图片特征值与Face_Token有关,若您后续需要采用face_token进行人脸注册、人脸比对、人脸搜索,不建议您清除
(1)下载脚本mysql_truncate.sh并且放到服务器/home/idl-face/databus5535/sh/目录
cd /home/idl-face/databus5535/sh/
(2)当需要执行清空特征值时,执行bash /home/idl-face/databus5535/sh/mysql_truncate.sh命令
bash /home/idl-face/databus5535/sh/mysql_truncate.sh
- 关闭数据库存储图片特征值
(1)进入目录
cd /home/idl-face/odp/conf/app/face-api/project/face.conf
(2)将下图db修改为none
注:关闭后只能通过图片进行搜索,无法使用face_token,若您后续需要采用face_token进行人脸注册、人脸比对、人脸搜索,不建议您关闭
更改人脸缓存数据同步策略
为保障人脸1:N搜索接口查询效率,人脸容器内置AISE缓存服务,默认情况下采用异步方式更新缓存数据,如果在人脸注册成功后,无法及时通过1:N搜索查询到对应人脸信息,可将数据更新策略更改为同步方式。更改方式如下:
1、切到face-service容器bash终端
# 人脸容器名可通过docker ps|grep face 查询
docker exec -it <人脸容器名> bash
2、修改配置文件,将 data_sync
值改为1
vi /home/idl-face/odp/conf/app/face-api/project/service.conf
# data_sync
# 1表示实时同步,0表示异步方式同步
3、退出容器bash终端并重启人脸容器
exit
docker restart <人脸容器名>
IP地址修改
- 服务器的网络环境发生变化,IP地址如何修改?
(1)删除容器
(2)修改鉴权的IP地址
鉴权IP地址所在的配置文件
vi /home/baidu/work/c-offline-security-server/conf/server.conf
修改后需重启鉴权服务
(3) 修改人脸IP地址
vim /home/baidu/work/face-server/project-conf/easypack_init.sh
(4)修改连接数据库的IP地址
数据库IP地址所在的文件
vim /home/baidu/work/face-server/project-conf/sconf/service.conf
修改数据库IP地址
(4)重新生成容器
cd /home/baidu/work/face-server/project-conf/
bash multi_docker_start.sh
监控特征抽取服务QPS
该监控项用于统计特征抽取服务的并发量和qps等信息。
查询方式
1、通过命令行查询qps
# 进入人脸应用容器
docker exec -it ${人脸容器名} bash
# 调用接口
curl 0.0.0.0:8815/status
返回如下:
[root@ad013d40bff0 testtool]# curl 0.0.0.0:8815/status
non_service_error: 0
connection_count: 5
max_concurrency: 15
[baidu.face.GeneralClassifyService]
process (FeatureRequest) returns (FeatureResponse)
count: 23
error: 0
latency: 1186817
latency_50: 1186817
latency_90: 1186817
latency_99: 1186817
latency_999: 1186817
latency_9999: 1186817
max_latency: 1186817
qps: 0
processing: 1
2、通过浏览器可视化监控QPS变化趋势 1)将容器内feature-servide 服务端口号8815在宿主机做映射:
# 停用当前face-service 人脸容器
docker stop ${人脸容器名}
docker rm ${人脸容器名}
# 更新容器启动脚本
cd /home/baidu/work/face-server/project-conf/
# 需注意下行命令中/附近的空格,避免漏掉
sed -i 's/8300/& -p 8815:8815 /g' docker_init.sh
# 启动容器
bash multi_docker_start.sh
- 查看人脸容器运行情况
[root@ad013d40bff0 testtool]# bash-4.2$ docker ps -a|grep face
0895e9270bc4 300478125c1e "/home/idl-face/targ…" 46 seconds ago Up 43 seconds
0.0.0.0:8815->8815/tcp, 0.0.0.0:8300->8300/tcp,
face-service-0-0
- 通过浏览器访问
${服务器IP地址}:8815/status
参数说明
- non_service_error: "non"修饰的是“service_error",后者即是分列在各个服务下的error,此外的error都计入non_service_error。服务处理 过程中client断开连接导致无法成功写回response就算non_service_error。而服务内部对后端的连接断开属于服务内部逻辑,只要最终服务成功 地返回了response,即使错误也是计入该服务的error,而不是non_service_error。
- connection_count: 向该server发起请求的连接个数,不包含对外连接的个数。
- max_concurrency: 最大并发数
- count: 成功处理的请求总个数。
- error: 失败的请求总个数。
- latency: 在web界面下从右到左分别是过去60秒,60分钟,24小时,30天的平均延时。在文本界面下是10秒内(-bvar_dump_interval控制) 的平均延时。
- latency_percentiles: 是延时的50%, 90%, 99%, 99.9%分位值,统计窗口默认10秒(-bvar_dump_interval控制),web界面下有曲线。
- latency_cdf: 是分位值的另一种展现形式,类似histogram,只能在web界面下查看。
- max_latency:在web界面下从右到左分别是过去60秒,60分钟,24小时,30天的最大延时。在文本界面下是10秒内(-bvar_dump_interval控 制)的最大延时。
- qps:在web界面下从右到左分别是过去60秒,60分钟,24小时,30天的平均qps。在文本界面下是10秒内(-bvar_dump_interval控制)的平均 qps。
- processing: 正在处理的请求个数。如果持续不为0(特别是在压力归0后),应考虑程序是否有bug。
License更新步骤
EasyPack一键部署工具支持对私有化部署包的License证书进行一键更新,一键更新时不需要执行download.sh 或 download.bat,并且不需要安装任何模块,在新申请的部署包中执行更新操作即可。具体请参考以下流程进行License证书更新。 1、获取到包含License的部署包后,解压缩,进入以下文件路径.
cd original/package/Install
2、执行以下命令完成License更新。
python install.py lu
3、操作成功后如下图所示,提示License update successfully即更新完成。
物理机-将机器指纹方式鉴权更换为加密狗硬件鉴权
以下步骤仅适用于物理机部署场景。 加密狗硬件鉴权包获取请您线下联系商务经理。
如何区分离线鉴权服务不同版本?
cd original/package/Install/
python install.py search
# 或 python install.py se
如果c-offline-security-server 版本号 返回 with-dog
表示 加密狗硬件鉴权
模块名: c-offline-security-server, 版本号:with-dog, 内置版本 xxx , 依赖模块 []
如果c-offline-security-server 版本号 no-dog
表示 x86-机器指纹方式鉴权
模块名: c-offline-security-server, 版本号:no-dog, 内置版本 x, 依赖模块 []
替换步骤
1、将部署包解压后进入original目录执行 bash download.sh
命令获取全部安装文件
cd original && bash download.sh
2、将旧的机器指纹方式鉴权服务卸载
# 进入新的部署包 (加密狗硬件鉴权部署包)
cd package/Install
python install.py remove c-offline-security-server
# 或 python install.py rm c-offline-security-server
# 检查/home/baidu/work/c-offline-security-server 是否存在,如存在将其删除
rm -rf /home/baidu/work/c-offline-security-server
3、安装加密狗硬件离线鉴权服务
python install.py install c-offline-security-server
# 或 python install.py in c-offline-security-server
4、耐心等待几分钟后,执行私有化应用健康检查(或故障排查)脚本:trouble_shooting.tar 来验证 c-offline-sercurity-server 服务
# 解压
tar vxf trouble_shooting.tar
# 执行
bash trouble_shooting.sh
检查加密狗驱动是否运行,正常情况下返回 CodeMeter Server is running.
service codemeter status
检查加密狗硬件是否被机器识别
cmu -x
识别成功的结果如下
cmu - CodeMeter Universal Support Tool.
Version 6.70 of 2018-Jul-19 (Build 3152) for Linux
Copyright (C) 2007-2018 by WIBU-SYSTEMS AG. All rights reserved.
List all locally connected CmContainers:
- CmContainer with Serial Number 3-4512221 and version 4.10
...
Result: 1 CmContainer(s) listed.
识别失败的结果如下:
cmu - CodeMeter Universal Support Tool.Version 6.70 of 2018-Jul-19 (Build 3152) for LinuxCopyright (C) 2007-2018 by WIBU-SYSTEMS AG. All rights reserved.List all locally connected CmContainers:Result: 0 CmContainer(s) listed.
人脸识别私有化部署模型更新/回滚操作步骤
更新模型操作
以人脸模型从V1升级至V2 举例说明:
1、终止databus数据库相关进程
首先通过如下命令查询databus相关进程信息
ps j -A |grep databus5535|grep -v "grep"
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
1 21518 21513 21513 ? -1 S 1008 0:00 /bin/sh /home/idl-face/databus5535/bin/mysqld_safe --defaults-file=/home/idl-face/databus5535/etc/my.cnf
21518 23095 21513 21513 ? -1 Sl 1008 0:00 /home/idl-face/databus5535/libexec/mysqld --defaults-file=/home/idl-face/databus5535/etc/my.cnf --basedir=/home/idl-face/databus5535 --datadir=/home/idl-face/databus5535/var --plugin-dir=/home/idl-face/databus5535/lib/plugin --log-error=/home/idl-face/databus5535/log/mysql.err --pid-file=/home/idl-face/databus5535/var/mysql.pid --socket=/home/idl-face/databus5535/tmp/mysql.sock --port=5535
除了使用 PPID 和 PID 表示的父子进程关系外,进程间还有其他两种关系:
- 用 PGID 表示的进程组
- 用 SID 表示的会话
进程组(PGID)是一个或多个进程(通常与一个作业关联)的集合,我们可以使用该 PGID,通过 kill 命令向整个进程组发送信号:
# 如上面命令返回PGID=21513 ,此处使用负数 -21513 表示PGID(进程组)
kill -SIGTERM -- -21513
我们用一个负数 -21513
向进程组发送信号。如果我们传递的是一个正数,这个数将被视为进程 ID 用于终止进程。如果我们传递的是一个负数,它被视为 PGID,用于终止整个进程组。
2、删除idl-face用户及其家目录,用于清理mysql底层数据(该操作会删除数据库内已注册的人脸数据,如库内无重要数据可忽略提示。)
userdel -r idl-face
3、进入新的部署包(V2)内,重新部署数据库
cd original/package/Applications/face-server/
输入解压命令 tar -xf project-conf.tar
进入original/package/Applications/face-server/project-conf/
bash mysql_start.sh
4、进入新的部署包(V2)内,更新人脸模型
cd original/package/Install
python2 install.py remove face-server
python2 install.py install face-server
5、进入新的部署包(V2)内,更新授权(可选)
cd original/package/Install
python2 install.py lu
回退模型操作
以人脸模型从V2回退至V1 举例说明:
1、终止databus数据库相关进程
首先通过如下命令查询databus相关进程信息
ps j -A |grep databus5535|grep -v "grep"
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
1 21518 21513 21513 ? -1 S 1008 0:00 /bin/sh /home/idl-face/databus5535/bin/mysqld_safe --defaults-file=/home/idl-face/databus5535/etc/my.cnf
21518 23095 21513 21513 ? -1 Sl 1008 0:00 /home/idl-face/databus5535/libexec/mysqld --defaults-file=/home/idl-face/databus5535/etc/my.cnf --basedir=/home/idl-face/databus5535 --datadir=/home/idl-face/databus5535/var --plugin-dir=/home/idl-face/databus5535/lib/plugin --log-error=/home/idl-face/databus5535/log/mysql.err --pid-file=/home/idl-face/databus5535/var/mysql.pid --socket=/home/idl-face/databus5535/tmp/mysql.sock --port=5535
除了使用 PPID 和 PID 表示的父子进程关系外,进程间还有其他两种关系:
- 用 PGID 表示的进程组
- 用 SID 表示的会话
进程组(PGID)是一个或多个进程(通常与一个作业关联)的集合,我们可以使用该 PGID,通过 kill 命令向整个进程组发送信号:
# 如上面命令返回PGID=21513 ,此处使用负数 -21513 表示PGID(进程组)
kill -SIGTERM -- -21513
我们用一个负数 -21513
向进程组发送信号。如果我们传递的是一个正数,这个数将被视为进程 ID 用于终止进程。如果我们传递的是一个负数,它被视为 PGID,用于终止整个进程组。
2、删除idl-face用户及其家目录,用于清理mysql底层数据(该操作会删除数据库内已注册的人脸数据,如库内无重要数据可忽略提示。)
userdel -r idl-face
3、进入新的部署包(V1)内,重新部署数据库
cd original/package/Applications/face-server/
输入解压命令 tar -xf project-conf.tar
进入original/package/Applications/face-server/project-conf/
bash mysql_start.sh
4、进入新的部署包(V1)内,更新人脸模型
cd original/package/Install
python2 install.py remove face-server
python2 install.py install face-server
5、进入新的部署包(V1)内,更新授权(可选)
cd original/package/Install
python2 install.py lu
若您仍然有部署及调用问题,请提交工单联系百度的工作人员