Redisサーバーの起動モードとsystemdによる自動起動構成

1. 基本的な起動とプロセス管理

Redisをソースコードからビルドし、基本的なバックグラウンドプロセスとして起動する手順を解説します。本番環境ではセキュリティとパフォーマンスの観点から、適切なユーザー権限とディレクトリ構成を事前に準備することが推奨されます。

ビルドとインストール

最新の安定版を取得し、マルチコアを活用してコンパイルを行います。インストール先はPREFIXで明示的に指定し、システム標準のパスと分離します。

wget https://download.redis.io/releases/redis-7.2.4.tar.gz
tar -xzf redis-7.2.4.tar.gz
cd redis-7.2.4

# マルチコアを利用してコンパイル
make -j$(nproc) BUILD_TLS=yes

# 任意のディレクトリにバイナリを配置
sudo make install PREFIX=/opt/redis

サーバーの起動と状態確認

デーモンモードを有効にして起動し、プロセスとリスニングポートの状態を確認します。なお、netstatは非推奨となっているため、現代のLinux環境ではssコマンドを使用します。

# バックグラウンド(デーモン)として起動
/opt/redis/bin/redis-server --daemonize yes

# プロセスの存在確認
pgrep -a redis-server

# ポート6379のリスニング状態確認
ss -tlnp | grep 6379

クライアント接続と動作検証

redis-cliを使用して接続テストを行います。本番環境やデータセットが大きい環境では、ブロックの原因となるKEYS *コマンドの使用を避け、PINGや特定のキー操作で検証します。

/opt/redis/bin/redis-cli
127.0.0.1:6379> PING
PONG
127.0.0.1:6379> SET app_status "running"
OK
127.0.0.1:6379> GET app_status
"running"
127.0.0.1:6379> EXIT

プロセスの停止

RedisはSIGTERMシグナルを適切に処理し、メモリ上のデータをディスクに永続化してから安全に終了します。強制終了(kill -9)はデータ破損のリスクがあるため避けてください。

# クライアント経由での安全なシャットダウン
/opt/redis/bin/redis-cli shutdown

# もしくはプロセスIDを指定してSIGTERMを送信
kill -15 $(pgrep redis-server)

2. カスタム設定ファイルを用いた起動

運用環境では、ポート番号、ログの出力先、永続化データの保存場所などを制御するために、専用の設定ファイル(redis.conf)を使用します。

設定ファイルの構成

以下は、デフォルトから変更を加えたカスタム設定ファイルの例です。セキュリティ向上のため、ローカルホストからの接続のみを許可し、専用のデータディレクトリを指定しています。

# /etc/redis/custom-redis.conf
bind 127.0.0.1 ::1
port 6380
daemonize yes
pidfile /var/run/redis/redis-6380.pid

# ログとデータ永続化ディレクトリの指定
logfile /var/log/redis/redis-6380.log
dir /var/lib/redis/6380

# メモリ使用量の上限と退避ポリシー
maxmemory 256mb
maxmemory-policy allkeys-lru

設定ファイルを指定した起動

必要なディレクトリを作成し、適切なパーミッションを付与した上でサーバーを起動します。

sudo mkdir -p /var/log/redis /var/lib/redis/6380 /var/run/redis
sudo chown -R redis:redis /var/log/redis /var/lib/redis /var/run/redis

# 設定ファイルを指定して起動
/opt/redis/bin/redis-server /etc/redis/custom-redis.conf

# カスタムポート(6380)を指定してクライアント接続
/opt/redis/bin/redis-cli -p 6380
127.0.0.1:6380> INFO server | grep tcp_port
tcp_port:6380

3. systemdユニットファイルによるサービス化と自動起動

従来のinit.dスクリプトやchkconfigは古いシステム向けであり、現代のLinuxディストリビューションではsystemdを使用したサービス管理が標準です。これにより、プロセスの自動再起動や依存関係の管理が容易になります。

systemdユニットファイルの作成

Redisをシステムサービスとして登録するためのユニットファイルを作成します。Type=notifyを指定することで、Redisが完全に起動し、接続を受け付けられる状態になるまでsystemdが待機するようになります。

# /etc/systemd/system/redis.service
[Unit]
Description=Redis In-Memory Data Store
After=network.target
Documentation=https://redis.io/documentation

[Service]
Type=notify
ExecStart=/opt/redis/bin/redis-server /etc/redis/custom-redis.conf
ExecStop=/opt/redis/bin/redis-cli -p 6380 shutdown
Restart=on-failure
RestartSec=5s

# セキュリティ強化のための権限制限
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

サービスの有効化と起動

設定をリロードし、OS起動時の自動起動を有効化すると同時にサービスを開始します。

# systemdの設定を再読み込み
sudo systemctl daemon-reload

# 自動起動の有効化とサービスの即時起動
sudo systemctl enable --now redis.service

# サービスの状態とログの確認
systemctl status redis.service
journalctl -u redis.service -f

タグ: redis systemd linux In-Memory-Database ShellScript

10月25日 02:46 投稿