运维问题排查

1、MQTT 无法启动

监控中心或在任务管理器中,服务没有启动,可以分以下几个步骤:

1、在监控中心网站上,先尝试重启MQTT。若不行再排查问题

2、排查端口30001,20071是否被占用,命令窗口输入 netstat -aon|findstr "20071"有对应的20071,即被占用。

3、排查MQTT是否被杀毒软件给拦截了。比如360软件

4、重建MQTT。

  1. 清空目录D:\acrel-iot\data\mqtt下的内容

  2. 运行以下命令

    cd D:\acrel-iot\software\rabbitmq_server-3.11.2\sbin rabbitmq-plugins.bat enable rabbitmq_management rabbitmq-plugins.bat enable rabbitmq_mqtt`

  3. 启动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时,会出现此问题。

  1. 进入目录:JAVA_HOME/jre/lib/security 查看JAVA_HOME路径

    Windows:echo %java_home%

    Linux:echo $JAVA_HOME

  2. 编辑java.security

  3. 搜索jdk.tls.disabledAlgorithms配置项,并在其中删除TLSv1、TLSv1.1、3DES_EDE_CBC,然后保存;(如果没有这几个项目,则不需要删除)

  4. 重启中台

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 配置文件外部配置

老的部署平台,配置文件没有放在外部,可能会到导致修改配置文件困难。可以按照以下步骤调整:

  1. 停止并删除后台服务

    net stop IOT_ExchangeService net stop IOT_Eiot sc delete IOT_ExchangeService sc delete IOT_Eiot

  2. 在 D:\acrel-iot\server 目录下,创建 eiot 和 exchange 文件夹,分别在其中创建config文件夹,并将 exchange.bat , service-exchange-1.0.jar 放到 exchange 文件夹中,将 eiot.bat , service-eiot-web-1.0.jar 放到eiot文件夹中。如截图所示:

  3. 修改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

  4. 修改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

  5. 创建eiot服务

    运行命令 D:\acrel-iot\software\nssm-2.24\win64\nssm.exe install IOT_EIOT

    弹出了NSSM程序框后,path中选择eiot.bat,最后选择 Install service

  6. 创建exchange服务

    运行命令 D:\acrel-iot\software\nssm-2.24\win64\nssm.exe install IOT_Exchange

    弹出了NSSM程序框后,path中选择exchange.bat,最后选择 Install service

  7. 移动配置文件

    将 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 文件夹中

  8. 启动服务

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

results matching ""

    No results matching ""