Browse Source

feat: redis 설정추가가

master
이경도 2 weeks ago
parent
commit
f3b1f3d417
  1. 21
      docker-compose.yml
  2. 5
      dockerfile
  3. 14
      sentinel1/sentinel.conf
  4. 16
      sentinel2/sentinel.conf
  5. 18
      sentinel3/sentinel.conf
  6. 38
      src/main/java/com/redis/ha/api/RedisController.java
  7. 47
      src/main/java/com/redis/ha/config/RedisSentinelConfig.java
  8. 11
      src/main/resources/application.yml
  9. 4
      src/test/java/com/redis/ha/HaApplicationTests.java

21
docker-compose.yml

@ -1,6 +1,18 @@
version: "3.8" version: "3.8"
services: services:
springboot:
build:
context: .
dockerfile: Dockerfile
container_name: springboot
depends_on:
- sentinel1
networks:
redisnet:
ipv4_address: 172.23.0.10
ports:
- "8060:8060"
redis1: redis1:
image: redis:alpine image: redis:alpine
container_name: redis1 container_name: redis1
@ -50,7 +62,8 @@ services:
- "redis2:172.23.0.5" - "redis2:172.23.0.5"
- "redis3:172.23.0.6" - "redis3:172.23.0.6"
networks: networks:
- redisnet redisnet:
ipv4_address: 172.23.0.7
sentinel2: sentinel2:
image: redis:alpine image: redis:alpine
container_name: sentinel2 container_name: sentinel2
@ -66,7 +79,8 @@ services:
- "redis2:172.23.0.5" - "redis2:172.23.0.5"
- "redis3:172.23.0.6" - "redis3:172.23.0.6"
networks: networks:
- redisnet redisnet:
ipv4_address: 172.23.0.8
sentinel3: sentinel3:
image: redis:alpine image: redis:alpine
container_name: sentinel3 container_name: sentinel3
@ -82,7 +96,8 @@ services:
- "redis2:172.23.0.5" - "redis2:172.23.0.5"
- "redis3:172.23.0.6" - "redis3:172.23.0.6"
networks: networks:
- redisnet redisnet:
ipv4_address: 172.23.0.9
networks: networks:
redisnet: redisnet:

5
dockerfile

@ -0,0 +1,5 @@
FROM openjdk:17-jdk-slim
VOLUME /tmp
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

14
sentinel1/sentinel.conf

@ -10,19 +10,19 @@ dir "/data"
latency-tracking-info-percentiles 50 99 99.9 latency-tracking-info-percentiles 50 99 99.9
user default on nopass sanitize-payload ~* &* +@all user default on nopass sanitize-payload ~* &* +@all
sentinel myid f3b370a4fbcfe5cbe6b0654e81323afb3522c51b sentinel myid f3b370a4fbcfe5cbe6b0654e81323afb3522c51b
sentinel config-epoch mymaster 1 sentinel config-epoch mymaster 7
sentinel leader-epoch mymaster 1 sentinel leader-epoch mymaster 7
sentinel current-epoch 1 sentinel current-epoch 7
sentinel known-replica mymaster 172.23.0.6 6379 sentinel known-replica mymaster 172.23.0.6 6379
sentinel known-sentinel mymaster 172.23.0.2 26379 4ea64b5a0885b1617010242c1e08115d00896309 sentinel known-sentinel mymaster 172.23.0.9 26379 4ea64b5a0885b1617010242c1e08115d00896309
sentinel known-sentinel mymaster 172.23.0.7 26379 4208d0adc5452e2de73024943c44e833807fd1d1 sentinel known-sentinel mymaster 172.23.0.8 26379 4208d0adc5452e2de73024943c44e833807fd1d1
sentinel known-replica mymaster 172.23.0.4 6379 sentinel known-replica mymaster 172.23.0.4 6379
sentinel known-replica mymaster 172.23.0.3 6379
sentinel known-replica mymaster 172.23.0.2 6379 sentinel known-replica mymaster 172.23.0.2 6379
sentinel known-replica mymaster 172.23.0.3 6379

16
sentinel2/sentinel.conf

@ -10,19 +10,21 @@ latency-tracking-info-percentiles 50 99 99.9
dir "/data" dir "/data"
user default on nopass sanitize-payload ~* &* +@all user default on nopass sanitize-payload ~* &* +@all
sentinel myid 4208d0adc5452e2de73024943c44e833807fd1d1 sentinel myid 4208d0adc5452e2de73024943c44e833807fd1d1
sentinel config-epoch mymaster 1 sentinel config-epoch mymaster 7
sentinel leader-epoch mymaster 1 sentinel leader-epoch mymaster 7
sentinel current-epoch 1 sentinel current-epoch 7
sentinel known-replica mymaster 172.23.0.2 6379 sentinel known-replica mymaster 172.23.0.3 6379
sentinel known-sentinel mymaster 172.23.0.2 26379 4ea64b5a0885b1617010242c1e08115d00896309 sentinel known-sentinel mymaster 172.23.0.2 26379 4208d0adc5452e2de73024943c44e833807fd1d1
sentinel known-sentinel mymaster 172.23.0.3 26379 f3b370a4fbcfe5cbe6b0654e81323afb3522c51b sentinel known-sentinel mymaster 172.23.0.7 26379 f3b370a4fbcfe5cbe6b0654e81323afb3522c51b
sentinel known-replica mymaster 172.23.0.4 6379 sentinel known-replica mymaster 172.23.0.4 6379
sentinel known-replica mymaster 172.23.0.3 6379 sentinel known-replica mymaster 172.23.0.2 6379
sentinel known-replica mymaster 172.23.0.6 6379 sentinel known-replica mymaster 172.23.0.6 6379
sentinel known-sentinel mymaster 172.23.0.9 26379 4ea64b5a0885b1617010242c1e08115d00896309

18
sentinel3/sentinel.conf

@ -10,19 +10,21 @@ latency-tracking-info-percentiles 50 99 99.9
dir "/data" dir "/data"
user default on nopass sanitize-payload ~* &* +@all user default on nopass sanitize-payload ~* &* +@all
sentinel myid 4ea64b5a0885b1617010242c1e08115d00896309 sentinel myid 4ea64b5a0885b1617010242c1e08115d00896309
sentinel config-epoch mymaster 1 sentinel config-epoch mymaster 7
sentinel leader-epoch mymaster 1 sentinel leader-epoch mymaster 7
sentinel current-epoch 1 sentinel current-epoch 7
sentinel known-replica mymaster 172.23.0.3 6379 sentinel known-replica mymaster 172.23.0.4 6379
sentinel known-sentinel mymaster 172.23.0.3 26379 f3b370a4fbcfe5cbe6b0654e81323afb3522c51b sentinel known-sentinel mymaster 172.23.0.7 26379 f3b370a4fbcfe5cbe6b0654e81323afb3522c51b
sentinel known-sentinel mymaster 172.23.0.7 26379 4208d0adc5452e2de73024943c44e833807fd1d1 sentinel known-sentinel mymaster 172.23.0.8 26379 4208d0adc5452e2de73024943c44e833807fd1d1
sentinel known-replica mymaster 172.23.0.4 6379 sentinel known-replica mymaster 172.23.0.3 6379
sentinel known-replica mymaster 172.23.0.6 6379
sentinel known-replica mymaster 172.23.0.2 6379 sentinel known-replica mymaster 172.23.0.2 6379
sentinel known-replica mymaster 172.23.0.6 6379 sentinel known-sentinel mymaster 172.23.0.3 26379 4ea64b5a0885b1617010242c1e08115d00896309

38
src/main/java/com/redis/ha/api/RedisController.java

@ -0,0 +1,38 @@
package com.redis.ha.api;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@RestController
@Slf4j
@RequiredArgsConstructor
@RequestMapping("/v1/redis")
public class RedisController {
private final RedisTemplate<String, String> redisTemplate;
@GetMapping("/put")
public ResponseEntity<Void> putData(@RequestParam(name = "key") String key){
redisTemplate.opsForValue().set(key, "DATA");
return ResponseEntity.ok().build();
}
@GetMapping("/get")
public ResponseEntity<String> getData(@RequestParam(name = "key") String key){
String data = redisTemplate.opsForValue().get(key);
log.info(data);
return ResponseEntity.ok().body(data);
}
}

47
src/main/java/com/redis/ha/config/RedisSentinelConfig.java

@ -0,0 +1,47 @@
package com.redis.ha.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisPassword;
import org.springframework.data.redis.connection.RedisSentinelConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Configuration
@Slf4j
@RequiredArgsConstructor
public class RedisSentinelConfig {
@Value("${spring.data.redis.password}")
private String password;
@Bean
public RedisConnectionFactory redisConnectionFactory(){
RedisSentinelConfiguration redisSentinelConfiguration = new RedisSentinelConfiguration()
.master("mymaster")
.sentinel("172.23.0.7", 26379)
.sentinel("172.23.0.8", 26379)
.sentinel("172.23.0.9", 26379)
;
redisSentinelConfiguration.setPassword(RedisPassword.of(password));
return new LettuceConnectionFactory(redisSentinelConfiguration);
}
@Bean
public RedisTemplate<String, String> redisTemplate(){
RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
}

11
src/main/resources/application.yml

@ -1,7 +1,16 @@
spring: spring:
application: application:
name: redis-ha name: redis-ha
data:
redis:
sentinel:
master: mymaster
nodes:
- 172.23.0.7:26379
- 172.23.0.8:26379
- 172.23.0.9:26379
password: palnet!234
timeout: 3000
server: server:
port: 8060 port: 8060

4
src/test/java/com/redis/ha/HaApplicationTests.java

@ -1,13 +1,9 @@
package com.redis.ha; package com.redis.ha;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest @SpringBootTest
class HaApplicationTests { class HaApplicationTests {
@Test
void contextLoads() {
}
} }

Loading…
Cancel
Save