RHEL 9 계열에 Valkey 8.1.10 을 소스 빌드해 primary 1 · replica 1 · sentinel 3 으로 올린다. sudo 권한이 필요하다.
Valkey 는 Redis 7.2.4 에서 갈라진 포크라 sentinel.conf 를 고치지 않고 그대로 옮길 수 있다. 명령 이름만 redis- 에서 valkey- 로 바뀐다.
| Redis | Valkey |
|---|---|
redis-server |
valkey-server |
redis-cli |
valkey-cli |
redis-sentinel |
valkey-sentinel |
redis.conf |
valkey.conf |
sentinel.conf |
sentinel.conf (그대로) |
sudo dnf groupinstall -y "Development Tools"
sudo dnf install -y openssl-devel
sudo useradd -r -s /sbin/nologin valkey
sudo mkdir -p /etc/valkey /var/lib/valkey /var/log/valkey /var/run/valkey
sudo chown -R valkey:valkey /var/lib/valkey /var/log/valkey /var/run/valkey
cd /usr/local/src
sudo wget -O valkey-8.1.10.tar.gz https://github.com/valkey-io/valkey/archive/refs/tags/8.1.10.tar.gz
sudo tar -xzvf valkey-8.1.10.tar.gz
cd valkey-8.1.10
sudo make
sudo make install
바이너리가 /usr/local/bin 에 놓인다.
valkey-server --version
sudo cp valkey.conf /etc/valkey/primary.conf
bind 0.0.0.0
protected-mode no
port 16379
daemonize no
supervised systemd
dir /var/lib/valkey
logfile /var/log/valkey/primary.log
requirepass <복제_비밀번호>
masterauth <복제_비밀번호>
protected-mode no로 열 때는requirepass를 반드시 설정하고 방화벽으로 접근을 제한한다.
masterauth는 이 노드가 나중에 replica 로 강등될 때 쓰인다. primary 에도 미리 넣어 둔다.
sudo cp valkey.conf /etc/valkey/replica.conf
primary 설정에 다음 한 줄을 더한다.
replicaof <primary_IP> 16379
sentinel 3대에 같은 파일을 둔다. 3대여야 한 대가 죽어도 과반(quorum)이 선다.
sudo cp sentinel.conf /etc/valkey/sentinel.conf
bind 0.0.0.0
port 26379
daemonize no
supervised systemd
pidfile /var/run/valkey/sentinel.pid
logfile /var/log/valkey/sentinel.log
sentinel monitor mymaster <primary_IP> 16379 2
sentinel auth-pass mymaster <복제_비밀번호>
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
마지막 숫자 2 가 quorum 이다. sentinel 3대 중 2대가 장애로 합의하면 승격을 시작한다.
sudo tee /etc/systemd/system/valkey.service > /dev/null <<'UNIT'
[Unit]
Description=Valkey
After=network.target
[Service]
Type=notify
User=valkey
Group=valkey
ExecStart=/usr/local/bin/valkey-server /etc/valkey/primary.conf
ExecStop=/usr/local/bin/valkey-cli shutdown
Restart=always
LimitNOFILE=65535
NoNewPrivileges=yes
[Install]
WantedBy=multi-user.target
UNIT
sudo tee /etc/systemd/system/valkey-sentinel.service > /dev/null <<'UNIT'
[Unit]
Description=Valkey Sentinel
After=network.target
[Service]
Type=notify
User=valkey
Group=valkey
ExecStart=/usr/local/bin/valkey-sentinel /etc/valkey/sentinel.conf
Restart=always
LimitNOFILE=65535
NoNewPrivileges=yes
[Install]
WantedBy=multi-user.target
UNIT
sudo systemctl daemon-reload
replica 노드는 ExecStart 의 설정 파일을 replica.conf 로 바꾼다.
primary · replica 먼저, sentinel 은 그다음이다.
sudo systemctl enable valkey --now
sudo systemctl enable valkey-sentinel --now
sudo firewall-cmd --permanent --add-port=16379/tcp
sudo firewall-cmd --permanent --add-port=26379/tcp
sudo firewall-cmd --reload
복제가 붙었는지 본다.
valkey-cli -p 16379 -a '<복제_비밀번호>' info replication
role:master
connected_slaves:1
slave0:ip=...,port=16379,state=online
sentinel 이 primary 를 보고 있는지 본다.
valkey-cli -p 26379 sentinel master mymaster
valkey-cli -p 26379 sentinel sentinels mymaster
승격을 시험한다.
valkey-cli -p 26379 sentinel failover mymaster
몇 초 뒤 info replication 으로 역할이 바뀌었는지 확인한다.