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