catsridingCATSRIDING|OCEANWAVES
Data

AWS EC2 인스턴스에 Redis 설치하기

jynn@catsriding.com
Jan 27, 2024
Published byJynn
999
AWS EC2 인스턴스에 Redis 설치하기

Install Redis On Linux-Based AWS EC2 Instance

Redis는 AWS Elasticache, Amazon MemoryDB 또는 Redis Cloud 등과 같은 관리형 클라우드 서비스를 통해 쉽게 사용할 수 있습니다. 이러한 관리형 서비스는 상당히 편리하지만 상당히 고가의 비용을 수반합니다. 그래서 초기 개발 및 테스트 용도라면 AWS EC2 인스턴스에 직접 Redis를 설치하는 것이 좋은 대안이 될 수 있습니다. 이 방법은 비용 효율적이면서도 굉장히 유연하게 접근할 수 있는 방법입니다.

Prerequisite

다음의 AWS EC2 인스턴스에서 진행하였습니다.

  • OS: Amazon Linux 2023
  • Instance type: t2.medium
  • Security: All traffic → Anywhere

Installing Redis from Source

Linux에 Redis를 설치하는 방법은 크게 두 가지가 있습니다.

  • 패키징 파일 설치: 빠르고 간편하게 설치가 가능한 방법입니다. 하지만 세부 설정이나 수정이 필요한 경우, 파일들이 시스템의 여러 곳에 흩어져 있어서 관리가 어려울 수 있습니다.
  • 소스 코드 빌드: 직접 소스 코드를 빌드하여 애플리케이션을 설치하는 방법으로, 이 방법을 사용하면 Redis와 관련된 모든 파일들을 한 곳에서 집중적으로 관리할 수 있습니다. 하지만 설치 과정이 복잡하고 시간이 더 걸릴 수 있습니다.

Preparing Redis Installation

대부분의 Linux 배포판에서는 Redis 최신 버전 패키지를 제공하지 않으며, Amazon Linux 2023에서는 Redis 6까지만 제공하고 있습니다.

Redis와 관련된 파일들을 살펴보기 위해서 소스 코드를 통해 직접 설치해 보겠습니다. AWS EC2 인스턴스에 SSH로 접속하여 Redis 설치에 앞서 필요한 패키지들을 설치해 줍니다.

$ sudo yum update -y
$ sudo yum install gcc make -y
$ sudo yum install -y systemd-devel
  • yum update -y:
    • 이 명령어는 시스템에 설치된 모든 패키지들을 최신 상태로 업데이트합니다.
    • yumYellowdog Updater Modified의 약자로, Fedora 계열의 리눅스 배포판에서 주로 사용되는 패키지 관리 도구입니다.
    • update 옵션은 모든 패키지를 최신버전으로 업데이트하라는 명령이며, -y 옵션은 사용자의 확인 없이 모든 프롬프트에 Yes를 뜻하는 자동응답 가이드입니다.
  • yum install gcc make -y:
    • 이 명령어는 gccmake를 설치합니다.
    • gcc(GNU Compiler Collection)는 다양한 프로그래밍 언어를 위한 컴파일러입니다.
    • make는 전체적인 빌드 프로세스를 자동화하는 도구입니다.
  • yum install -y systemd-devel:
    • 이 명령어는 systemd 개발 파일을 설치하는데, 이 파일은 시스템 및 서비스 관리자인 systemd를 확장하는 데 필요합니다.
    • 이 라이브러리는 일반적으로 systemd와 함께 제공되지만, Amazon Linux 2와 같은 일부 시스템에서는 별도로 설치해야 합니다.

Building Redis Source Code

Redis의 최신 안정화 버전을 다운로드하고 압축을 풉니다:

$ wget https://download.redis.io/redis-stable.tar.gz
$ tar xvzf redis-stable.tar.gz

압축 해제한 폴더로 이동해서 Redis를 컴파일합니다. 이 과정에서 USE_SYSTEMD=yes 옵션을 추가해 systemd 지원을 활성화합니다:

$ cd redis-stable
$ make USE_SYSTEMD=yes
$ sudo make install
  • make USE_SYSTEMD=yes: 이 명령은 소스 코드를 컴파일하는 과정에서 systemd 지원을 활성화하라는 옵션을 추가한 것입니다.
  • systemd: Linux 시스템에서 서비스의 시작, 중지, 재시작 등의 작업을 관리하는 시스템 및 서비스 매니저입니다.
  • make install: 컴파일된 Redis를 시스템에 설치하는 장치입니다.

Adding Linux User and Group

Redis 서버를 보다 안전하게 운영하기 위해, 별도의 Linux 사용자와 그룹을 생성하고 Redis를 이 사용자의 권한으로 실행하는 것이 일반적으로 권장됩니다. 아래 명령어를 통해 Linux 사용자를 생성합니다:

$ sudo groupadd redis-group
$ sudo useradd -r -s /sbin/nologin -g redis-group redis
  • redis-group이라는 그룹을 추가하고, redis라는 사용자를 생성하였습니다. 사용자는 로그인할 수 없는 시스템 계정으로 구성하였습니다.

Creating Directories

이제 Redis 서버를 운영하기 위한 설정 파일과 필요한 디렉토리를 생성해야 합니다. Linux 파일시스템 계층 구조 (Filesystem Hierarchy Standard) 를 준수하였습니다.

# Redis 설정 파일 저장 디렉토리 구성
$ sudo mkdir /etc/redis
$ sudo cp redis.conf /etc/redis/

# Redis 데이터 저장 디렉토리 구성
$ sudo mkdir /var/lib/redis
$ sudo chown redis:redis-group /var/lib/redis
$ sudo chmod 775 /var/lib/redis

# Redis PID 저장 디렉토리 구성
$ sudo mkdir /var/run/redis
$ sudo chown redis:redis-group /var/run/redis
$ sudo chmod 775 /var/run/redis

# Redis 로그 저장 디렉토리 구성
$ sudo mkdir /var/log/redis
$ sudo chown redis:redis-group /var/log/redis
$ sudo chmod 755 /var/log/redis
  •  /etc: Linux 시스템에서, 이 디렉토리는 시스템의 전반적인 설정 파일을 저장하는 역할을 담당합니다. 여기에는 시스템의 전반적인 설정, 보안 설정, 서비스의 설정 등 다양한 설정 파일들이 위치합니다.
  •  /var/lib: Linux 시스템에서, 이 디렉토리는 시스템이 운영 중인 서비스나 애플리케이션들이 상태나 데이터를 지속적으로 저장하는 장소로 사용됩니다.
  •  /var/run: Linux 시스템 운영 중에 생성되는 임시 파일을 저장하는 디렉터리입니다. 이는 PID 파일, 소켓 파일 같은 일시적인 프로세스 관련 파일을 포함하며, 보통 이 디렉터리의 내용은 시스템 부팅 시 지워집니다.
  •  /var/log: 여러 애플리케이션의 로그 파일이 저장되는 디렉토리입니다. 이곳에서는 시스템 작업, 서버, 애플리케이션, 보안 관련 메시지 등 다양한 유형의 로그를 저장합니다.

Registering Redis Service

이제 Redis 서버를 시스템 데몬에 등록하고 실행할 차례입니다. 이를 위해 먼저 서비스 관리를 위한 스크립트를 작성하겠습니다.

다음 명령어로 서비스 파일 󰈮 redis.service를 생성합니다:

$ sudo vim /etc/systemd/system/redis.service

이 파일에 Redis 서비스를 정의하는 내용을 아래와 같이 입력 후 저장합니다:

redis.service
[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
User=redis
Group=redis-group
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always

[Install]
WantedBy=multi-user.target

그 다음, 시스템 데몬을 다시 로드하여 등록한 Redis 서비스를 인식하도록 합니다:

$ sudo systemctl daemon-reload

그리고 Redis 서비스를 시작합니다:

$ sudo systemctl start redis

아래 명령어를 실행하여 Redis가 올바르게 구동되었는지 확인합니다:

$ sudo systemctl status redis
● redis.service - Redis In-Memory Data Store
     Loaded: loaded (/etc/systemd/system/redis.service; disabled; preset: disabled)
     Active: active (running) since Thu 2024-02-15 13:44:00 UTC; 5s ago
   Main PID: 57663 (redis-server)
      Tasks: 5 (limit: 1114)
     Memory: 5.0M
        CPU: 14ms
     CGroup: /system.slice/redis.service
             └─57663 "/usr/local/bin/redis-server 127.0.0.1:6379"

Feb 15 13:44:00 ip-172-31-2-78.ap-northeast-2.compute.internal redis-server[57663]: 57663:M 15 Feb 2024 13:44:00.355 * Running mode=standalone, port=6379.
Feb 15 13:44:00 ip-172-31-2-78.ap-northeast-2.compute.internal redis-server[57663]: 57663:M 15 Feb 2024 13:44:00.355 * Server initialized
Feb 15 13:44:00 ip-172-31-2-78.ap-northeast-2.compute.internal redis-server[57663]: 57663:M 15 Feb 2024 13:44:00.355 * Ready to accept connections tcp
  • systemctl status: 이 명령어는 systemd에 의해 관리되는 서비스 데몬의 상태를 주기적으로 보여줍니다.

또는 Redis CLI를 통해서도 확인할 수도 있습니다.

$ redis-cli ping
PONG

정상적으로 Redis가 실행되었다면, 시스템 부팅 시 자동으로 시작하도록 서비스를 활성화 합니다:

$ sudo systemctl enable redis
Created symlink /etc/systemd/system/multi-user.target.wants/redis.service → /etc/systemd/system/redis.service.

다시 Redis 서비스 데몬의 상태를 확인해보면 서비스가 활성화 되었다고 출력됩니다:

$ sudo systemctl status redis
● redis.service - Redis In-Memory Data Store
     Loaded: loaded (/etc/systemd/system/redis.service; enabled; preset: disabled)
     Active: active (running) since Thu 2024-02-15 13:44:00 UTC; 2min 50s ago
   Main PID: 57663 (redis-server)
      Tasks: 5 (limit: 1114)
     Memory: 5.1M
        CPU: 227ms
     CGroup: /system.slice/redis.service
             └─57663 "/usr/local/bin/redis-server 127.0.0.1:6379"

이로써, Redis 소스 코드를 빌드하여 Linux에 직접 설치하고, 서비스에 등록하는 과정을 완료했습니다. ⚙️

Configuring Redis

Redis 설정은 redis.conf 파일에서 관리됩니다.

$ sudo vim /etc/redis/redis.conf

Redis 서버의 사용을 위한 기본 설정을 아래와 같이 정의할 수 있습니다:

redis.conf
bind 0.0.0.0
port 6379
pidfile /var/run/redis/redis_6379.pid
logfile /var/log/redis/redis-server.log
dir /var/lib/redis
requirepass catsriding
maxmemory 1gb
axmemory-policy allkeys-lru
  • bind: 이 설정은 Redis를 어떤 IP 주소에서 접근 가능하게 설정할 지를 정합니다. 여기선 모든 IP에서 접근 가능하게 설정하였습니다.
  • port: Redis 서버가 어떤 포트 번호를 사용할 지를 정합니다. 기본값은 6379입니다.
  • pidfile: Redis 프로세스 ID를 저장하는 파일의 경로를 정합니다.
  • logfile: Redis 로그를 저장할 파일의 경로를 정합니다.
  • dir: Redis 데이터가 저장될 디렉터리를 정합니다.
  • requirepass: Redis에 접속할 때 필요한 패스워드를 설정합니다. 여기선 패스워드로 'catsriding'을 사용하였습니다.
  • maxmemory: Redis가 사용할 수 있는 메모리의 최대치를 설정합니다. 설정에 따라 Redis는 이 이상의 메모리를 사용하지 않습니다.
  • maxmemory-policy: 메모리가 가득 찼을 때 키를 제거하는 정책을 설정합니다. allkeys-lru'는 가장 최근에 사용되지 않은 키부터 제거하는 정책입니다.

이와 같이 설정을 적절하게 조정하여 Redis 서버의 동작을 필요에 맞게 최적화할 수 있습니다.

redis.conf 파일에 변경 사항을 저장한 후에는 반드시 Redis 서버를 재시작해야 합니다. 이렇게 하면 새로운 설정이 적용됩니다. 다음 명령어를 사용하여 Redis 서비스를 재시작할 수 있습니다:

$ sudo systemctl restart redis.service

또한, 변경 사항이 올바르게 적용되었는지 확인하려면, 재시작 직후에 Redis 서비스 상태를 점검하는 것이 좋습니다. 아래 명령어로 Redis 서비스 상태를 확인할 수 있습니다:

$ sudo systemctl status redis.service
● redis.service - Redis In-Memory Data Store
     Loaded: loaded (/etc/systemd/system/redis.service; enabled; preset: disabled)
     Active: active (running) since Sat 2024-02-17 15:11:29 UTC; 3s ago
   Main PID: 20677 (redis-server)
      Tasks: 5 (limit: 1114)
     Memory: 1.9M
        CPU: 10ms
     CGroup: /system.slice/redis.service
             └─20677 "/usr/local/bin/redis-server 0.0.0.0:6379"

이로서, Redis 서버의 기본 설정에 대한 설명과 변경 사항을 적용하는 방법에 대해 살펴봤습니다. 설정을 변경하고 서비스를 재시작한 후에는, 로컬 시스템에서 Redis를 테스트하여 원활하게 작동하는지 확인해야 합니다.

Redis Insight라는 도구를 이용하면, Redis 서버를 간편하게 관리하고 모니터링할 수 있습니다. macOS에서 Redis Insight를 사용하려면 App Store 또는 Homebrew에서 해당 어플리케이션을 다운로드받아 설치하면 됩니다.

$ brew install --cask redisinsight

Redis Insight를 실행한 후, 애플리케이션의 인터페이스를 통해 레디스 서버에 연결 정보(IP, 포트, 비밀번호 등)를 입력하면, Redis 서버의 작동 상태와 데이터를 실시간으로 확인하고 관리할 수 있습니다.

install-redis-on-linux-based-aws-ec2-instance_00.png


  • Redis
  • Linux
  • AWS