Redis는 "Key-Value" 형테의 데이터를 관리하기 위한 비관계형 DBMS로 Push 시스템에서 Push 모바일 사용자의 정보를 관리하기 위해 사용한다.
Redis 서버의 사양은 수용 예상되는 Push 사용자 단말기 수에 따라 다르며, 일반적으로 1,000만 사용자 이하의 경우 다음과 같은 사양이 필요하다.
항목 | 권장 사양 |
---|---|
CPU | 2 Core (1.9 Ghz 이상) |
RAM | 4GB 이상의 여유 메모리 |
Disk | 40GB 이상 |
지원 OS | Linux |
지원되는 JDK | 해당 없음 |
본 가이드에서는 이중화를 위해 Redis Sentinel 구성을 한다.
Sentinel 이중화 구성은 다음과 같이 구성되어야 한다.
서버 3대의 구성은 다음과 예시로 한다.
서버 | IP | redis 설치유무 | sentinel 설치유무 |
---|---|---|---|
Redis #1 | 192.168.1.1 | O | O |
Redis #2 | 192.168.1.2 | O | O |
Redis #3 | 192.168.1.3 | - | O |
배포 디렉토리는 /uracle/morpheus/server/redis
로 가정한다.
해당 항목은 root 계정으로 설정이 필요합니다. 권장 OS 설정이 수용되지 않을 경우, 상황에 따라 정상적인 서비스가 불가능할 수 있습니다.
# 커널 설정파일 열기
vi /etc/sysctl.conf
# 최하단에 다음의 두 줄을 추가
net.core.somaxconn=65535
vm.overcommit_memory=1
# vi에서 `:wq` 커맨드로 저장 후 종료
# 커널 설정 반영(OS 재기동을 하지 않기 위함)
sysctl -p
# OS 기동 시, 자동실행 설정 열기
vi /etc/rc.local
# 최하단에 다음의 한 줄을 추가
echo never > /sys/kernel/mm/transparent_hugepage/enabled
# 아래 명령을 실행(시스템 재기동 없이 적용하기 위함)
echo never > /sys/kernel/mm/transparent_hugepage/enabled
CentOS 또는 RHEL 7.0 이상일 경우, 다음도 진행이 필요함
###############################################################################
################ CentOS 또는 RHEL 7.0 이상일 때 아래 항목 진행 ################
###############################################################################
# rc.local 기동 서비스 설정 수정
vi /lib/systemd/system/rc-local.service
# 최하단에 다음의 두 줄을 추가
[Install]
WantedBy=multi-user.target
# vi에서 `:wq` 커맨드로 저장 후 종료
# 서비스 설정을 반영
systemctl daemon-reload
# rc.local 기동 서비스를 항상 시작하도록 설정
systemctl enable rc-local.service
# rc.local의 실행 권한 부여
chmod u+x /etc/rc.local
일반적으로 설치 패키지는 redis-v[x.y.z]-requirepass-b[buildnumber]-install-x86_64-rhel6-linux-[yyyymmddhhmiss].tgz
와 같은 형식으로 배포된다.
/uracle/morpheus/server
디렉토리에 압축을 해제 후 redis-[x.y.z]
형식의 디렉토리 이름을 redis
로 변경하면 /uracle/morpheus/server/redis/rdcli.sh
와 같이 쉘 스크립트 파일이 위치된다.
Redis 서버 번호에 따라 다르게 진행되며, #1, #2 서버만 진행 필요(Redis #3는 제외)
/uracle/morpheus/server/redis/conf/redis.conf
를 불러온다.bind
설정 항목을 다음과 같이 변경한다.... 중략 ...
bind 192.168.1.1 127.0.0.1
... 중략 ...
... 중략 ...
bind 192.168.1.2 127.0.0.1
... 중략 ...
Redis 서버 번호에 따라 다르게 진행되며, #1, #2, #3 서버 전체 진행 필요
/uracle/morpheus/server/redis/conf/sentinel.conf
를 불러온다.bind
와 sentinel monitor mymaster
설정 항목을 다음과 같이 변경한다.... 중략 ...
bind 192.168.1.1 127.0.0.1
... 중략 ...
sentinel monitor mymaster 192.168.1.1 6379 2
... 중략 ...
... 중략 ...
bind 192.168.1.2 127.0.0.1
... 중략 ...
sentinel monitor mymaster 192.168.1.1 6379 2
... 중략 ...
... 중략 ...
bind 192.168.1.3 127.0.0.1
... 중략 ...
sentinel monitor mymaster 192.168.1.1 6379 2
... 중략 ...
redis-server
를 구동한다./uracle/morpheus/server/redis/rdstart.sh
redis-sentinel
를 구동한다./uracle/morpheus/server/redis/stnstart.sh
/uracle/morpheus/server/redis/rdcli.sh replicaof 192.168.1.1 6379
정상으로 연결될 경우, cli가 OK
를 반환한다.
/uracle/morpheus/server/redis/rdcli.sh info replication
role
항목이 다음과 같은지 확인한다.master
slave
/uracle/morpheus/server/redis/rdcli.sh info sentinel
master0
항목의 세부 항목이 다음과 같은지 확인한다.redis-server 중 master role의 서비스가 일정 시간 이상 중단되면, sentinel의 정족수(quorum) 기준에 의해 redis-server slave가 master로 자동으로 승격된다.
그러나 sentinel 명령어를 통해 수동 failover를 진행할 수 있으므로, 테스트를 위해 아래와 같이 진행해볼 수 있다.
아무 Sentinel에 접속 후 다음과 같이 진행한다.
/uracle/morpheus/server/redis/stncli.sh info sentinel
/uracle/morpheus/server/redis/stncli.sh sentinel failover mymaster
/uracle/morpheus/server/redis/stncli.sh info sentinel