본문 바로가기
카테고리 없음

[Redis] CentOS Redis rpm 설치 (HA 구성 by Sentinel)

by 쿡노트 2023. 9. 26.
반응형

Redis는 standalone으로 설치 외에, Sentinel을 활용하여, HA(High Availability - 고가용성) 구성을 할 수 있다.

HA 구성 

1. Redis Replication으로 데이터 이중화(Master/Slave 형식) 

2. Sentinel로 failover 조치 (자동으로 Master Redis 장애 시 Slave가 Master로 승격되도록 한다.)

Sentinel은 failover를 위해 과반수 이상 투표 필요로 최소 3개의 Sentinel 프로세스가 필요하다. 
Redis를 설치한 3대의 서버에, 각각 Sentinel 프로스세스를 띄웠다. rpm으로 직접 설치한 내역을 기재한다.
우선, jemelloc, redis를 설치한 이후에 구성에 대해 작성한다(지난번 Redis 설치 (standalone) 포스팅 참조)

Redis/Sentinel 구성(편의상 1번, 2번, 3번 서버 지칭)

Redis Sentinel 구성 1번 서버 2번 서버 3번 서버
Redis Port 6379 6379 6379
Sentinel Port 26379 26379 26379
Redis Master/Slave Master Slave Slave
Redis M/S failover(예시) Master 장애 발생 Slave -> Master Slave


디렉터리 생성 (3대 서버 동일 생성 - /REDIS/redis, /REDIS/sentinel 각각 디렉터리를 생성)

$ mkdir -p /REDIS/redis
$ mkdir -p /REDIS/sentinel

설정파일 구성

1번 서버 (Master) redis.conf

$ cat <<EOF > /REDIS/redis.conf
bind 0.0.0.0
port 6379
daemonize yes
pidfile "/REDIS/redis.pid"
dir "/REDIS/redis"
loglevel verbose
logfile "redis.log"
databases 4
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
maxmemory 2g
maxmemory-policy volatile-ttl

 

#for HA
masterauth "test123"
requirepass "test123"
EOF

2,3번 서버 (Slave) redis.conf (Master redis.conf 와 동일, Slave 서버에는 추가 설정만 기재)

$ cat <<EOF > /REDIS/redis.conf

 

Master redis.conf 와 동일


#Only Add Replica Node
replicaof Master Server IP 6379
EOF

1번, 2번, 3번 sentinel.conf (1번 서버 IP 기재)

$ cat <<EOF > /data/REDIS/sentinel.conf
port 26379
dir "/REDIS/sentinel"
loglevel verbose
logfile "sentinel.log"
pidfile "/REDIS/sentinel.pid"
daemonize yes

sentinel deny-scripts-reconfig yes
sentinel monitor mymaster Master Server IP 6379 1
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1

sentinel auth-pass mymaster test123
sentinel config-epoch mymaster 1
sentinel leader-epoch mymaster 1
EOF

 

Sentinel 옵션

deny-scripts-reconfig yes : default 값 yes - 실행 중에 변경할 수 없도록 설정
down-after-milliseconds <master-name> <milliseconds> : default 값 30초(30000) - 마스터 실패 감지 (5초로 설정)
failover-timeout <master-name> <milliseconds>: default 값 3분(180000) - 장애조치가 설정한 시간이 지나도 완료되지 않으면 취소하는 시간 (1분으로 설정)
parallel-syncs <master-name> <numreplicas> : default 값 1 - 장애조치 단계 관련 새 마스터로부터 데이터를 받는데, 한 번에 하나의 복제노드 처리 (여러 슬레이브가 새 마스터로부터 Full resync 방지) 

 

Sentinel 옵션 참조 : http://redisgate.jp/redis/sentinel/sentinel_conf_han.php

Redis, Sentinel 실행

$ redis-server /REDIS/redis.conf
$ redis-sentinel /REDIS/sentinel.conf

Redis, Sentinel 종료

$ pkill -F /REDIS/redis.pid
$ pkill -F /REDIS/sentinel.pid

Sentinel 접속 및 상태 조회 (sentinel port 접속)

$ redis-cli -p 26379
> info sentinel

Redis replication 테스트 (redis.conf에 패스워드 설정으로 Redis 접속 시 -a 옵션 후 패스워드 기재) 

--1번 서버 redis 접속
$ redis-cli -a 'test123'
127.0.0.1:6379> set replica ok
OK

--2번 서버 redis 접속
127.0.0.1:6379> get replica
"ok"

Redis HA 테스트(Sentinel 접속)

--2번 서버 접속(Master 조회)

$ redis-cli -p 26379

> SENTINEL get-master-addr-by-name mymaster

127.0.0.1:26379> SENTINEL get-master-addr-by-name mymaster
1) "Master 서버 IP 출력(1번 서버)"
2) "6379"

 

--1번 서버 접속(Master Redis 30초간 중지)
$ redis-cli -p 6379 -a 'test123' DEBUG sleep 30

--2번 서버 (Master 조회 - 몇 초 이후 Master 서버가 변경된다.)

> SENTINEL get-master-addr-by-name mymaster

127.0.0.1:26379> SENTINEL get-master-addr-by-name mymaster
1) "Master 서버 IP 출력(1번 서버 IP)"
2) "6379"
127.0.0.1:26379> SENTINEL get-master-addr-by-name mymaster
1) "Master 서버 IP 출력(2번 서버 IP)"
2) "6379"

 

참고로 처음 설정한 redis.conf, sentinel.conf 파일은 Redis, Sentinel 기동 후 설정 파일에 '# Generated by CONFIG REWRITE' 항목으로 몇 가지가 더 쓰인다.
특히 sentinel.conf 에는 sentinel known-replica mymaster IP 6379라는 항목이 추가된다.

감사합니다.

반응형