added edqs volumes
This commit is contained in:
parent
21bc216b92
commit
b9674cadd1
@ -151,6 +151,7 @@ function permissionList() {
|
||||
799 799 tb-transports/coap/log
|
||||
799 799 tb-vc-executor/log
|
||||
999 999 tb-node/postgres
|
||||
799 799 edqs/log
|
||||
"
|
||||
|
||||
source .env
|
||||
|
||||
30
docker/docker-compose.edqs.volumes.yml
Normal file
30
docker/docker-compose.edqs.volumes.yml
Normal file
@ -0,0 +1,30 @@
|
||||
#
|
||||
# Copyright © 2016-2025 The Thingsboard Authors
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
version: '3.0'
|
||||
|
||||
services:
|
||||
tb-edqs-1:
|
||||
volumes:
|
||||
- tb-edqs-log-volume:/var/log/edqs
|
||||
tb-edqs-2:
|
||||
volumes:
|
||||
- tb-edqs-log-volume:/var/log/edqs
|
||||
|
||||
volumes:
|
||||
tb-edqs-log-volume:
|
||||
external:
|
||||
name: ${TB_EDQS_LOG_VOLUME}
|
||||
@ -17,17 +17,35 @@
|
||||
version: '3.0'
|
||||
|
||||
services:
|
||||
tb-core1:
|
||||
env_file:
|
||||
- tb-node-edqs.env
|
||||
tb-core2:
|
||||
env_file:
|
||||
- tb-node-edqs.env
|
||||
tb-edqs-1:
|
||||
restart: always
|
||||
image: "${DOCKER_REPO}/${EDQS_DOCKER_NAME}:${TB_VERSION}"
|
||||
env_file:
|
||||
- edqs.env
|
||||
volumes:
|
||||
- ./edqs/conf:/usr/share/edqs/conf
|
||||
- ./edqs/log:/var/log/edqs
|
||||
ports:
|
||||
- "8080"
|
||||
depends_on:
|
||||
- zookeeper
|
||||
- kafka
|
||||
tb-edqs-2:
|
||||
restart: always
|
||||
image: "${DOCKER_REPO}/${EDQS_DOCKER_NAME}:${TB_VERSION}"
|
||||
env_file:
|
||||
- edqs.env
|
||||
volumes:
|
||||
- ./edqs/conf:/usr/share/edqs/conf
|
||||
- ./edqs/log:/var/log/edqs
|
||||
ports:
|
||||
- "8080"
|
||||
depends_on:
|
||||
- zookeeper
|
||||
- kafka
|
||||
|
||||
@ -49,6 +49,8 @@ ADDITIONAL_COMPOSE_ARGS=$(additionalComposeArgs) || exit $?
|
||||
|
||||
ADDITIONAL_CACHE_ARGS=$(additionalComposeCacheArgs) || exit $?
|
||||
|
||||
ADDITIONAL_COMPOSE_EDQS_ARGS=$(additionalComposeEdqsArgs) || exit $?
|
||||
|
||||
ADDITIONAL_STARTUP_SERVICES=$(additionalStartupServices) || exit $?
|
||||
|
||||
checkFolders --create || exit $?
|
||||
@ -56,7 +58,8 @@ checkFolders --create || exit $?
|
||||
if [ ! -z "${ADDITIONAL_STARTUP_SERVICES// }" ]; then
|
||||
|
||||
COMPOSE_ARGS="\
|
||||
-f docker-compose.yml ${ADDITIONAL_CACHE_ARGS} ${ADDITIONAL_COMPOSE_ARGS} ${ADDITIONAL_COMPOSE_QUEUE_ARGS} \
|
||||
-f docker-compose.yml ${ADDITIONAL_CACHE_ARGS} ${ADDITIONAL_COMPOSE_ARGS} ${ADDITIONAL_COMPOSE_QUEUE_ARGS}
|
||||
${ADDITIONAL_COMPOSE_EDQS_ARGS} \
|
||||
up -d ${ADDITIONAL_STARTUP_SERVICES}"
|
||||
|
||||
case $COMPOSE_VERSION in
|
||||
@ -73,7 +76,8 @@ if [ ! -z "${ADDITIONAL_STARTUP_SERVICES// }" ]; then
|
||||
fi
|
||||
|
||||
COMPOSE_ARGS="\
|
||||
-f docker-compose.yml ${ADDITIONAL_CACHE_ARGS} ${ADDITIONAL_COMPOSE_ARGS} ${ADDITIONAL_COMPOSE_QUEUE_ARGS} \
|
||||
-f docker-compose.yml ${ADDITIONAL_CACHE_ARGS} ${ADDITIONAL_COMPOSE_ARGS} ${ADDITIONAL_COMPOSE_QUEUE_ARGS}
|
||||
${ADDITIONAL_COMPOSE_EDQS_ARGS} \
|
||||
run --no-deps --rm -e INSTALL_TB=true -e LOAD_DEMO=${loadDemo} \
|
||||
tb-core1"
|
||||
|
||||
|
||||
@ -27,12 +27,16 @@ ADDITIONAL_COMPOSE_ARGS=$(additionalComposeArgs) || exit $?
|
||||
|
||||
ADDITIONAL_CACHE_ARGS=$(additionalComposeCacheArgs) || exit $?
|
||||
|
||||
ADDITIONAL_COMPOSE_EDQS_ARGS=$(additionalComposeEdqsArgs) || exit $?
|
||||
|
||||
COMPOSE_ARGS_PULL="\
|
||||
-f docker-compose.yml ${ADDITIONAL_CACHE_ARGS} ${ADDITIONAL_COMPOSE_ARGS} ${ADDITIONAL_COMPOSE_QUEUE_ARGS} \
|
||||
-f docker-compose.yml ${ADDITIONAL_CACHE_ARGS} ${ADDITIONAL_COMPOSE_ARGS} ${ADDITIONAL_COMPOSE_QUEUE_ARGS}
|
||||
${ADDITIONAL_COMPOSE_EDQS_ARGS} \
|
||||
pull"
|
||||
|
||||
COMPOSE_ARGS_BUILD="\
|
||||
-f docker-compose.yml ${ADDITIONAL_CACHE_ARGS} ${ADDITIONAL_COMPOSE_ARGS} ${ADDITIONAL_COMPOSE_QUEUE_ARGS} \
|
||||
-f docker-compose.yml ${ADDITIONAL_CACHE_ARGS} ${ADDITIONAL_COMPOSE_ARGS} ${ADDITIONAL_COMPOSE_QUEUE_ARGS}
|
||||
${ADDITIONAL_COMPOSE_EDQS_ARGS} \
|
||||
up -d --no-deps --build"
|
||||
|
||||
case $COMPOSE_VERSION in
|
||||
|
||||
@ -42,21 +42,26 @@ ADDITIONAL_COMPOSE_ARGS=$(additionalComposeArgs) || exit $?
|
||||
|
||||
ADDITIONAL_CACHE_ARGS=$(additionalComposeCacheArgs) || exit $?
|
||||
|
||||
ADDITIONAL_COMPOSE_EDQS_ARGS=$(additionalComposeEdqsArgs) || exit $?
|
||||
|
||||
ADDITIONAL_STARTUP_SERVICES=$(additionalStartupServices) || exit $?
|
||||
|
||||
checkFolders --create || exit $?
|
||||
|
||||
COMPOSE_ARGS_PULL="\
|
||||
-f docker-compose.yml ${ADDITIONAL_CACHE_ARGS} ${ADDITIONAL_COMPOSE_ARGS} ${ADDITIONAL_COMPOSE_QUEUE_ARGS} \
|
||||
-f docker-compose.yml ${ADDITIONAL_CACHE_ARGS} ${ADDITIONAL_COMPOSE_ARGS} ${ADDITIONAL_COMPOSE_QUEUE_ARGS}
|
||||
${ADDITIONAL_COMPOSE_EDQS_ARGS} \
|
||||
pull \
|
||||
tb-core1"
|
||||
|
||||
COMPOSE_ARGS_UP="\
|
||||
-f docker-compose.yml ${ADDITIONAL_CACHE_ARGS} ${ADDITIONAL_COMPOSE_ARGS} ${ADDITIONAL_COMPOSE_QUEUE_ARGS} \
|
||||
-f docker-compose.yml ${ADDITIONAL_CACHE_ARGS} ${ADDITIONAL_COMPOSE_ARGS} ${ADDITIONAL_COMPOSE_QUEUE_ARGS}
|
||||
${ADDITIONAL_COMPOSE_EDQS_ARGS} \
|
||||
up -d ${ADDITIONAL_STARTUP_SERVICES}"
|
||||
|
||||
COMPOSE_ARGS_RUN="\
|
||||
-f docker-compose.yml ${ADDITIONAL_CACHE_ARGS} ${ADDITIONAL_COMPOSE_ARGS} ${ADDITIONAL_COMPOSE_QUEUE_ARGS} \
|
||||
-f docker-compose.yml ${ADDITIONAL_CACHE_ARGS} ${ADDITIONAL_COMPOSE_ARGS} ${ADDITIONAL_COMPOSE_QUEUE_ARGS}
|
||||
${ADDITIONAL_COMPOSE_EDQS_ARGS} \
|
||||
run --no-deps --rm -e UPGRADE_TB=true -e FROM_VERSION=${fromVersion} \
|
||||
tb-core1"
|
||||
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
ZOOKEEPER_ENABLED=true
|
||||
ZOOKEEPER_URL=zookeeper:2181
|
||||
TB_KAFKA_SERVERS=kafka:9092
|
||||
HTTP_BIND_PORT=8080
|
||||
|
||||
METRICS_ENABLED=true
|
||||
METRICS_ENDPOINTS_EXPOSE=prometheus
|
||||
|
||||
22
docker/edqs/conf/edqs.conf
Normal file
22
docker/edqs/conf/edqs.conf
Normal file
@ -0,0 +1,22 @@
|
||||
#
|
||||
# Copyright © 2016-2025 The Thingsboard Authors
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
export JAVA_OPTS="$JAVA_OPTS -Xlog:gc*,heap*,age*,safepoint=debug:file=/var/log/edqs/${TB_SERVICE_ID}-gc.log:time,uptime,level,tags:filecount=10,filesize=10M"
|
||||
export JAVA_OPTS="$JAVA_OPTS -XX:+IgnoreUnrecognizedVMOptions -XX:+HeapDumpOnOutOfMemoryError"
|
||||
export JAVA_OPTS="$JAVA_OPTS -XX:-UseBiasedLocking -XX:+UseTLAB -XX:+ResizeTLAB -XX:+PerfDisableSharedMem -XX:+UseCondCardMark"
|
||||
export JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=500 -XX:+UseStringDeduplication -XX:+ParallelRefProcEnabled -XX:MaxTenuringThreshold=10"
|
||||
export LOG_FILENAME=tb-edqs.out
|
||||
export LOADER_PATH=/usr/share/edqs/conf
|
||||
52
docker/edqs/conf/logback.xml
Normal file
52
docker/edqs/conf/logback.xml
Normal file
@ -0,0 +1,52 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!--
|
||||
|
||||
Copyright © 2016-2025 The Thingsboard Authors
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
-->
|
||||
<!DOCTYPE configuration>
|
||||
<configuration scan="true" scanPeriod="10 seconds">
|
||||
|
||||
<appender name="fileLogAppender"
|
||||
class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>/var/log/edqs/${TB_SERVICE_ID}/tb-edqs.log</file>
|
||||
<rollingPolicy
|
||||
class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||
<fileNamePattern>/var/log/edqs/tb-edqs.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
||||
<maxFileSize>100MB</maxFileSize>
|
||||
<maxHistory>30</maxHistory>
|
||||
<totalSizeCap>3GB</totalSizeCap>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>%d{ISO8601} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>%d{ISO8601} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<logger name="org.thingsboard.server" level="INFO" />
|
||||
<logger name="org.thingsboard.server.edqs" level="TRACE" />
|
||||
<logger name="org.apache.kafka.clients" level="WARN"/>
|
||||
|
||||
<root level="INFO">
|
||||
<appender-ref ref="fileLogAppender"/>
|
||||
<appender-ref ref="STDOUT"/>
|
||||
</root>
|
||||
|
||||
</configuration>
|
||||
4
docker/tb-node-edqs.env
Normal file
4
docker/tb-node-edqs.env
Normal file
@ -0,0 +1,4 @@
|
||||
# ThingsBoard server configuration with enabled EDQS synchronization
|
||||
|
||||
TB_EDQS_SYNC_ENABLED=true
|
||||
TB_EDQS_API_ENABLED=true
|
||||
@ -4,10 +4,9 @@ ZOOKEEPER_ENABLED=true
|
||||
ZOOKEEPER_URL=zookeeper:2181
|
||||
JS_EVALUATOR=remote
|
||||
TRANSPORT_TYPE=remote
|
||||
TB_EDQS_MODE=remote
|
||||
|
||||
HTTP_LOG_CONTROLLER_ERROR_STACK_TRACE=false
|
||||
|
||||
METRICS_ENABLED=true
|
||||
METRICS_ENDPOINTS_EXPOSE=prometheus
|
||||
|
||||
TB_EDQS_MODE=remote
|
||||
@ -51,6 +51,7 @@ public class ContainerTestSuite {
|
||||
private static final String TB_CORE_LOG_REGEXP = ".*Starting polling for events.*";
|
||||
private static final String TRANSPORTS_LOG_REGEXP = ".*Going to recalculate partitions.*";
|
||||
private static final String TB_VC_LOG_REGEXP = TRANSPORTS_LOG_REGEXP;
|
||||
private static final String TB_EDQS_LOG_REGEXP = ".*All partitions processed.*";
|
||||
private static final String TB_JS_EXECUTOR_LOG_REGEXP = ".*template started.*";
|
||||
private static final Duration CONTAINER_STARTUP_TIMEOUT = Duration.ofSeconds(400);
|
||||
|
||||
@ -115,6 +116,7 @@ public class ContainerTestSuite {
|
||||
List<File> composeFiles = new ArrayList<>(Arrays.asList(
|
||||
new File(targetDir + "docker-compose.yml"),
|
||||
new File(targetDir + "docker-compose.edqs.yml"),
|
||||
new File(targetDir + "docker-compose.edqs.volumes.yml"),
|
||||
new File(targetDir + "docker-compose.volumes.yml"),
|
||||
new File(targetDir + "docker-compose.mosquitto.yml"),
|
||||
new File(targetDir + (IS_HYBRID_MODE ? "docker-compose.hybrid.yml" : "docker-compose.postgres.yml")),
|
||||
@ -163,11 +165,6 @@ public class ContainerTestSuite {
|
||||
composeFiles.add(new File(targetDir + "docker-compose.cassandra.volumes.yml"));
|
||||
}
|
||||
|
||||
// to trigger edqs synchronization
|
||||
addToFile(targetDir, "tb-node.env",
|
||||
Map.of("TB_EDQS_SYNC_ENABLED", "true",
|
||||
"TB_EDQS_API_ENABLED", "true"));
|
||||
|
||||
testContainer = new DockerComposeContainerImpl<>(composeFiles)
|
||||
.withPull(false)
|
||||
.withLocalCompose(true)
|
||||
@ -189,8 +186,8 @@ public class ContainerTestSuite {
|
||||
.waitingFor("tb-vc-executor1", Wait.forLogMessage(TB_VC_LOG_REGEXP, 1).withStartupTimeout(CONTAINER_STARTUP_TIMEOUT))
|
||||
.waitingFor("tb-vc-executor2", Wait.forLogMessage(TB_VC_LOG_REGEXP, 1).withStartupTimeout(CONTAINER_STARTUP_TIMEOUT))
|
||||
.waitingFor("tb-js-executor", Wait.forLogMessage(TB_JS_EXECUTOR_LOG_REGEXP, 1).withStartupTimeout(CONTAINER_STARTUP_TIMEOUT))
|
||||
.waitingFor("tb-edqs-1", Wait.forHttp("/api/edqs/ready").withStartupTimeout(CONTAINER_STARTUP_TIMEOUT))
|
||||
.waitingFor("tb-edqs-2", Wait.forHttp("/api/edqs/ready").withStartupTimeout(CONTAINER_STARTUP_TIMEOUT));
|
||||
.waitingFor("tb-edqs-1", Wait.forLogMessage(TB_EDQS_LOG_REGEXP, 1).withStartupTimeout(CONTAINER_STARTUP_TIMEOUT))
|
||||
.waitingFor("tb-edqs-2", Wait.forLogMessage(TB_EDQS_LOG_REGEXP, 1).withStartupTimeout(CONTAINER_STARTUP_TIMEOUT));
|
||||
testContainer.start();
|
||||
setActive(true);
|
||||
} catch (Exception e) {
|
||||
|
||||
@ -48,6 +48,7 @@ public class ThingsBoardDbInstaller {
|
||||
private final static String TB_MQTT_TRANSPORT_LOG_VOLUME = "tb-mqtt-transport-log-test-volume";
|
||||
private final static String TB_SNMP_TRANSPORT_LOG_VOLUME = "tb-snmp-transport-log-test-volume";
|
||||
private final static String TB_VC_EXECUTOR_LOG_VOLUME = "tb-vc-executor-log-test-volume";
|
||||
private final static String TB_EDQS_LOG_VOLUME = "tb-edqs-log-test-volume";
|
||||
private final static String JAVA_OPTS = "-Xmx512m";
|
||||
|
||||
private final DockerComposeExecutor dockerCompose;
|
||||
@ -65,6 +66,7 @@ public class ThingsBoardDbInstaller {
|
||||
private final String tbMqttTransportLogVolume;
|
||||
private final String tbSnmpTransportLogVolume;
|
||||
private final String tbVcExecutorLogVolume;
|
||||
private final String tbEdqsLogVolume;
|
||||
private final Map<String, String> env;
|
||||
|
||||
public ThingsBoardDbInstaller() {
|
||||
@ -103,6 +105,7 @@ public class ThingsBoardDbInstaller {
|
||||
tbMqttTransportLogVolume = project + "_" + TB_MQTT_TRANSPORT_LOG_VOLUME;
|
||||
tbSnmpTransportLogVolume = project + "_" + TB_SNMP_TRANSPORT_LOG_VOLUME;
|
||||
tbVcExecutorLogVolume = project + "_" + TB_VC_EXECUTOR_LOG_VOLUME;
|
||||
tbEdqsLogVolume = project + "_" + TB_EDQS_LOG_VOLUME;
|
||||
|
||||
dockerCompose = new DockerComposeExecutor(composeFiles, project);
|
||||
|
||||
@ -119,6 +122,7 @@ public class ThingsBoardDbInstaller {
|
||||
env.put("TB_MQTT_TRANSPORT_LOG_VOLUME", tbMqttTransportLogVolume);
|
||||
env.put("TB_SNMP_TRANSPORT_LOG_VOLUME", tbSnmpTransportLogVolume);
|
||||
env.put("TB_VC_EXECUTOR_LOG_VOLUME", tbVcExecutorLogVolume);
|
||||
env.put("TB_EDQS_LOG_VOLUME", tbEdqsLogVolume);
|
||||
if (IS_REDIS_CLUSTER) {
|
||||
for (int i = 0; i < 6; i++) {
|
||||
env.put("REDIS_CLUSTER_DATA_VOLUME_" + i, redisClusterDataVolume + '-' + i);
|
||||
@ -189,6 +193,9 @@ public class ThingsBoardDbInstaller {
|
||||
dockerCompose.withCommand("volume create " + tbVcExecutorLogVolume);
|
||||
dockerCompose.invokeDocker();
|
||||
|
||||
dockerCompose.withCommand("volume create " + tbEdqsLogVolume);
|
||||
dockerCompose.invokeDocker();
|
||||
|
||||
StringBuilder additionalServices = new StringBuilder();
|
||||
if (IS_HYBRID_MODE) {
|
||||
additionalServices.append(" cassandra");
|
||||
@ -241,6 +248,7 @@ public class ThingsBoardDbInstaller {
|
||||
copyLogs(tbMqttTransportLogVolume, "./target/tb-mqtt-transport-logs/");
|
||||
copyLogs(tbSnmpTransportLogVolume, "./target/tb-snmp-transport-logs/");
|
||||
copyLogs(tbVcExecutorLogVolume, "./target/tb-vc-executor-logs/");
|
||||
copyLogs(tbEdqsLogVolume, "./target/tb-edqs-logs/");
|
||||
|
||||
StringJoiner rmVolumesCommand = new StringJoiner(" ")
|
||||
.add("volume rm -f")
|
||||
@ -252,6 +260,7 @@ public class ThingsBoardDbInstaller {
|
||||
.add(tbMqttTransportLogVolume)
|
||||
.add(tbSnmpTransportLogVolume)
|
||||
.add(tbVcExecutorLogVolume)
|
||||
.add(tbEdqsLogVolume)
|
||||
.add(resolveRedisComposeVolumeLog());
|
||||
|
||||
if (IS_HYBRID_MODE) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user