본문 바로가기

생활코딩

라즈베리파이 - redis 설치

라즈베리파이에 Redis 설치와 관련된 내용을 간단히 정리해 둡니다.

 

홈 서버에서 운영중인 앱에 기능을 추가하던 중 Redis가 필요하여 설치를 하려고 좀 살펴봤습니다. 그런데, Redis가 올해 3월에 라이선스가 변경됐더군요(관련글). 개인이 사용하는 것은 크게 문제 없어 보이고, 아무래도 클라우드 업체들이 사용하는 것에 대한 제약 내지는 그들로부터 정당한 댓가를 받기 위해 제정한 것으로 보이기는 했지만 이후에도 어떻게 될지 모르고 세세한 내용들에 대해서 신경쓰기 싫어서 대체재를 찾아봤습니다. Garnet, KeyDB 등과 같은 것들이 있었는데, 그 중에서 Valkey가 눈에 띄더군요.

Valkey는 Redis의 라이선스 변경 이전의 소스를 포크하여 그대로 BSD 라이선스를 유지하면서 발전해 나가고 있는 오픈 소스 소프트웨어입니다. 기본적으로 Redis 7.2.x 버전과 호환성을 유지하고 있습니다. 설치 관련해서는 소스를 직접 컴파일하여 설치하는 방법에서부터, Docker Image, 일부 리눅스 배포판에 대한 바이너리 이미지도 제공하고 있습니다. 그리고, 클라이언트쪽 라이브러리 관련해서는 Valkey가 기본적으로 Redis 7.2.x 까지는 잘 호환하고 있기 때문에 Redis 대체 서버로 사용하더라도 클라이언트쪽 라이브러리는 기존의 다양한 redis용 라이브러리를 그대로 사용할 수 있습니다.

라즈베리파이와 관련해서는 한가지 솔깃한 내용이 있는데, ARM 지원에 대해 설명하는 문서에서 대놓고 라즈베리파이로 예를 들면서 성능도 좋고 잘 지원한다는 얘기를 하고 있습니다. 

 

이제 서론은 여기까지하고 설치 방법에 대해서 얘기해 보겠습니다.

 

Redis CE 설치

Valkey에 대해서 주로 얘기를 하겠지만 Redis 설치에 대한 이야기이니 라이선스만 준수하면 비용 없이 사용 가능한 Redis Community Edition의 설치를 간단히 언급하고 넘어가겠습니다.

라즈베리파이에서 Redis CE는 apt-get 명령어로 다음과 같이 쉽게 설치할 수 있습니다.

sudo apt-get install lsb-release curl gpg
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
sudo chmod 644 /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt-get update
sudo apt-get install redis

 

이렇게 하면 systemd로 관리가 돼서 systemctl 명령어로 제어할 수 있게 됩니다.

Redis CE 설치는 이정도 선으로 정리하려고 합니다. 보다 상세한 내용이 필요한 경우 여기를 참고하실 수 있습니다.

 

Valkey 설치

처음에는 Docker로 실행 시켜 간단히 사용할까 하다가 아무래도 캐시 서버는 장기간 여러 용도로 쓸 거 같아 소스를 컴파일하여 설치하는 방법을 선택했습니다. Docker로 실행하는 방법이 궁금하신 경우 여기를 보시면 됩니다.

 

1. 소스 파일 다운로드

먼저 원하는 버전의 소스파일을 다운로드합니다. 소스 파일은 Valkey GitHub Repository 릴리즈 부분에서 해당 버전의 Assets 부분에 있습니다. 8.0.1 버전 기준으로 다음과 같이 다운로드 받을 수 있습니다.

wget https://github.com/valkey-io/valkey/archive/refs/tags/8.0.1.tar.gz

 

2. 압축 해제 및 사전 준비

tar xvfz 8.0.1.tar.gz
cd valkey-8.0.1
sudo apt-get update
sudo apt-get install libsystemd-dev
sudo apt-get install tcl

 

libsystemd-dev를 설치하는 이유는 valkey가 systemd를 지원하게 컴파일할 때 필요한 라이브러리이기 때문입니다. valkey를 systemd로 제어하지 않을 거면 설치하지 않아도 됩니다. 

tcl은 valkey 빌드 후 제대로 빌드됐는지 테스트 하는 기능이 있는데 거기서 tcl을 사용하기 때문에 필요합니다.

 

3. 빌드 및 테스트

make USE_SYSTEMD=yes
make test

 

USE_SYSTEMD=yes valkey가 systemd를 지원하게 한다는 옵션입니다. 그 외에도 TLS 지원등 몇가지 옵션이 더 있으며 이와 관련해서는 필요한 경우 여기에서 확인하실 수 있습니다.

정말 아무 문제 없이 빌드가 잘 됩니다. 라즈베리파이 5 기준으로 시간도 얼마 걸리지 않습니다. 그리고, 다음 명령어는 제대로 잘 빌드가 됐는지 테스트 하는 명령어인데, 테스트는 시간이 아주 오래 걸립니다. 실행해 놓고 한 참 다른 일을 해도 될 정도입니다. 테스트를 다 맞추고 나면 결과, 테스트별 소요된 시간 등을 나열해 준 후에 다음과 같은 내용을 출력해 줍니다.

 

4. 설치

make install

 

이 명령어를 실행하면 /usr/local/bin 위치에 valkey-server와 valkey-cli가 설치됩니다. 그리고, redis와의 호환성을 위해 이 파일에 각각에 대한 redis-server, redis-cli라는 심볼릭 링크가 생성됩니다.

 

Valkey 설정 및 실행

Valkey를 systemd로 제어되는 서비스로 실행되게 하려면 몇 가지 설정을 해 줘야합니다.

1. valkey 계정 및 그룹 추가

필수 사항은 아니지만 아무래도 root 계정보다는 사용자 계정으로 실행되는게 안전하므로 Valkey 실행을 위한 계정과 그룹을 다음과 같이 생성합니다.

sudo useradd -m -s /bin/false -U valkey

 

2. 설정 파일 및 관련 디렉토리 생성

# Valkey가 사용하는 디렉토리 생성
sudo mkdir /var/valkey
sudo chown -R valkey:valkey /var/valkey
# 로그 파일을 위한 디렉토리 생성
sudo mkdir /var/log/valkey
sudo chown -R valkey:valkey /var/log/valkey
# Valkey 설정 파일을 위한 디렉토리 생성
sudo mkdir /etc/valkey
sudo touch /etc/valkey/valkey.conf
sudo chown valkey:valkey /etc/valkey/valkey.conf
sudo vi /etc/valkey/valkey.conf

 

이렇게 valkey.conf 편집 상태에서 다음의 내용을 입력합니다.

bind 127.0.0.1 라즈베리파이아이피주소
protected-mode no
supervised systemd
dir /var/valkey
logfile "/var/log/valkey/valeky.log"

 

첫 번째 설정은 어떤 네트워크 인터페이스와 연결을 할지에 대한 설정입니다. 127.0.0.1 만 해 놓으면 내부에서만 접속 가능하고 0.0.0.0 으로 하거나 아예 bind 항목을 지정하지 않으면 모든 인터페이스에 연결되어 어떤 연결이든 허용합니다. 기본적으로 127.0.0.1 외에 라즈베리파이의 아이피 주소 정도만 지정하여 외부 연결은 라즈베리파이가 연결돼 있는 네트워크망에서만 가능하게 설정합니다. 관련해서 IPv6에 대해서도 지정 가능하고 옵션들이 더 있습니다. 자세한 내용이 필요한 경우에는 여기를 참고하면 됩니다.

protected-mode no는 접속 시 암호 없이 사용하기 위한 설정입니다. 내부적으로만 사용할 거라 간단히 이렇게 설정했지만, Valkey는 접근과 관련해서 설정 파일을 통한 단일화된 암호 인증부터 ACL(Access Control List)을 통한 개별 인증까지 지원하고 있습니다.

supervised systemd는 systemd로 제어하겠다는 뜻입니다. 그리고, dir은 valkey가 데이터파일이나 그외 파일과 관련된 작업을 할 때 사용하는 디렉토리 설정이고 logfile은 말 그대로 로그 파일의 경로입니다.

전체 설정 옵션을 포함한 설정 파일에 대한 상세한 예시는 여기에서 확인할 수 있습니다.

3. systemd service 파일 생성

Valkey 소스 디렉토리 하위에 utils 라는 디렉토리에 보면 systemd-valkey_server.service 라는 파일이 있습니다. 이 파일을 다음과 같이 복사합니다. 현재 위치가 Valkey 소스 디렉토리로 가정합니다.

sudo cp ./utils/systemd-valkey_server.service /etc/systemd/system/valkey-server.service

 

그리고, 해당 파일을 sudo vi /etc/systemd/system/valkey-server.service 식으로 열어서 다음 부분을 수정해 줍니다.

...
[Service]
ExecStart=/usr/local/bin/valkey-server /etc/valkey/valkey.conf
...
User=valkey
Group=valkey
...

4. 실행 및 테스트

다음의 명령으로 Valkey를 실행합니다.

sudo systemctl start valkey-server

 

다음과 같이 간단히 테스트해 볼 수 있습니다.

% valkey-cli
valkey> ping
PONG
valkey> set foo bar
OK
valkey> get foo
"bar"
valkey> incr mycounter
(integer) 1
valkey> incr mycounter
(integer) 2
valkey>

 

참고