TIL

AWS EC2에 Redis server 설치하기 (우분투에 레디스 서버 설치하기)

DoosanBaek 2022. 11. 11. 22:26

AWS EC2에 외부에서 접속 가능한 redis-server setup하기

EC2 인스턴스 생성

우선,redis-server를 설치할 EC2 인스턴스를 만든다.

redis 라는 이름의 ubuntu 인스턴를 만들었고 인스턴스 유형은 t2.micro로 선택했다.

 

EC2 인스턴스 접속

이제 만든 인스턴스에 접속해본다.

위 화면에서 인스턴스 ID를 클릭하면 아래와 같은 화면이 나오고 여기서 연결 버튼을 클릭하면

인스턴스 연결에 대한 정보가 나온다.

연결 버튼을 클릭하면 아래와 같은 화면이 나온다.

SSH 클라이언트로 접속을 해본다.

인스턴스 생성 시 만든 PEM 키가 있는 폴더로 이동 후 위 명령어들을 그대로 치면 된다.

chmod 400 redis.pem 은 ( redis 인스턴스 팸키명으로 redis.pem 사용했음)

chmod 명령어는 pem 키의 접근 권한을 변경하는 명령어이다.

chmod 뒤에 등장하는 숫자 3개는 각각 나/ 그룹/ 전체의 권한을 나타낸다. read, write, execute 권한이 각각

숫자 4,2,1 을 의미하고 숫자들의 합으로 권한을 나타낸다.

예를들어, 510 권한은 나에게 read, execute( 4 +1) 권한, 그룹에게 execute(1) 권한, 전체에게 아무 권한이 없음을 나타낸다.

chmod 400으로 pem 키의 접근 권한을 변경하면 나에게 read 권한만 부여하게 된다. AWS가 생성한 pem 키를 변경하지 못하고 읽어서 사용할 수만 있게 하는 명령어다.

다음 명령어인 ssh -i './redis-pem' ubuntu@ec2-54-180-9-100.ap-northeast-2.compute.amazonaws.com 은

ssh 명령어는 ssh [옵션] [접속 계정]@[호스트 주소] 형태로 사용된다.

위에서 사용된 -i 옵션은 인증키 파일을 선택하겠다는 옵션이다.

따라서 위 명령어는 ec2-54-180-9-100.ap-northeast-2.compute.amazonaws.com 컴퓨터에 ubuntu라는 이름의 계정으로 redis.pem 파일에서 읽은 인증 키로 접속을 하겠다는 의미다.

위 사진과 같이 뜨면 접속 성공.

 

EC2 인스턴스에 redis-server 설치

인스턴스 접속 성공 후 , 인스턴스에 redis-server를 설치해야 한다.

먼저 아래 명령어를 통해 apt-get을 업그레이드 한다.

sudo apt-get update
sudo apt-get upgrade

업그레이드가 완료되면, apt-get을 통해 redis-server를 설치해준다.

sudo apt-get install redis-server

설치 후에 redis-server --version 명령어를 입력했을 경우, 아래와 같이 설치된 redis-server의 버전 정보가 뜬다면 설치에 성공한 것이다.

 redis-server가 잘 설치되었다면, redis-cli를 통해 redis-server가 잘 동작하는지 확인해본다.

redis-cli 명령어를 입력하면 위 사진과 같이 로컬에 설치된 redis에 접속해서 바로 명령어를 입력할 수 있게 바뀐다.

redis에 데이터를 저장하고 가져오려면 set 과 get 명령어를 사용해야 한다.

set 명령어는 key 값에 valu를 저장하는 명령어이고 get 명령어는 key 값에 저장된 value를 가져오는 명령어다.

set 과 get 명령어가 잘 동작하는것을 확인했다.

 

Redis 설정

이제 외부에서도 EC2 인스턴스에 설치된 redis에 접속할 수 있도록 설정을 해야 한다. redis 설정들은 redis.conf 파일에서 할 수 있다.

아래 명령어로 redis.conf 파일을 열어본다.

sudo vi /etc/redis/redis.conf

redis.conf 파일을 열면 위 사진과 같은 화면이 나온다.

주석처리된 설명들이 빼곡하게 적혀있다.

redis 접속 비밀번호, redis에 접속 가능한 ip 주소, redis가 사용할 max 메모리, 메모리가 가득차면 데이터 교체하는 알고리즘을 변경해야 한다.

먼저 redis 접속 비밀번호를 변경한다.

redis.conf 파일에서 접속 비밀번호를 설정하려면 requirepass 옵션을 설정하면 된다.

파일의 내용이 너무 많아 , 찾기 어려우므로 명령어를 이용해서 requirepass를 찾아본다.

vim 파일에서 원하는 단어를 찾으려면 /[단어] 를 입력하고 enter키를 누르면 된다.

그리고 n 버튼을 누르면 다음 단어를 계속해서 찾아나간다.

n 버튼을 누르다가 requirepass foobared라고 적힌 부분을 발견하면 enter 키를 처서 멈춘다.

i 키를 누르면 inesert 모드로 변경된다.

수정할 부분을 주석 해제 해고 esc 키를 누르면 다시 초기 모드로 돌아간다.

 

이런 방식으로 

 bind를 찾아서 bind 뒤에 있는 127.0.0.1::1 부분을 0.0.0.0 으로 변경한다.

bind 0.0.0.0

(모든 ip에서 오는 connection 허용)

 

maxmemory

maxmemory 1gb

옵션을 찾아서 max memory 값영역, bytes로 써있는 부분을 1gb 로 변경한다.

 

(처음에 주석부분에는 byte로 되어있다.)

 

maxmemory-policy

maxmemory-policy allkeys-lru

옵션을 찾아서 allkeys-lru 알고리즘으로 변경한다.

(allkeys-lru 알고리즘은, 데이터가 차면, 메모리를 교체하는 알고리즘이다.)

 

수정이 모두 끝났으면 esc를 누르고 초기 모드로 돌아가 :wq! 명령어를 입력후, enter키를 누르면 파일이 저장되고 닫힌다.

:wq!

Redis 실행

redis 설정이 다끝났으니 redis를 실행해본다.

redis는 인 메모리 데이터 베이스이기 때문에 redis-server가 실행중인 상태여야 사용할 수 있다.

그렇기 때문에 EC2 인스턴스를 닫아도 redis-server가 계속 실행중인 상태를 유지할 수 있도록 백드라운드 실행을 해야 한다.

sudo systemctl start redis-server

 

systemctl 명령어를 이용하면 백그라운드로 redis-server를 실행 할 수 있다.

systemctl을 백그라운드 프로세스를 제어하는 명령어 이다.

redis-server 실행 이후 redis.conf 파일을 수정했다면 

sudo systemctl restart redis-server 명령어를 통해 redis-server를 재시작 해야 한다.

 

EC2 포트 개방

명령어를 실행 시켰으면 이제 EC2 인스턴스를 종료하고 EC2 설정을 추가적으로 해야 한다.

redis는 설정해놓은 port로 들어오는 connection만 허용하기 때문에 6379번 포트로 EC2 인스턴스에 접속할 수 있도록 설정해줘야 합니다. 6379번 포트가 default로 설정되어 있다.

이 값도 redis.conf 파일에서 변경할 수 있다.

인스턴스 상세 페이지에서 보안탭을 누르면 보안 그룹이라고 표시된 링크가 보인다.

링크를 클릭하고, 들어가면 인바운트 규칙 편집 버튼을 누른다.

인바운드 규칙 편집에서 사용자 지정 TCP, 모든 외부 IP (0.0.0.0/0)으로 부터 6379번 포트로 tTCP 연결을 할 수 있도록 설정한다.

Redis 원격 접속

마지막으로 외부에서 ec2 인스턴스에 설치된 redis 접속이 잘 되는 지 확인한다.

로컬 컴퓨터에 redis-cli 를 설치하고 아래 명령어를 입력하면 된다.

redis-cli -h [EC2 인스턴스의 IP or DNS] -p 6379 -a [redis.conf에 설정한 비밀번호]