2020/01/10 - [NoSQL/Redis] - Redis 특징
2020/01/10 - [NoSQL/Redis] - Docker Redis
2020/01/10 - [NoSQL/Redis] - Spring Boot Redis (standard)
2020/01/10 - [NoSQL/Redis] - Redis install linux
2020/01/10 - [NoSQL/Redis] - Redis Replication (Master Slave) 구성
2020/01/10 - [NoSQL/Redis] - Redis Sentinel 구성
2020/01/10 - [NoSQL/Redis] - Redis Clustering 구성
2020/01/13 - [NoSQL/Redis] - Spring boot redis Sentinel Config
2020/01/13 - [NoSQL/Redis] - spring boot redis clustering config
Redis Replication을 구성하고 나면 다른 문제에 직면하게 된다. Slave로 복사해두었던 Node 를 Master로 올리기 위한 작업을 수동으로 해주어야한다.
Redis는 이런 일련을 작업을 자동으로 할 수 있도록 HA(High Availablility) 을 위한 기능을 제공한다.
대표적으로 모니터링, 알림, 자동페일오버, 환경구성 프로바이더가 있다.
Sentinel 구성시 최소 3개 이상 홀수로 만들어야 한다. 기본 포트로 TCP port 26379 포트를 이용한다.
1. sentinel config 설정
Redis Home directoyr 에서 sentilel.conf 파일을 복사하여 sentilel_11001 ~ 11003.conf 3개의 파일을 생성 한후 설정을 변경 한다.
cd redis_home_dirctory
cp sentinel.conf sentinel_1001.conf ~ 1003.conf
# 11001.conf ~ 11003.conf
# 센티널이 실행될 포트입니다. (이부분은 포트별로 다르게 설정)
port 11001
pidfile "/var/run/redis-sentinel_11001.pid"
logfile "/var/log/sentinel_11002.log"
# 센티널이 감시할 레디스 Master 인스턴스 정보를 넣어줍니다.
# sentinel monitor mymaster <redis master host> <redis master port> <quorum>
sentinel monitor mymaster 127.0.0.1 6379 2
# 센티널이 Master 인스턴스에 접속하기 위한 패스워드를 넣어줍니다.
sentinel auth-pass mymaster foobared
# 센티널이 Master 인스턴스와 접속이 끊겼다는 것을 알기 위한 최소한의 시간입니다.
sentinel down-after-milliseconds mymaster 30000
# 페일오버 작업 시간의 타임오버 시간을 정합니다.
# 기본값은 3분입니다.
sentinel failover-timeout mymaster 180000
# 이 값은 Master로부터 동기화 할 수 있는 slave의 개수를 지정합니다.
# 값이 클수록 Master에 부하가 가중됩니다.
# 값이 1이라면 Slave는 한대씩 Master와 동기화를 진행합니다.
sentinel parallel-syncs mymaster 1
2. master/slave config 설정
센티널 환경설정이 끝나면 master/salve 의 환경 설정을 변경 해야 한다. master/slave의 구조에서 보안을 위해 masterauth 와 requirepass 의 값을 설정 했다. 이제 sentinel 구성에서는 두 노드 모두 masterauth값과 requirepass의 값을 가져야 한다. master down failover 시 다수결 원책에 의해 slave 가 master가 될수 있기 때문이다.
# master / slave 종료
redis-cli -p 6379 -a foobared shutdown
redis-cli -p 6380 shutdown
redis-cli -p 6381 shutdown
# masterauth 및 requirepass 설정
vim /etc/redis/6379.conf
vim /etc/redis/6380.conf
vim /etc/redis/6381.conf
# 6379.conf ~ 6381.conf
masterauth foobared
requirepass foobared
2.1 redis 재실행
# redis 실행
cd /etc/redis
redis-server ./6379.conf & redis-server ./6380.conf & redis-server ./6381.conf &
# 1. requirepass 설정후 shutdown 명령어
redis-cli -p 6379 -a foobared shutdown
redis-cli -p 6380 -a foobared shutdown
redis-cli -p 6381 -a foobared shutdown
3. sentinel 실행 및 종료
# 실행
cd /etc/redis
redis-sentinel ./sentinel_11001.conf & redis-sentinel ./sentinel_11002.conf & redis-sentinel ./sentinel_11003.conf &
# process 확인
ps -ef | grep redis
...
root 8218 1 0 11:37 ? 00:00:00 redis-server 0.0.0.0:6381
root 8219 1 0 11:37 ? 00:00:00 redis-server 0.0.0.0:6379
root 8220 1 0 11:37 ? 00:00:00 redis-server 0.0.0.0:6380
root 8345 8046 0 11:42 pts/0 00:00:00 redis-sentinel *:11001 [sentinel]
root 8346 8046 0 11:42 pts/0 00:00:00 redis-sentinel *:11002 [sentinel]
root 8347 8046 0 11:42 pts/0 00:00:00 redis-sentinel *:11003 [sentinel]
....
# sentinel 접속
redis-cli -p 11001
redis-cli -p 11002
redis-cli -p 11003
# 종료
redis-cli -p 11001 shutdown
redis-cli -p 11002 shutdown
redis-cli -p 11003 shutdown
3.1 log check
redis sentinel 에접속해서 info 명령어로 각 노드의 정보 확인
redis-cli -p 11001
127.0.0.1:11001> info
....
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=210.221.235.208:6379,slaves=2,sentinels=3
master 는 210.221.235.208:6379 에 있고 slave 2개 , sentinel 3개로 구성되어 있다는 정보를 확인 할 수 있다. (다른 port[11002/11003]로 진입해서 info 를 보면 동일하게 나온다.)
4. FailOver Test
- master shutdown , 6380,6381 redis 가 master redis를 찾지 못하고 error 발생
- conf file에서 정의한 시간이 지난후 sentinel 에서 투표를 진행한다.
- 과반수 이상 득표한 node가 새로운 master 로등록된다.
- sentinel log를 확인하면 slave 중 하나가 master 가된 정보를 확인 할 수 있다.
- slave→master 가된 node로 접근하여 role 확인
- shotdown 한 6379 redis를 재가동 한다.
# redis log
tail -f /var/log/redis_6379.log
tail -f /var/log/redis_6380.log
tail -f /var/log/redis_6381.log
# sentinel log
tail -f /var/log/sentinel_11001.log
tail -f /var/log/sentinel_11002.log
tail -f /var/log/sentinel_11003.log
#redis master shutdown
redis-cli -p 6379 -a foobared shutdown
tail -f /var/log/sentinel_11001.log
**11337:X 09 Jan 2020 17:45:01.857 # +sdown master mymaster 210.221.235.208 6379**
11337:X 09 Jan 2020 17:45:02.012 # +new-epoch 1
11337:X 09 Jan 2020 17:45:02.045 # +vote-for-leader 25069815a0c74d1cbb1deb607ac0e552d55b368d 1
11337:X 09 Jan 2020 17:45:02.752 # +config-update-from sentinel 25069815a0c74d1cbb1deb607ac0e552d55b368d 210.221.235.208 11002 @ mymaster 210.221.235.208 6379
**11337:X 09 Jan 2020 17:45:02.752 # +switch-master mymaster 210.221.235.208 6379 210.221.235.208 6381**
11337:X 09 Jan 2020 17:45:02.753 * +slave slave 210.221.235.208:6380 210.221.235.208 6380 @ mymaster 210.221.235.208 6381
11337:X 09 Jan 2020 17:45:02.753 * +slave slave 210.221.235.208:6379 210.221.235.208 6379 @ mymaster 210.221.235.208 6381
11337:X 09 Jan 2020 17:45:32.767 # +sdown slave 210.221.235.208:6379 210.221.235.208 6379 @ mymaster 210.221.235.208 6381
'NoSQL > Redis' 카테고리의 다른 글
Spring boot redis Sentinel Config (0) | 2020.01.13 |
---|---|
Redis Clustering 구성 (0) | 2020.01.10 |
Redis Replication (Master Slave) 구성 (2) | 2020.01.10 |
Redis install linux (0) | 2020.01.10 |
Spring Boot Redis (standard) (0) | 2020.01.10 |