아키텍처
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 |