committed by
GitHub
19 changed files with 432 additions and 54 deletions
@ -0,0 +1,62 @@ |
|||
/** |
|||
* Copyright © 2016-2023 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. |
|||
*/ |
|||
package org.thingsboard.server.cache; |
|||
|
|||
import org.springframework.beans.factory.annotation.Value; |
|||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; |
|||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
|||
import org.springframework.context.annotation.Configuration; |
|||
import org.springframework.data.redis.connection.RedisSentinelConfiguration; |
|||
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; |
|||
|
|||
@Configuration |
|||
@ConditionalOnMissingBean(TbCaffeineCacheConfiguration.class) |
|||
@ConditionalOnProperty(prefix = "redis.connection", value = "type", havingValue = "sentinel") |
|||
public class TBRedisSentinelConfiguration extends TBRedisCacheConfiguration { |
|||
|
|||
@Value("${redis.sentinel.master:}") |
|||
private String master; |
|||
|
|||
@Value("${redis.sentinel.sentinels:}") |
|||
private String sentinels; |
|||
|
|||
@Value("${redis.sentinel.password:}") |
|||
private String sentinelPassword; |
|||
|
|||
@Value("${redis.sentinel.useDefaultPoolConfig:true}") |
|||
private boolean useDefaultPoolConfig; |
|||
|
|||
@Value("${redis.db:}") |
|||
private Integer database; |
|||
|
|||
@Value("${redis.password:}") |
|||
private String password; |
|||
|
|||
public JedisConnectionFactory loadFactory() { |
|||
RedisSentinelConfiguration redisSentinelConfiguration = new RedisSentinelConfiguration(); |
|||
redisSentinelConfiguration.setMaster(master); |
|||
redisSentinelConfiguration.setSentinels(getNodes(sentinels)); |
|||
redisSentinelConfiguration.setSentinelPassword(sentinelPassword); |
|||
redisSentinelConfiguration.setPassword(password); |
|||
redisSentinelConfiguration.setDatabase(database); |
|||
if (useDefaultPoolConfig) { |
|||
return new JedisConnectionFactory(redisSentinelConfiguration); |
|||
} else { |
|||
return new JedisConnectionFactory(redisSentinelConfiguration, buildPoolConfig()); |
|||
} |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
CACHE_TYPE=redis |
|||
REDIS_CONNECTION_TYPE=sentinel |
|||
REDIS_MASTER=mymaster |
|||
REDIS_SENTINELS=redis-sentinel:26379 |
|||
REDIS_SENTINEL_PASSWORD=sentinel |
|||
REDIS_USE_DEFAULT_POOL_CONFIG=false |
|||
REDIS_PASSWORD=thingsboard |
|||
@ -0,0 +1,40 @@ |
|||
# |
|||
# Copyright © 2016-2023 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: |
|||
# Redis sentinel |
|||
redis-master: |
|||
volumes: |
|||
- redis-sentinel-data-master:/bitnami/redis/data |
|||
redis-slave: |
|||
volumes: |
|||
- redis-sentinel-data-slave:/bitnami/redis/data |
|||
redis-sentinel: |
|||
volumes: |
|||
- redis-sentinel-data-sentinel:/bitnami/redis/data |
|||
|
|||
volumes: |
|||
redis-sentinel-data-master: |
|||
external: |
|||
name: ${REDIS_SENTINEL_DATA_VOLUME_MASTER} |
|||
redis-sentinel-data-slave: |
|||
external: |
|||
name: ${REDIS_SENTINEL_DATA_VOLUME_SLAVE} |
|||
redis-sentinel-data-sentinel: |
|||
external: |
|||
name: ${REDIS_SENTINEL_DATA_VOLUME_SENTINEL} |
|||
@ -0,0 +1,119 @@ |
|||
# |
|||
# Copyright © 2016-2023 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: |
|||
# Redis sentinel |
|||
redis-master: |
|||
image: 'bitnami/redis:7.0' |
|||
volumes: |
|||
- ./tb-node/redis-sentinel-data-master:/bitnami/redis/data |
|||
environment: |
|||
- 'REDIS_REPLICATION_MODE=master' |
|||
- 'REDIS_PASSWORD=thingsboard' |
|||
|
|||
redis-slave: |
|||
image: 'bitnami/redis:7.0' |
|||
volumes: |
|||
- ./tb-node/redis-sentinel-data-slave:/bitnami/redis/data |
|||
environment: |
|||
- 'REDIS_REPLICATION_MODE=slave' |
|||
- 'REDIS_MASTER_HOST=redis-master' |
|||
- 'REDIS_MASTER_PASSWORD=thingsboard' |
|||
- 'REDIS_PASSWORD=thingsboard' |
|||
depends_on: |
|||
- redis-master |
|||
|
|||
redis-sentinel: |
|||
image: 'bitnami/redis-sentinel:7.0' |
|||
volumes: |
|||
- ./tb-node/redis-sentinel-data-sentinel:/bitnami/redis/data |
|||
environment: |
|||
- 'REDIS_MASTER_HOST=redis-master' |
|||
- 'REDIS_MASTER_SET=mymaster' |
|||
- 'REDIS_SENTINEL_PASSWORD=sentinel' |
|||
- 'REDIS_MASTER_PASSWORD=thingsboard' |
|||
depends_on: |
|||
- redis-master |
|||
- redis-slave |
|||
|
|||
# ThingsBoard setup to use redis-sentinel |
|||
tb-core1: |
|||
env_file: |
|||
- cache-redis-sentinel.env |
|||
depends_on: |
|||
- redis-sentinel |
|||
tb-core2: |
|||
env_file: |
|||
- cache-redis-sentinel.env |
|||
depends_on: |
|||
- redis-sentinel |
|||
tb-rule-engine1: |
|||
env_file: |
|||
- cache-redis-sentinel.env |
|||
depends_on: |
|||
- redis-sentinel |
|||
tb-rule-engine2: |
|||
env_file: |
|||
- cache-redis-sentinel.env |
|||
depends_on: |
|||
- redis-sentinel |
|||
tb-mqtt-transport1: |
|||
env_file: |
|||
- cache-redis-sentinel.env |
|||
depends_on: |
|||
- redis-sentinel |
|||
tb-mqtt-transport2: |
|||
env_file: |
|||
- cache-redis-sentinel.env |
|||
depends_on: |
|||
- redis-sentinel |
|||
tb-http-transport1: |
|||
env_file: |
|||
- cache-redis-sentinel.env |
|||
depends_on: |
|||
- redis-sentinel |
|||
tb-http-transport2: |
|||
env_file: |
|||
- cache-redis-sentinel.env |
|||
depends_on: |
|||
- redis-sentinel |
|||
tb-coap-transport: |
|||
env_file: |
|||
- cache-redis-sentinel.env |
|||
depends_on: |
|||
- redis-sentinel |
|||
tb-lwm2m-transport: |
|||
env_file: |
|||
- cache-redis-sentinel.env |
|||
depends_on: |
|||
- redis-sentinel |
|||
tb-snmp-transport: |
|||
env_file: |
|||
- cache-redis-sentinel.env |
|||
depends_on: |
|||
- redis-sentinel |
|||
tb-vc-executor1: |
|||
env_file: |
|||
- cache-redis-sentinel.env |
|||
depends_on: |
|||
- redis-sentinel |
|||
tb-vc-executor2: |
|||
env_file: |
|||
- cache-redis-sentinel.env |
|||
depends_on: |
|||
- redis-sentinel |
|||
Loading…
Reference in new issue