Red Hat Enterprise Linux 9 (RHEL 9) は、エンタープライズ環境における新たな標準として多くの新機能を提供しています。
その中でも、Systemdの新機能と改善点は、サーバ運用を効率化し、システムの信頼性を高めるための重要なツールです。
この記事では、Systemdの基本からRHEL 9で追加された新機能、具体的な設定方法までを詳しく解説します。
Systemdの基本
Systemdは、Linuxシステムの初期化システムであり、サービスの管理を行うためのフレームワークです。従来のSysVinitに代わり、依存関係の管理、並列化の改善、高度なログ機能などを提供しています。
基本コマンド
・サービス起動:
systemctl start example.service
・サービス停止:
systemctl stop example.service
・サービス再起動:
systemctl restart example.service
・サービスのステータス確認:
systemctl status example.service
・サービスの有効化(起動時に自動起動):
systemctl enable example.service
・サービスの無効化:
systemctl disable example.service
ユニットファイルの基本構造
Systemdは、ユニットファイルを使用してサービスやリソースを管理します。
ユニットファイルは通常、/etc/systemd/system/
または /lib/systemd/system/
に配置されます。これらのディレクトリに同じユニットファイルが存在する場合、/etc/systemd/system/
のファイルが優先されます。
■サービスユニットファイルの例
[Unit]
Description=Example Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/example-command
[Install]
WantedBy=multi-user.target
- [Unit] セクション:サービスの説明や起動順序を定義します。
- [Service] セクション:サービスの実行方法を定義します。
- [Install] セクション:サービスのインストールオプションを定義します。
RHEL9の新機能
RHEL 9では、Systemdに多くの新機能と改善点が追加されています。ここでは、特にサーバ運用に役立つ主要な5つの新機能を紹介します。
1. 自動再起動
Systemdは、サービスが失敗した際に自動的に再起動する機能を提供します。これにより、サービスのダウンタイムを最小限に抑えることができます。
■自動再起動の設定例
以下は、example.service
に自動再起動機能を追加した例です。
[Unit]
Description=Example Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/example-command
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
Restart=on-failure
:サービスが失敗した場合に再起動します。RestartSec=5
:再起動までの待機時間を5秒に設定します。
2. タイマーの設定
Systemdでは、cronの代わりにタイマーを使用して定期的なタスクを実行できます。タイマーは、timer
ユニットファイルを使用して設定します。
■タイマーユニットファイルの例
以下は、毎日午前2時にexample.service
を実行するタイマーの例です。
[Unit]
Description=Run Example Service Daily
[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
[Install]
WantedBy=timers.target
OnCalendar=*-*-* 02:00:00
:毎日午前2時にタイマーを起動します。Persistent=true
:システムがダウンしている間にタイマーが逃した実行をキャッチアップします。
3. ログ機能の強化
Systemdのジャーナル機能は、システム全体のログを一元管理し、効率的なトラブルシューティングを可能にします。journalctl
コマンドを使用して、詳細なログ情報を取得できます。
■ログの確認方法
・全てのログを表示
journalctl
・特定のサービスに関連するログを確認する場合は、次のようにします。
journalctl -u example.service
・特定の期間のログを確認するには、次のオプションを使用します。
journalctl --since "2023-01-01" --until "2023-01-31"
4. systemd-oomd: Out-of-Memory (OOM) Daemon
systemd-oomd
は、Linuxシステムでメモリ使用率を監視し、メモリオーバーコミットが検出された場合に特定のプロセスを終了させるデーモンです。
これは、システムのメモリが極端に不足した際に安定性を確保するための自動的なメカニズムを提供します。
■主な機能
- メモリ監視: 継続的にシステムのメモリ状態をチェックし、使用可能なメモリが一定の閾値以下になった場合に反応します。
- プロセス終了: メモリの使用が高いプロセスを自動的に特定し、システムの安定性を損なう前にこれらのプロセスを終了させることができます。
- 設定の柔軟性: ユーザーは
systemd-oomd
の動作をカスタマイズできる設定オプションを持っており、特定のサービスやユーザーに対して異なるポリシーを適用することが可能です。
■インストール
dnf install systemd-oomd
■systemd-oomdの有効化と開始
systemctl enable --now systemd-oomd.service
■設定方法systemd-oomd
の設定は主に2つの方法で行われます。
- グローバル設定:
/etc/systemd/oomd.conf
ファイルを編集することで、システム全体のデフォルト設定を調整します。 - サービスユニット設定: 個々のサービスユニットファイルに特定の設定を追加し、そのサービスに対するOOM動作を制御します。
■設定オプションOOMPolicy
やOOMScoreAdjust
などの設定オプションを使用して、OOM時の振る舞いを細かく制御できます。
<OOMPolicy>
OOM Killerがアクティブになった際に特定のサービスに対してどのように対応するかを定義します。
主に以下の値を設定できます。stop
: OOM Killerがアクティブになった際に、該当するサービスを停止します。これにより、メモリを解放してシステムの安定性を保ちます。continue
: 該当するサービスを継続させ、OOM Killerの対象から除外します。クリティカルなサービスで使用されることが多い設定です。
<OOMScoreAdjust>
プロセスのOOMスコアを調整するための値を設定します。
OOMスコアが高いプロセスほど、メモリが不足した際に終了されやすくなります。
この値を調整することで、特定のプロセスがOOM Killerによって終了される確率を低減または増加させることができます。
■設定例
シナリオ1: 特定のサービスをOOMから保護
サービスユニットファイル (例: /etc/systemd/system/mycriticalservice.service
) に以下の設定を追加することで、重要なサービスがOOM Killerの影響を受けないようにします。
[Service]
OOMPolicy=continue
OOMScoreAdjust=-1000
ここで、OOMScoreAdjust=-1000
はこのサービスのOOMスコアを極端に下げ、実質的に終了されることがないようにします。
シナリオ2: メモリが不足した場合にサービスを自動的に停止
あるサービスがメモリを大量に消費し、他の重要なプロセスに影響を与える可能性がある場合、以下のように設定します。
サービスユニットファイル (例: /etc/systemd/system/resourceintensive.service
) に以下の設定を追加します。
[Service]
OOMPolicy=stop
OOMScoreAdjust=1000
OOMScoreAdjust=1000
はこのサービスのOOMスコアを上げ、メモリ不足時に最初に終了される可能性が高くなります。
シナリオ3: システム全体のOOM設定のカスタマイズ
システム全体のoomd
ポリシーをカスタマイズするために、/etc/systemd/oomd.conf
ファイルを編集します。
[oomd]
SwapUsedLimit=15%
DefaultMemoryPressureLimit=60
SwapUsedLimit: スワップ使用量がこのパーセンテージを超えると、oomdがアクションを開始します。DefaultMemoryPressureLimit: 特定の閾値以上のメモリ圧迫が続くと、oomdが介入します。DefaultMemoryPressureDuration: メモリ圧迫がこの期間(秒)続く場合、oomdが対応を開始します。
■注意点
systemd-oomd
の設定はシステム全体のバランスを取るために慎重に行う必要があります。誤った設定はシステムの安定性を損なう可能性があります。- メモリが不足している状態でプロセスを終了させることは、一時的な解決策に過ぎないため、根本的なメモリ管理の見直しやリソースの追加も検討することが重要です。
5. systemd-homed: Home Directory Management
Linuxシステム上でユーザーのホームディレクトリの管理を改善するための新しい方法を提供します。
この機能は、ユーザーのホームディレクトリをポータブルかつ安全に扱うことを目的としており、各ユーザーの設定とデータを包含した専用のコンテナとしてホームディレクトリを管理します。
■主な特徴
- ポータビリティ: ユーザーのホームディレクトリは独立したストレージファイル(例:LUKSで暗号化されたイメージ)として管理されるため、異なるマシン間で簡単に移動できます。
- セキュリティ: ホームディレクトリは完全に暗号化され、安全に保存および転送が可能です。
- 柔軟性:
systemd-homed
は様々なストレージバックエンド(例えばCIFS、NFS、LUKS)をサポートしており、ユーザーのニーズに応じて設定をカスタマイズできます。
■インストール
dnf install systemd-homed
systemd
のバージョン245以上であることを確認してください。systemd-homed
はこのバージョン以降で導入されています。次のコマンドでsystemd
のバージョンを確認できます。
systemctl --version
■systemd-homedの有効化と開始
sudo systemctl enable --now systemd-homed.service
■設定例
1.ユーザーの作成
新しいユーザーを作成する場合、基本的な情報を指定してユーザーを追加します。ここでは、ユーザー名 newuser
として、LUKS暗号化されたホームディレクトリを指定し、初期パスワードを設定します。
homectl create newuser --storage=luks --image-path=/home/.images/newuser.home --set-password
newuser
という名前のユーザーを作成。- ホームディレクトリを暗号化されたイメージとして
/home/.images/newuser.home
に保存。 - ユーザーにパスワードを設定させるためのプロンプトを表示。
2.ユーザー情報の参照
作成したユーザーの詳細情報を表示するには、inspect
コマンドを使用します。これにより、ユーザーの設定やプロファイルの全ての詳細が表示されます。
homectl inspect newuser
3.ユーザー情報の変更
ユーザーの情報を変更する必要がある場合(例えば、ディスクサイズの変更やシェルの変更など)、update
コマンドを使用します。例えば、newuser
のディスクサイズを10GBに増やし、デフォルトシェルを /bin/zsh
に変更します。
homectl update newuser --shell=/bin/zsh --disk-size=10G
4.ユーザーの削除
ユーザーが不要になった場合や、システムからユーザーを削除する必要がある場合には、remove
コマンドを使用します。これはユーザーとそのホームディレクトリをシステムから完全に削除します。
homectl remove newuser
■注意点
systemd-homed
が使用される場合、ユーザー情報は passwd
や shadow
ファイルではなく、systemd-homed
が管理する専用のストレージ(通常はJSON形式のファイル)に保存されます。これにより、従来の /etc/passwd
や /etc/shadow
ファイルとは独立した管理になります。systemd-homed
と従来の/etc/passwd
および/etc/shadow
ファイルを併用することは、技術的には可能ですがユーザー管理の複雑性が増します。systemd-homed
を利用する際は、システム管理の負担が増加するため、長期的には一つのシステムに統一するなど考えて利用するようにしてください。
まとめ
RHEL 9のSystemdの新機能と改善点は、サーバ運用を一層効率化し、システムの信頼性を向上させるための強力なツールを提供します。
自動再起動、タイマー設定、強化されたログ機能、systemd-oomd
によるメモリ管理、systemd-homed
によるホームディレクトリ管理など、これらの機能を理解し、実際に設定・活用することで、より効率的で安定したサーバ運用が可能になります。
このガイドが、Systemdの理解を深め、RHEL 9の新機能を効果的に活用するための参考となれば幸いです。
コメント