RHEL 9 계열(RHEL · Rocky · AlmaLinux) 에 소스 빌드로 단일 노드를 올린다. root 또는 sudo 권한이 필요하다.
Redis 는 C 컴파일러와 libc 외에 의존성이 없다. TLS 를 쓰려면 OpenSSL 개발 라이브러리가 더 필요하다.
sudo dnf groupinstall -y "Development Tools"
sudo dnf install -y openssl-devel
메모리 기반이라 커널 설정을 맞춰야 경고 없이 뜬다.
# Transparent Huge Page 끄기 — 지연 시간이 튄다
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
# 메모리 오버커밋 허용 — 백그라운드 저장이 실패하는 것을 막는다
echo 'vm.overcommit_memory = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
재부팅 후에도 THP 를 꺼 두려면 /etc/rc.d/rc.local 에 위 두 줄을 넣고 실행 권한을 준다.
sudo chmod +x /etc/rc.d/rc.local
sudo useradd -r -s /sbin/nologin redis
sudo mkdir -p /etc/redis /var/lib/redis /var/log/redis
sudo chown redis:redis /var/lib/redis /var/log/redis
cd /usr/local/src
sudo wget https://download.redis.io/redis-stable.tar.gz
sudo tar -xzvf redis-stable.tar.gz
cd redis-stable
sudo make
TLS 를 쓰려면 이렇게 빌드한다.
sudo make BUILD_TLS=yes
빌드가 끝나면 src 아래에 redis-server · redis-cli 가 생긴다.
sudo make install
바이너리가 /usr/local/bin 에 놓인다.
sudo cp redis.conf /etc/redis/redis.conf
sudo chown redis:redis /etc/redis/redis.conf
최소한 다음 항목을 손본다. 항목별 설명은 Redis configuration 을 볼 것.
bind 0.0.0.0 -::*
protected-mode no
port 6379
daemonize no
supervised systemd
dir /var/lib/redis
logfile /var/log/redis/redis.log
requirepass <설정할_비밀번호>
protected-mode no와bind 0.0.0.0은 외부에서 붙게 하는 설정이다. 반드시requirepass를 함께 설정하고 방화벽으로 접근을 제한한다. 비밀번호 없이 열어 두면 인터넷에서 곧바로 장악당한다.
sudo tee /etc/systemd/system/redis.service > /dev/null <<'UNIT'
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
Type=notify
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always
# 파일 디스크립터 한도와 권한 상승 차단
LimitNOFILE=65535
NoNewPrivileges=yes
# 로그
StandardOutput=append:/var/log/redis/redis.out.log
StandardError=append:/var/log/redis/redis.err.log
[Install]
WantedBy=multi-user.target
UNIT
sudo systemctl daemon-reload
sudo systemctl enable redis --now
sudo systemctl status redis
Type=notify 는 설정의 supervised systemd 와 짝이다. 둘 중 하나만 두면 기동이 타임아웃난다.
sudo firewall-cmd --permanent --add-port=6379/tcp
sudo firewall-cmd --reload
redis-cli -a '<설정한_비밀번호>' ping
PONG
값을 넣고 꺼내 본다.
redis-cli -a '<설정한_비밀번호>' set hello world
redis-cli -a '<설정한_비밀번호>' get hello
OK
"world"
시스템 점검 결과도 확인한다.
redis-server --check-system
[slow-clocksource]...OK
[xen-clocksource]...OK
[overcommit]...OK
[THP]...OK