본문 바로가기

Spring/Kotlin

Redis Sentinel 적용

반응형

2025.03.23 - [server] - Redis Sentinel 세팅

 

Redis Sentinel 세팅

Linux Ubuntu 기반으로 작성하였습니다. OSUbuntu 24.04 ServerComputeMasterSlave-1Slave-2모든 서버에 Redis를 설치sudo apt updatesudo apt install redis-serversudo apt install redis-sentinel 모든 서버 설정sudo vi /etc/redis/redis.conf

xddsr123.tistory.com


  • java
    • 17
  •  kotlinVersion
    • 1.9.25
  • spring boot
    • 3.4.0
  • implementation("org.springframework.boot:spring-boot-starter-data-redis")
    • 3.4.0

application.yml

spring:
  datasource:
  data:
    redis:
      password:
      database:
      lettuce:
        pool:
          min-idle:
          max-idle:
          max-active:
      sentinel:
        master:
        nodes:
          - 
          - 
          -

 

RedisConfigProperty.kt

import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.boot.context.properties.bind.ConstructorBinding
import org.springframework.stereotype.Component

@Component
@ConfigurationProperties(prefix = "spring.data.redis")
@EnableConfigurationProperties(RedisSentinelProperties::class)
class RedisConfigProperty {
    lateinit var password: String
    var database: Int = 0
    lateinit var sentinel: RedisSentinelProperties
}

@ConfigurationProperties(prefix = "spring.data.redis.sentinel")
data class RedisSentinelProperties @ConstructorBinding constructor(
    val master: String,
    val nodes: List<String>
)

 

RedisConfig.kt

import com.planverse.server.common.config.property.RedisConfigProperty
import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.data.redis.connection.RedisNode
import org.springframework.data.redis.connection.RedisPassword
import org.springframework.data.redis.connection.RedisSentinelConfiguration
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory

@Configuration
@EnableConfigurationProperties(RedisConfigProperty::class)
class RedisConfig(
    private val redisConfigProperty: RedisConfigProperty,
) {
    @Bean("lettuceConnectionFactory")
    fun lettuceConnectionFactory(): LettuceConnectionFactory {
        val sentinelConfig = RedisSentinelConfiguration().apply {
            master(redisConfigProperty.sentinel.master)
            redisConfigProperty.sentinel.nodes.map {
                sentinel(RedisNode.fromString(it))
            }
            password = RedisPassword.of(redisConfigProperty.password)
            database = redisConfigProperty.database
        }

        return LettuceConnectionFactory(sentinelConfig)
    }
}
반응형