서비스 논리 흐름
- 타 서비스에서 최저가 서비스 호출 (input: keyword)
- keyword: {prodGrpId,,, }를 조회
- Redis에 없다면 Elasticsearch에서 조회하여 prodGrpId 조회 (상위10건) 후 Redis에 저장
- prodGrpId: [{prodId, price}, {} ---] 데이터 조회
- 없다면 Elasticsearch에서 ProdId별 가격조회 후 반환
- 반환 후 Redis에 ProdId: Price 정보저장
Redis 설치
- 인스턴스는 AWS EC2 프리티어로 생성할 수 있는 인스턴스를 생성했다.
- ubuntu이미지이기 때문에 apt-get install redis-server를 통해 레디스를 설치할 수 있다.
- 기본적으로 6379포트로 설정되어 있다.
- /etc/redis.conf에 bind 라는 곳이 있는데 이 값을 0.0.0.0으로 변경해서 모든 아이피에서 접속을 허용한다.
# Examples:
#
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
#
# ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the
# internet, binding to all the interfaces is dangerous and will expose the
# instance to everybody on the internet. So by default we uncomment the
# following bind directive, that will force Redis to listen only on the
# IPv4 loopback interface address (this means Redis will only be able to
# accept client connections from the same host that it is running on).
#
# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
# JUST COMMENT OUT THE FOLLOWING LINE.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind 0.0.0.0
- master와 replica를 만들고 sentinel을 둬서 관리할 것이다.
- 센티넬은 이 레디스가 죽었는지 살았는지 체크하는 역할이다.
- 센티넬은 홀수개로 생성하여 의사결정을 다수결로 진행한다.
- 첫번째 EC2를 이미지를 떠서 두번째 EC2 인스턴스를 만든다.
- 두 번째 인스턴스의 터미널에서 redis-cli로 레디스 cli에 진입한 뒤
- replicaof 첫번째EC2주소 6379
- 를 입력한다.
- 정상적으로 작동하지 않았다면 보안그룹 설정에서 6379포트를 열어줘야 한다.
# Replication
role:slave
master_host:172.31.82.58
master_port:6379
master_link_status:up
master_last_io_seconds_ago:6
master_sync_in_progress:0
slave_repl_offset:14
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:050779e9e85b5eb6827fea1371e1df8d04e0178c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14
- master_link_status: up 이면 정상적으로 레플리카 싱크가 완료된 것이다.
- 마스터에서 set [key] [value]를 사용해서 값을 하나 저장한뒤 레플리카에서 get [key] 해보면 정상적으로 출력되는 것을 알 수 있다.
센티넬 설치
각각의 인스턴스에 apt-get install redis-sentinel 해서 설치해준다.
홀수 개의 인스턴스에 설치해야 의사결정을 다수결로 내릴 수 있다.
sentinel bind도 수정을 해준다.
그리고
sentinel monitor mymaster [마스터의 ip] 6379 2
로 변경해준다.
3대의 센티넬 중 2대에서 fail이 뜨면 내린다는 뜻이다.
'Backend > spring boot' 카테고리의 다른 글
Logback에 대해 알아보자 (0) | 2024.03.10 |
---|---|
[Spring Cloud] OpenFeign 사용법 (0) | 2024.03.10 |
스프링에서 비동기 처리하기 @Async (0) | 2024.03.09 |
Spring batch란? (0) | 2024.03.07 |