본문 바로가기
개발일지/message queue,broker

Redis설치 및 Configuration(1)

2024. 8. 21.

아키텍처

sentinel의 역할은

master가 정상상태인지 확인하고 정상상태가 아니면 replica를 master로 전환해주는 역할

참고로

페일오버(Failover) 는 장애 조치 기능으로 시스템 장애 이벤트 발생 시 하나 이상의 예비 백업 시스템(노드) 로 자동 전환되는 것을 말한다.

즉, master가 내려가면 slave가 master 역할을 해줄 때 그게 failover 이다.

 

ec2에서 redis 설치 명령어

redis master-slave 환경을 셋팅하는 설정을 진행할 것이다.

일단 인스턴스a가 있고 인스턴스a에서 해당 명령어를 실행한다.

# root 계정으로 전환
sudo su

apt-get update

apt-get install redis-server

service redis status

# redis 설정 파일이 있는 디렉토리로 이동
cd /etc/redis

vi redis.conf

ps -ef | grep redis

redis-cli

>info

 

 

인스턴스a에서 ‘이미지 생성’으로 이미지 AMI를 만들고

해당 이미지 AMI를 인스턴스 생성해서 인스턴스b를 만든다.

인스턴스b 에서 아래 작업을 시작한다.

redis-cli

>replicaof 172.31.10.4 6379 # 172.31.10.4 을 대상으로 하는 replica가 되겠다.

>info # 를 입력하면 결과가 다음과 같다.

# Replication
role:slave
master_host:172.31.10.4
master_port:6379
master_link_status:down

# 위와 같은 내용이 있다.
# 위처럼 status가 down 이기 때문에 아래 log로 확인하자

tail -f /var/log/redis/redis-server.log # 해당 명령어로 redis-server.log를 확인하면

374:S 18 Sep 2024 08:09:07.775 * MASTER <-> REPLICA sync started
374:S 18 Sep 2024 08:10:08.005 # Timeout connecting to the MASTER...
374:S 18 Sep 2024 08:10:08.005 * Connecting to MASTER 172.31.10.4:6379

# 위와 같이 뜨는데
start만 뜨고 실제 작업은 일어나지 않고
아까 redis-cli의 info 로 봤을 때
master_link_status:down 으로 나와 있었다.

 

이는 보안 그룹 설정이 필요하다.

보안그룹 인바운드 편집에서 6379 port를 추가해준다.

참고로 검색은 동일한 보안 그룹으로 해주었다. ex) launch-wizrad-5

그러나 success가 뜨지 않았다.

root@ip-172-31-12-33:~# tail -f /var/log/redis/redis-server.log
374:S 18 Sep 2024 08:45:11.844 * MASTER <-> REPLICA sync started
374:S 18 Sep 2024 08:46:12.086 # Timeout connecting to the MASTER...
374:S 18 Sep 2024 08:46:12.086 * Connecting to MASTER 172.31.10.4:6379

 

위와 같이 추가해 줬는데도

다음과 같은 에러가 발생한다..

root@ip-172-31-12-33:~# tail -f /var/log/redis/redis-server.log
374:S 18 Sep 2024 08:50:53.167 # Error condition on socket for SYNC: Connection refused
374:S 18 Sep 2024 08:50:54.170 * Connecting to MASTER 172.31.10.4:6379
374:S 18 Sep 2024 08:50:54.170 * MASTER <-> REPLICA sync started

 

그래서 인스턴스a에 있는 곳에서 다음과 같이 작업했다.

service redis status # 해당 명령어로 redis가 active 상태인지 확인
# 정상이면 문제 없다.

cd /etc/redis

vi redis.conf
# 이렇게 redis.conf 파일을 열고

bind 127.0.0.1 ::1 # 이렇게 되어 있는 곳을
bind 0.0.0.0 # 이렇게 변경했다.

즉, 로컬 ( 127.0.0.1 ) 에서만 접속 했던걸 

모든 네트워크 ( 0.0.0.0 ) 에서 접속할 수 있게 해줬다.

그 다음에

인스턴스b에서 다음을 확인

root@ip-172-31-12-33:~# tail -f /var/log/redis/redis-server.log
374:S 18 Sep 2024 09:09:16.913 * Trying a partial resynchronization (request a223ee965da4e1018107abf4cf419c72d03c3e89:1).
374:S 18 Sep 2024 09:09:16.914 * Full resync from master: 5e3cd870faa47b0bd1ab6bda33b125171cfd6469:0
374:S 18 Sep 2024 09:09:16.914 * Discarding previously cached master state.
374:S 18 Sep 2024 09:09:16.943 * MASTER <-> REPLICA sync: receiving 176 bytes from master to disk
374:S 18 Sep 2024 09:09:16.943 * MASTER <-> REPLICA sync: Flushing old data
374:S 18 Sep 2024 09:09:16.945 * MASTER <-> REPLICA sync: Loading DB in memory
374:S 18 Sep 2024 09:09:16.949 * Loading RDB produced by version 6.0.16
374:S 18 Sep 2024 09:09:16.949 * RDB age 0 seconds
374:S 18 Sep 2024 09:09:16.949 * RDB memory usage when created 1.83 Mb
374:S 18 Sep 2024 09:09:16.949 * MASTER <-> REPLICA sync: Finished with success

이러면 성공적으로 된거다.

 

그 다음 인스턴스b에서 다음과 같이 확인한다.

redis-cli info # 명령어 입력하고

# 다음과 같이 master_link_status가 up인걸 확인할 수 있다!
# Replication
role:slave
master_host:172.31.10.4
master_port:6379
master_link_status:up

 

그 다음 인스턴스a에서 다음과 같이 확인한다.

redis-cli info # 명령어 입력하고

# Replication
role:master
connected_slaves:1

 

인스턴스a

redis-cli

127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> config set maxmemory 500mb
OK
127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "524288000"

 

인스턴스b

root@ip-172-31-12-33:~# redis-cli
127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> config set maxmemory 500mb
OK
127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "524288000

 

위처럼 수정할 수도 있지만 

vi /etc/redis/redis.conf 파일에서

maxmemory를 찾아서

maxmemory 500mb # 이렇게 수정해주는게 좋다

 

왜냐하면 redis가 내려갔을 때는 결국 redis.conf에 있는 설정이 있어야한다.

maxmemory를 redis-cli로 config set maxmemory 500mb으로 변경할 수 있어도

redis가 내려 가면 결국 redis.conf에 있는 것을 설정이 된다.

 

참고로

인스턴스b (slave)에서 set을 하면 안된다 왜냐하면 replica는 read only 이다.

127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> set key2 value2
(error) READONLY You can't write against a read only replica.

그러므로

인스턴스a (master) 에서

service redis stop

하고

인스턴스b (slave) 에서

redis-cli info # 로 확인하면

master_link_status:down # 이렇게 down됨

 

그리고

인스턴스a (master) 에서

vi redis.conf # 로 접속후

maxmemory 500mb # 설정하고

service redis start # 해주면

# 다음과 같이 확인할 수 있다.
redis-cli
127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "524288000"

그리고

인스턴스b (slave)를 확인하면 다시 slave가 제대로 동작한다.

redis-cli info
master_link_status:up

'개발일지 > message queue,broker' 카테고리의 다른 글

Kafka와 SSE를 활용한 비동기 처리  (0) 2025.01.07
Kafka Stream 이란  (0) 2024.12.05
Kafka 인스턴스 생성 과정  (0) 2024.11.25
Redis설치 및 Configuration(2)  (0) 2024.08.28
Redis 구조 및 성능 비교  (0) 2024.08.16