java로 redis에 접근하기 위해서는 jedis 라이브러리를 대부분 사용한다.
이런식으로...
(!) spring data redis도 내부적으로는 JedisPool을 사용하고 있다.
JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost"); Jedis jedis = pool.getResource(); |
JedisPool 코드를 보면 Pool.class 클래스를 상속받고 있고, Pool 클래스를 상속받는 클래스들은 아래와 같다.
- JedisPool
- JedisSentinelPool
- ShardedJedisPool
위 클래스 중 JedisSentinelPool 클래스는 config로 sentinel들의 주소를 받고, 설정에서 받은 sentinel 을 통해서 master redis의 정보를 조회하여 jedis 객체의 pool을 생성한다.
public JedisSentinelPool(String masterName, Set<String> sentinels, final Config poolConfig) |
아래 환경으로 redis를 구성하고 failover 상황을 만들면 JedisSentielPool은 sentinel subscribe(MasterListener) 하고 있다가 자동으로 새로운 master로 연결하여 pool을 구성한다.
(!) 그러나... 처음 failover에는 정상적으로 새로운 master로 pool이 생성되는데 failover가 한번더 일어나면 새로운 master로 변경이 안된다. jedis 버그로 https://github.com/xetorthio/jedis/pull/460에서 패치된 내용을 확인 할 수 있다. 아직 정식 릴리즈에는 추가되지 않았고.. 이글을 쓰고 있는 시점에 redis 2.8.1이 나왔고, sentinel 관련 내용 패치도 있으니 jedis 다음 버전을 확인하거나 jedis 라이브러리를 패치해서 사용하는것도 방법
구조
JedisSentinelPool --- Sentinel --- (redis instance....)
참고
https://github.com/xetorthio/jedis/wiki/Getting-started
https://github.com/xetorthio/jedis/issues/459
http://projects.spring.io/spring-data-redis/
'dev > redis' 카테고리의 다른 글
What's new in Redis 4.0? (0) | 2017.02.03 |
---|---|
redis sentinel High Availability (0) | 2013.11.26 |