ThingsKit服务器配置和系统要求?
❓ ThingsKit物联网平台的最低服务器配置和系统要求是多少?
答案
以下是ThingsKit物联网平台部署的最低服务器配置要求,如果是生产环境部署,建议联系客服为您评估服务器配置是否合理。
序号 | 配置项 | 参数 |
1 | CPU | 4核 |
2 | 内存 | 8G |
3 | 带宽 | 5M |
4 | 磁盘 | 200GB |
5 | 操作系统 | 🥇Ubuntu20.04及以上 (推荐) 🥈CentOS7.9及以上 |
场景举例一:5万台设备,大部分是烟感,有一些闸机和一些工业网关,全部走MQTT协议,要求:2000tps,假如平均每条消息包含3个数据点,需要的服务器资源如下:
序号 | 配置项 | 参数 |
1 | CPU | 16核 |
2 | 内存 | 32GB |
以上配置需要5台,做高可用集群 | ||
3 | 带宽 | 建议不低于20M |
4 | 磁盘 |
请根据实际存储时长情况换算 |
5 | 操作系统 | 🥇Ubuntu20.04及以上 (推荐) 🥈CentOS7.9及以上 |
场景举例二:1万台在线设备,支持10万台设备注册,全部走MQTT协议,要求:1000tps,假如平均每条消息包含3个数据点,需要的服务器资源如下:
序号 | 配置项 | 参数 |
1 | CPU | 16核 |
2 | 内存 | 32GB |
以上配置需要5台,做高可用集群 | ||
4 | 带宽 | 建议不低于20M |
5 | 磁盘 |
请根据实际情况换算 |
6 | 操作系统 | 🥇Ubuntu20.04及以上 (推荐) 🥈CentOS7.9及以上 |
ThingsKit高可用部署会做哪些工作?
❓ ThingsKit高可用部署会做哪些工作?为什么会单独收费?
答案
如果由我司技术团队,协助贵公司做高可用部署,大概会产生30~60天的调优工作量,所以需要额外收费,具体部署工作如下:
1、高可用环境部署(5台服务器节点部署);
2、每天观察服务器运行情况,做平台性能优化(包含并发量参数调整、数据时效性优化)、数据库优化(IO性能优化、并发量参数调整)、服务器性能优化(CPU优化、内存优化、磁盘IO优化、网络优化);
3、输出性能测试报告、输出高可用报告。
ThingsKit默认端口?
❓ ThingsKit物联网平台的默认端口号是多少?
答案
JDK版本?
❓ ThingsKit物联网平台支持的JDK版本是多少?
答案
JDK 11.0.12
如何查看部署平台的版本号?
❓ 如何查看已经部署的ThingsKit物联网平台的当前版本号?
答案
方案1:使用压缩工具打开部署包,查看配置文件中的版本号。
在配置文件中搜索关键字SWAGGER_VERSION查看版本。
方案2:使用接口文档地址查看版本号。
http://部署ThingsKit物联网平台的IP:访问端口/swagger-ui.html
程序包org.thingsboard.server.common.msg.gen不存在
❓ 所有插件安装完成后,运行ThingsboardInstallApplication提示gen不存在
答案
安装完插件包后,需要install一下
创建租户失败
❓ 创建租户时,提示“服务器错误,请联系管理员!”
使用浏览器控制台查看API接口返回内容如下:
答案
为租户创建默认规则链的文件不存在。有2种解决方案。
方案1:将data(文件夹)放到服务器的目录/application/src/main下。
方案2:在java命令中增加参数-Dinstall.data_dir=data(文件夹)的路径。
data目录结构
图片上传失败,存储桶不符合命名规范?
❓ ThingsKit物联网平台上传头像、产品等图片失败是怎么回事?
答案
检查 minioName 和 minioPass 是否正确,如果正确再检查 bucketName 的命名是否满足以下规范:
- 存储桶名称的长度必须介于 3(最小)到 63(最大)个字符之间。
- 桶名称只能由小写字母、数字、点(.)和连字符(-)组成。
- 存储桶名称必须以字母或数字开头和结尾。
- 存储桶名称不得包含两个相邻的句点。
- 存储桶名称不得采用 IP 地址格式(例如 192.168.5.4)。
- 存储桶名称不得以前缀 开头xn--。
更详细命名规则请参考
函数 time_bucket(bigint,bigint,bigint)不存在?
答案
请检查thingsboard.yml里面的环境变量 DATABASE_TS_TYPE 和 DATABASE_TS_LATEST_TYPE 在初始化数据库时,是否和运行时的配置一致。
select * from pg_extension where extname = 'timescaledb';
查询结果
ThingKit是否支持割接升级?
答案
集群模式下支持割接升级,升级的微服务组件的节点不能少于2个。在升级过程中只要保证整个业务的微服务组件完整就不会影响正常业务。
停服割接
是指在割接过程中,所属的业务服务需要停止对外服务,所以会影响业务或客户端的正常访问。
不停服切割
是指在切割过程中,所属的业务服务需要几乎完全正常对外服务,很难对客户的访问和数据产生影响,但不是完全不会有影响。
集群模式下 是怎么维持设备链接的?
答案
集群模式下,设备直接与负载均衡软件连接,再由负载均衡软件根据算法分配一个有效的设备接入服务的节点给设备。
如果设备连接的设备接入服务的节点离线,设备会重新连接和鉴权。
怎么保证多服务器的链接平衡?
答案
设备接入服务和核心服务的API根据负载均衡软件中配置的负载均衡算法确定。
ThingsKit物联网平台如何配置开机自启?
答案
如果是部署在linux系统下,平台会随着服务器自动启动。如果是部署在window系统下,需将window.bat脚本文件添加至开机自启动内即可。
前端的默认图片如何修改?
答案
进入前端部署解压后的目录(thingskit/_image/web_ui)。用自己的图片替换掉对应目录下的图片即可。
图片文件和目录清单如下:
- resource/img/logo.png
- assets/logo.2813b619.png
- favicon.ico
Kafka异常提示:org.apache.kafka.common.network.InvalidReceiveException: Invalid receive (size = 1195725856 larger than 104857600)
kafka节点为了防止内存溢出,将参数socket.request.max.bytes的默认值设置为104857600(100M)。
答案
在kafka的配置文件(server.properties)中对参数socket.request.max.bytes进行调整。
消息中间件异常(Kafka): Allocating buffer of size 57672199 for source 1
o.a.kafka.common.network.NetworkReceive : Allocating buffer of size 57672199 for source 1
答案
这个异常信息来自重写的Kafka实现类NetworkReceive中。当Kafka的消费者poll的数据大于10M就会弹出这个问题。
消息中间件(Kafka): Error sending fetch request (sessionId=INVALID, epoch=INITIAL)
o.a.kafka.clients.FetchSessionHandler : [Consumer clientId=tb-core-consumer-64424a4d0c7c, groupId=tb-core-node] Error sending fetch request (sessionId=INVALID, epoch=INITIAL) to node 1
答案
调整下面两个环境变量的值。延长kafka客户端和kafka服务端之间通信的有效时间。
TB_QUEUE_KAFKA_REQUEST_TIMEOUT_MS=30000 #client在配置时间内为收到broker响应,判定请求超时。
TB_QUEUE_KAFKA_SESSION_TIMEOUT_MS=10000 #broker在配置时间内为收到client心跳包,判定client无效
数据库(Cassandra): Unexpected error while creating connection. Since you provided explicit contact points. Current contact points are: Node(endPoint=123.60.37.18/<unresolved>:9042
Unexpected error while creating connection. Since you provided explicit contact points, the local DC must be explicitly set (see basic.load-balancing-policy.local-datacenter in the config, or set it programmatically with SessionBuilder.withLocalDatacenter). Current contact points are: Node(endPoint=123.60.37.18/<unresolved>:9042, hostId=207e64ee-7837-4696-918f-8ef6d45f5e8a, hashCode=7c11d1b8)=thingskit. Current DCs in this cluster are: thingskit.
org.apache.cassandra.transport.ProtocolException: Invalid or unsupported protocol version (22); supported versions are (3/v3, 4/v4, 5/v5, 6/v6-beta)
答案
客服端使用的驱动版本,不在服务端支持的版本清单内。需要降低或提高客户端使用的驱动版本号。
使用yum命令安装软件时,提示dnf config-manager
在软件库文件目录【/etc/yum.repos.d】中的repo文件配置异常时才会出现该异常。
答案
将异常信息中的repo文件删除或改下文件后缀。
用nginx部署的管理业务访问时,返回403(无访问权限)?
取现这种现象是因为启动nginx服务的用户和部署包文件的所有者不一致,没问访问权限。需要修改nginx的配置文件nginx.conf。
答案
在nginx的配置文件nginx.conf中,指定启动nginx的用户名。
#user nobody; #取消注释,将nobody改为部署包所有者的名字,例如:root
worker_processes 1;
#error_log logs/error.log;
#user nobody; #取消注释,将nobody改为部署包所有者的名字,例如:root
worker_processes 1;
#error_log logs/error.log;
部署过程中查看日志报错找不到服务ID,应该如何解决?
答案
服务器当前没有主机名,添加主机名即可。
hostname //输出当前主机名
vi /_makeFile/thingskit/docker-compose.yml //修改容器服务器名称为当前主机名
部署环境后无法使用图片上传功能
答案
部署后无法上传图片为minio服务出现问题,一般遇到这种情况是因为minio默认端口被占用,需要更换其他监听端口。
💡 提示
minio服务的默认端口为9000和9001。
cd /_makeFile/thingskit/_image/
//第一个调整的端口号为minio服务登录端口默认9001,第二个调整的端口号为minio服务监听端口默认9000
vi java-start.sh
💡 提示
将java-start.sh中第66行内容改为需要调整的端口
nohup /opt/minio/minio server –console-address ‘:minio服务登录端口’ –address ‘:minio服务监听端口’ /opt/minio/datas >/opt/minio/minio.log 2>&1 &
💡 注意
修改了minio服务监听端口后需要将修改monolith.env内minio相关配置。
最后需要重构容器:
cd /_makeFile/thingskit/
docker-compose up -d
nginx异常提示:nginx: [emerg] the shared memory zone "thingskit" is already declared for a different use in/etc/nginx/nginx.conf:61
答案
导致这个问题出现是因为nginx的缓存中域的名称重复,修改nginx.conf即可。
💡 提示
修改后需要重启容器,nginx.conf路径为/_makeFile/thingskit/_image。
docker restart monolith
启用zlm服务内存占用过大,怎么调整?
答案
导致这个问题的原因是启动的监听端口过多而导致的(默认500个),减少监听端口可降低zlm服务内存占用:
💡 提示
需要修改的配置文件为/_makeFile/media/docker-compose.yml以及环境配置文件miscroservice.env。
启动平台服务时显示编码错误怎么办?
答案
在平台服务的docker-compose.yml内添加环境变量:
environment:
LANG: C.UTF-8
LC_ALL: C.UTF-8
启动平台后访问不了组态怎么办?
访问组态时出现一个或多个文件报错403
答案
需要将服务器对应路径下文件添加权限
cd /_makeFile/thingskit/_image/scada/webapp/js/ #用图中文件示例
chmod 755 app.min.js
权限增加后重新加载即可
设备详情中,物模型页面的数据无法展示?
❓ 这是由于表关联查询造成数据库表ts_kv_dictionary锁表,从而出现字段key的值重复。
答案
清空ts_kv_dictionary表的数据。
设备数据无法接入平台问题定位?
❓ 平台正常部署后,设备无法接入。
答案
首次部署后发现数据库没有正常初始化怎么办?
答案
按照以下步骤执行即可初始化数据库:(单机部署且没有更改默认路径配置)
rm /_makeFile/thingskit/_image/web_server/.firstlaunch #1.4.2以及之前版本
rm /_makeFile/thingskit/_workspace/web_server/.firstlaunch #1.4.3以及之后版本
rm -rf /var/_datas/pgsql
cd /_makeFile/thingskit/
docker-compose restart
docker-compose logs -f #服务启动日志
修改邮箱后缀需要注意些什么?
邮箱后缀默认为thingskit.com
,可以通过环境变量ACCOUNT_EMAIL_SUFFIX
配置。
答案
第1/3步:修改环境变量。
💡 提示
命令中的关键字邮箱后缀
,需要替换为真实的邮箱后缀,例如:thingskit.com
sed -i "/ACCOUNT_EMAIL_SUFFIX/cACCOUNT_EMAIL_SUFFIX=邮箱后缀" monolith.env
sed -i "/ACCOUNT_EMAIL_SUFFIX/cACCOUNT_EMAIL_SUFFIX=邮箱后缀" miscroservice_app_application.env
第2/3步:刷新环境变量到容器
docker-compose up -d
第3/3步:刷新数据库用户表数据
UPDATE tb_user SET REPLACE(email, 'thingskit.com', '邮箱后缀');
postgresql异常:could not resize shared memory segment
数据库异常,提示共享内存不足。
could not open shared memory segment "/PostgreSQL.7038700": No such file or directory
查看数据库配置
💡 提示
进入postgresql的数据目录,执行命令。例如:/app/postgresql-15.2/data
cat postgresql.conf | grep shared_buffers
答案
第1/3步:检查系统共享内存
ipcs -lm
第2/3步:修改数据库配置文件
💡 提示
进入postgresql的数据目录,执行命令。例如:/app/postgresql-15.2/data
⚠️ 警告
effective_cache_size和shared_buffers配置保持一致。结合具体情况调整。
推荐值:物理内存的25%~40%。
tee -a postgresql.conf <<-'EOF'
effective_cache_size = 4GB
shared_buffers = 4GB
EOF
第3/3步:重启数据库