Webサーバーデータを(tmpfs)RAMディスクに移動するにはどうすればよいですか? (実験)

Webサーバーデータを(tmpfs)RAMディスクに移動するにはどうすればよいですか? (実験)

~のためWebサーバーデータを(tmpfs)RAMディスクに移動するにはどうすればよいですか? (実験)、私はいくつかのアイデア、メモ、関連コンテンツを提供しました。私の考え全体が健全で健全かどうか聞きたい、このような実験も可能です。

  1. tmpfs起動時に十分に大きい()RAMディスクを自動的に作成します。

  2. 同じスクリプトを使用し、wwwデータをコピーし、所有権を調整するなど、ほぼすべての作業を行います。

  3. ログは PCIe 3.0 x4 タイプ NVMe SSD に保持されます。

    # nvme list
    Node                  SN                   Model                                    Namespace Usage                      Format           FW Rev  
    --------------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
    /dev/nvme0n1          < SN REDACTED >      Samsung SSD 970 EVO Plus 2TB             1         360.10  GB /   2.00  TB    512   B +  0 B   2B2QEXM7
    
  4. ノートブックには32GBのRAM(DDR4 2400MHz、デュアルチャンネル)がありますが、使用されていないようです。

  5. ラップトップのバッテリーは数分続きましたが、まだ利用可能でした。

  6. ノートパソコンが古いUPSに接続されているため、バッテリーを交換する必要があるかもしれません(注)。

  7. 私のアップリンク速度は(ほぼ)100Mbits / sです。https://www.speedtest.net/result/16116969035

  8. 第7世代のIntelベースでAES-NI命令セットを備えたこのラップトップは、再起動することはほとんどありません。

  9. Timeshift-GTKアプリケーションを使用して週に1回スナップショットを撮ります。毎月2つのSSDを完全に複製します。

  10. オペレーティングシステムは、Ubuntu 22.04ベースのLinux Mint 21.3 Cinnamon 64ビットです。現在のカーネルバージョンは6.5.0-27です。


これがこの実験についての私のメモであり、私に尋ねるならばそれは興味深いメモです。

私にとって唯一の難しい部分は、それを自動化するためのシェルスクリプトを書くことだったと思います。同時に楽しいかもしれません。どこから始めるべきか、何を忘れてはいけないのか分かりません。すべてのヒントに感謝します。

ベストアンサー1

このような実験が可能です。

はい、マイナーなようです。上記の問題を解決するには、次の手順を実行する必要があります。

起動時に十分に大きい(tmpfs)RAMディスクを自動的に作成します。

これは/ etc / fstabのエントリで行うことができます。たとえば、次のようになります。

tmpfs /var/www/ramdisk tmpfs noauto,size=4g

4GB(最大、なぜ指定したのかわかりませんが、要求した理由はわからない)RAMディスクを設定します。 Tmpfsは常にファイルを保存するために必要なRAMのみを使用し、サイズが定義されています。とにかく、あなたの選択!

noautoオプションですが、Webサーバーを起動するにはRAMディスクのみが必要なので、それまでRAMディスクの設定を待つことができます。合理的な初期化システムは、デバイスのマウントとブートの間の依存関係を知り(既知の場合)アクティブにします。 「最も便利な注文」。つまり、後で起動するときにのみ必要なRAMディスクを設定して、初期起動を妨げないようにしましょう。

同じスクリプトを使用し、wwwデータをコピーし、所有権を調整するなど、ほぼすべての作業を行います。

もちろん、起動時にスクリプトを実行してこれを行うこともできます。複雑すぎる必要はありませんcp -ar /var/www/disk/* /var/www/ramdisk/。 (ソースに正しい権限が設定されていると仮定)。または、tarまたはsquashfsアーカイブをターゲットに解凍することもできます。 Linuxの多くは所有権と権限を維持しています!

データコピースクリプトが起動システムの一部になり、Webサーバーが起動する前に常に実行されるようにします。 systemdではこれは特に簡単です。 /etc/systemd/system/ に "setup-ramdisk.service" ファイルを配置し、次の内容を入力する必要があります。

[Unit]
Description=Set up contents of RAM disk

[Service]
Type=oneshot
# We're going for the "extract from compressed archive" approach here,
# going for `cp -ar` would be just as valid
ExecStart=unsquashfs -d /var/www/ramdisk /var/www/disk/archive.squash

# Tell the system we need that ramdisk mount
RequiresMountsFor=/var/www/ramdisk

# Make sure that if started at the same time as a web server,
# we need to be done before the web server is started
Before=nginx.service httpd.service apache2.service

[Install]
WantedBy=multi-user.target

systemctl enable --now setup-ramdiskしたがって、(将来のリリースのために)有効にしてすぐに実行するのは非常に簡単です。また、Webサーバーの.serviceファイル(おそらく/usr/lib/systemd/system/にあります)を修正してリストを表示しますWants=setup-ramdisk.serviceAfter=setup-ramdisk.service

しかし、

アイデアが合理的で信頼できる

いいえ。 2つの理由があります。

私のアップリンク速度は(ほぼ)100Mbits / sです。

愛らしい。 SSDはこれよりはるかに速く、ランダムアクセス時間はTCP接続設定のジッタよりも短くなければならず、SSDアクセスをキャッシュするのに十分なRAMが必要です。最初ファイルが要求されると、ファイルを要求した当事者は、RAMディスクから読み取るものとSSDから直接読み取ることの違いを知ることができず、RAMを他の目的に使用しない限り、ファイルはそのまま残ります。 LinuxのRAMバッファに関係なくキャッシュされます。 RAMディスクは、必要なデータがRAMを占有する以外は何もしません。必ずしも必要ではないかもしれません

だから一つも見えない感じるこの実験では。ボトルネックは明らかにストレージではなくネットワークで発生します。そうでない場合でもRAMは十分であるため、ファイルシステムとブロックデバイスのバッファリングを介して他のソフトウェアが必要としない限り、ファイルがすでにRAMディスクにあるかのようにファイルに2番目にすばやくアクセスできます。 RAMとファイルはすでにこのバッファから削除され、空きRAMが得られます。しかし、そのような場合はそうです。悪いサーバーがRAMディスクにファイルを保存している場合、そのRAM要件が失敗するか(何らかの競合が発生した場合)、メモリ不足キラーによってシャットダウンされる(したがってシステムが不安定になる)、RAM要求は他のエントリをプッシュします。ソフトウェアとそのデータをRAMからスワップ空間に転送します。これはパフォーマンスに致命的な影響を与える可能性があります。特に、これがWebサーバーに影響を与える場合は、そうである可能性が高いです。多くの場合、ファイルを提供することはできません。今は退去を検討してください。

要約すると、次のようになります。

  1. ストレージはボトルネックが発生しないため、必要ありません。
  2. RAMキャッシュはLinux上の無料機能なので、必要ありません。実際に大量のRAMが必要な場合は有害かもしれません。

おすすめ記事