运维问题排查
1、MQTT 无法启动
监控中心或在任务管理器中,服务没有启动,可以分以下几个步骤:
1、在监控中心网站上,先尝试重启MQTT。若不行再排查问题
2、排查端口30001,20071是否被占用,命令窗口输入 netstat -aon|findstr "20071"有对应的20071,即被占用。
3、排查MQTT是否被杀毒软件给拦截了。比如360软件
4、重建MQTT。
清空目录D:\acrel-iot\data\mqtt下的内容
运行以下命令
cd D:\acrel-iot\software\rabbitmq_server-3.11.2\sbin rabbitmq-plugins.bat enable rabbitmq_management rabbitmq-plugins.bat enable rabbitmq_mqtt`
启动MQTT
2、 内存占满
远程登录服务器,在任务管理器中,查看内存占用情况。找出占用内存超过30%的程序。一般都是MongoDB内存占用过多。则需要给MongoDB做内存限制。
打开 D:\acrel-iot\conf\mongo\mongod.cfg。 将cacheSizeGB对应的值改为2或3
3、CPU占满
远程登录服务器,在任务管理器中,查看CPU占用情况。找出占用CPU超过50%的程序。一般都是MongoDB或Mysql占用过多。若是MongoDB占用过多,则可能是数据库没有索引。可以在数据库中,运行以下的命令:
db.HistoryData.ensureIndex({"meterNo":1})
db.HistoryData.ensureIndex({"createTime":1})
db.HistoryData.ensureIndex({"createTime":1,"meterNo":1})
db.Prepaid_HistoryData.ensureIndex({"meterNo":1})
db.Prepaid_HistoryData.ensureIndex({"createTime":1})
db.Prepaid_HistoryData.ensureIndex({"createTime":1,"meterNo":1})
db.energyCostResult.ensureIndex({"createTime":-1,"meterNo":1})
db.energyCostResult.ensureIndex({"createTime":-1})
db.energyCostResult.ensureIndex({"meterNo":1})
db.energyDayResult.ensureIndex({"createTime":-1,"meterNo":1,"code":1})
db.energyDayResult.ensureIndex({"createTime":-1,"meterNo":1})
db.energyHourResult.ensureIndex({"createTime":-1,"meterNo":1,"code":1})
db.energyHourResult.ensureIndex({"createTime":-1})
db.energyHourResult.ensureIndex({"meterNo":1})
db.extremumDayResult.ensureIndex({"createTime":-1,"meterNo":1})
db.projectEnergyHourResult.ensureIndex({"projectId":1,"createTime":-1})
db.eventRecord.ensureIndex({"projectId":1,"createTime":-1})
4、配置第三方转发到SqlServer 2012/2016数据库
客户要配置第三方转发到SqlServer 2012/2016数据库,则需要修改jre配置,使其允许使用旧版加密算法,否则会报错:驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。Java版本大于等于1.8.0_171时,会出现此问题。
进入目录:
JAVA_HOME/jre/lib/security
查看JAVA_HOME路径Windows:
echo %java_home%
Linux:
echo $JAVA_HOME
编辑
java.security
搜索
jdk.tls.disabledAlgorithms
配置项,并在其中删除TLSv1、TLSv1.1、3DES_EDE_CBC
,然后保存;(如果没有这几个项目,则不需要删除)重启中台
5、MongoDB 备份 HistoryData
首先下载MongoDB工具 : https://www.mongodb.com/try/download/database-tools
解压之后,在bin目录下运行以下命令:
备份:mongodump --host=localhost --port 27020 -d local -c HistoryData -o D:\acrel-iot\backup
恢复:mongorestore --host localhost --port 27020 -d local --collection Prepaid_HistoryData D:\acrel-iot\backup\local\HistoryData.bson
6、Windows 配置文件外部配置
老的部署平台,配置文件没有放在外部,可能会到导致修改配置文件困难。可以按照以下步骤调整:
停止并删除后台服务
net stop IOT_ExchangeService
net stop IOT_Eiot
sc delete IOT_ExchangeService
sc delete IOT_Eiot
在 D:\acrel-iot\server 目录下,创建 eiot 和 exchange 文件夹,分别在其中创建config文件夹,并将 exchange.bat , service-exchange-1.0.jar 放到 exchange 文件夹中,将 eiot.bat , service-eiot-web-1.0.jar 放到eiot文件夹中。如截图所示:
修改eiot.bat 文件
java -jar -Dfile.encoding=UTF-8 D:\acrel-iot\server\eiot\service-eiot-web-1.0.jar --spring.config.location=classpath:/bootstrap.yml,./config/ --spring.profiles.active=prod-win
修改exchange.bat文件
java -jar -Dfile.encoding=UTF-8 D:\acrel-iot\server\exchange\service-exchange-1.0.jar --spring.config.location=classpath:/application.yml,./config/ --spring.profiles.active=prod-win
创建eiot服务
运行命令 D:\acrel-iot\software\nssm-2.24\win64\nssm.exe install IOT_EIOT
弹出了NSSM程序框后,path中选择eiot.bat,最后选择 Install service
创建exchange服务
运行命令 D:\acrel-iot\software\nssm-2.24\win64\nssm.exe install IOT_Exchange
弹出了NSSM程序框后,path中选择exchange.bat,最后选择 Install service
移动配置文件
将 service-eiot-web-1.0.jar 中的 application-prod-win.yml , application-ems-win.yml 放到 D:\acrel-iot\server\eiot\config 文件夹中
将service-exchange-1.0.jar中的 application-prod-win.yml , application-ems-win.yml 放到 D:\acrel-iot\server\exchange\config 文件夹中
启动服务
7、后台 exchange , eiot 升级
此步骤适合版本升级,而非同一版本更新。例如 1.7 升级到 1.8。
windows 部署升级
1、停止exchange 和 eiot 服务
2、备份config文件夹里的配置文件,并把更新的jar包中的 application-prod-win.yml, application-ems-win.yml 放到 config 文件夹中
3、确认部署方式,若是单机的默认部署方式,则直接替换jar包就可以
4、若是分开部署的方式, 则需要根据步骤2备份的配置文件,更新config 文件里的配置文件。需要修改 application-prod-win.yml 里服务的IP 和 端口。
主要分为4块 mysql , mongo , redis ,mqtt
mysql:
url: jdbc:mysql://localhost:13306/basic?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
username: root
password: 123456
mongo:
data:
mongodb:
uri: mongodb://localhost:27020/local
redis :
redis:
database: 0
timeout: 3000
password: 123456
# 单机模式
host: 127.0.0.1
port: 16379
mqtt 有多处:
url: tcp://localhost:30001
ws: localhost:20072
username: guest
password: guest
#RabbitMQ服务器,host和mqtt的IP一致
rabbitmq:
host: localhost
#默认端口5672
port: 5672
#默认guest,可不写
password: guest
#默认guest用户,可不写
username: guest
linux 部署升级:
判断部署方式: 单机部署--容器外部署 , 单机部署--容器内部署 , 分开部署
单机部署--容器内部署:
1、用 docker ps 命令可以看到 iot-exchange , iot-eiot 服务, 则认为是 容器内部署
2、停止服务 docker stop iot-exchange , docker stop iot-eiot
3、备份/home/acrel-iot-linux/server/../config文件夹里的配置文件,并把更新的jar包中的 application-prod-linux.yml放到 config 文件夹中
4、根据步骤3备份的配置文件,更新config 文件里的配置文件, 和windows 步骤4的方式一致
5、eiot 配置文件url额外修改:
acrel:
iot:
url: http://172.16.1.8:20001
secretApp: NjM1MjU5NTM1MzE4MzgwNTQ1
secretKey: OUdsZVBwSTQ4ZjYzNTI1OTUzNTMxODM4MDU0Ng
contextPath:
6、替换 home/acrel-iot-linux/server/.. 目录下的jar 包
7、启动服务 docker start iot-exchange , docker start iot-eiot
单机部署--容器外部署:
1、用 docker ps 命令不能看到 iot-exchange , iot-eiot 服务, 则认为是容器外部署
2、停止服务 systemctl stop acrel_eiot.service
3、替换 home/acrel-iot-linux/server/.. 目录下的jar 包
4、启动服务 systemctl start acrel_eiot.service
分开部署--容器内部署:
1、用 docker ps 命令可以看到 iot-exchange , iot-eiot 服务, 则认为是 容器内部署
2、参考Linux 单机部署--容器内部署
分开部署--容器外部署:
1、用 docker ps 命令不能看到 iot-exchange , iot-eiot 服务, 则认为是容器外部署
2、停止服务 systemctl stop acrel_eiot.service
3、根据以前的配置文件,修改jar包中的配置文件,和windows 步骤4的方式一致
4、替换 home/acrel-iot-linux/server/.. 目录下的jar 包
5、启动服务 systemctl start acrel_eiot.service