×
採用サイトはこちら

インスタンスストアをLinuxのSwap領域として使う!【前編】

インスタンスストアをLinuxのSwap領域として使う!
【前編】

目次

背景

とあるデータ分析サーバで、一時的に物理メモリおよびSwap領域全てを利用しメモリ不足に陥っていました。
物理メモリ不足を解消したいが、処理速度向上を大きく求めておらず物理メモリもこれ以上増やしたくない。
そこで、Amazon EC2で提供されるインスタンスストアをSwap領域として利用し、この問題を解決することにしました。

目的

  • LinuxのSwap領域をインスタンスストアで作成
  • サーバ起動および再起動時、Swap領域の作成およびディスクマウントの自動化

機能説明

Swap領域とは

物理メモリ不足の際、ハードディスク(ストレージ)へ一時的にデータ退避させるための仮想メモリ領域です。
ただし、ハードディスク(ストレージ)はメモリよりもアクセス速度が遅いため、Swap領域利用時はシステム全体のパフォーマンスが低下する可能性があります。
例えば「free」コマンドで、物理メモリ及びSwap領域の利用状況を確認することができます。
※以下は出力例

          total      used     free       shared  buff/cache  available
   Mem:   129663920  5363988  122391756  10712   1908176     123219788  ←物理メモリ
   Swap:  927734368        0  927734368                                 ←Swap領域
  • 簡易説明
    • total:総メモリ量 used:使用中メモリ量 free:未使用メモリ量 shared:共有使用メモリ量
    • buff/cache:buff/cache利用メモリ量 available:アプリ利用可能なメモリ量(free+buff/cache)
    • Swap:「used」が0以上ならSwap領域を使っていることになります。

インスタンスストアとは

「r6id.4xlarge」のような「d(オプション:高密度ストレージ)」が付く Amazon EC2インスタンスタイプ で
提供される揮発性の一時ブロックストレージです。
特徴として以下があります。

  • EBSよりも高いIOPS、スループット、低レイテンシーが提供され、頻繁に変更されるデータ(キャッシュやバッファ等)を扱うのに適したストレージ
  • 揮発性の一時ブロックストレージのためEC2停止⇒EC2起動時はデータが失われる
    ※EC2再起動の場合、データは保持される

設定してみよう!

構成情報

  • EC2インスタンスタイプ:r6id.4xlarge(vCPU:16、MEM:128GB、1x950GB NVMe SSD)
  • EBS:ルートボリューム用EBSのみ(100GB)
    • 注:EBSを2本以上アタッチして利用する構成は【後編】をご参照ください。
  • OS:Redhat Enterprise Linux 8系

事前準備

(事前準備の操作は、本記事では割愛させて頂きます。)

  • Amazno EC2インスタンスを「d」付きインスタンスタイプに変更
  • Linuxから既存のSwap領域を削除
  • セッションマネージャのコンソール接続 または ターミナルエミュレータからSSH接続した状態

設定の流れ

 1.LinuxからEBSデバイス名の確認
 2.Swap領域の作成
 3.Swap領域の自動マウント設定
 4.サーバ起動時にSwap領域作成設定  

設定手順

 注:作業は「#(root)」アカウントで行います。
 1.LinuxからマウントされたEBSのデバイス名を確認する。
  # lsblk -l

   NAME      MAJ:MIN  RM    SIZE  RO  TYPE  MOUNTPOINT
   nvme0n1    259:0     0    100G   0  disk             ←ルートボリューム用EBS
   nvme1n1    259:1     0  884.8G   0  disk             ←これがインスタンスストアで「nvme1n1」がデバイス名
   nvme0n1p1  259:2     0      1M   0  part
   nvme0n1p2  259:3     0    200M   0  part  /boot/efi
   nvme0n1p3  259:4     0   98.8G   0  part  /

 2.Swap領域の作成する。
 以下コマンド実行し、Swap領域を作成。
  # mkswap /dev/nvme1n1
 以下コマンド実行し、Swap領域を有効化。
  # swapon /dev/nvme1n1
  # swapon -s

   ファイル名   タイプ   サイズ    使用済み   優先順位
   /dev/nvme1n1  partition  927734368  0       -2     ←表示されていれば、Swap有効化されている

  # free

          total      used     free       shared  buff/cache  available
   Mem:   129663920  5363988  122391756  10712   1908176     123219788
   Swap:  927734368        0  927734368                                 ←Swap領域として利用可能状態

 ◆この時点で、インスタンスストアをSwap領域とし利用可能な状態ですが
  サーバの 停止⇒起動 または 再起動 を行うとSwap設定が解除状態となるため、後述の設定を施します。

 3.Swap領域を自動マウントするよう設定する。
 「/etc/cloud/cloud.cfg」ファイルの修正
  # vi /etc/cloud/cloud.cfg

   ~割愛~
   mounts:
    - [ ephemeral0, swap, swap ,"defaults", "0", "0"]          ←左記行を追記する。

  「/etc/fstab」ファイルの修正    # vi /etc/fstab

   ~最終行~
   /dev/nvme1n1  none swap sw,nobootwait,comment=cloudconfig 0 2    ←左記行を追記する。

 4.サーバ起動時に、Swap領域を作成するよう設定する。
 「/etc/rc.d/rc.local」ファイルを修正
  # vi /etc/rc.d/rc.local

   ~割愛~
   touch /var/lock/subsys/local
   mkswap /dev/nvme1n1                         ←左記行を追記する。
   swapon /dev/nvme1n1                         ←左記行を追記する。

 「/etc/rc.d/rc.local」ファイルがサーバ起動時に実行される権限を変更します。
  # chmod 755 /etc/rc.d/rc.local

動作確認

サーバ停止⇒起動後、Swap領域が作成され自動マウントされているかを確認します。
  # lsblk -l

   NAME      MAJ:MIN  RM    SIZE  RO  TYPE  MOUNTPOINT
   nvme0n1    259:0     0    100G   0  disk
   nvme1n1    259:1     0  884.8G   0  disk  [SWAP]     ←MOUNTPOINT が [SWAP]と表示されていれば成功
   nvme0n1p1  259:2     0      1M   0  part
   nvme0n1p2  259:3     0    200M   0  part  /boot/efi
   nvme0n1p3  259:4     0   98.8G   0  part  /

終わりに

【前編】では、ルートボリューム用EBS+インスタンスストア構成での設定例を記載させて頂きました。
この設定は、「/dev/nvme1n1」デバイスを決めでSwap領域として利用する設定であるため、
EBSを2本以上アタッチして利用されてしまうと正常動作しないためご注意ください。

【後編】では、上記課題であるEBSを2本以上アタッチして利用する設定例について記載します。
インスタンスストアをLinuxのSwap領域として使う!【前編】 は以上になります。

ご一読いただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

FindConsulting広報担当です。
エンジニアの皆様に向けて、技術ブログでお役立ち情報を発信しています。最新技術のトレンドや実務で使えるノウハウ、キャリア形成のヒントなど、エンジニアの皆様の成長をサポートする情報をお届けしています。
長期的に、共に成長していけるエンジニアの皆様との繋がりを心よりお待ちしております。

目次