Raspberry Pi 運用・管理
Raspberry Pi 4 nginx Reverse Proxy Server
USB接続の SSD化によるディスクアクセス速度の向上
Raspberry Pi 4 + nginx で構築した Reverse Proxy Server は、Proxyキャッシュの読み書きで microSDカード を酷使している。
Reverse Proxy と その配下の全ての Webサーバー をSSD化した。
以下、MicroSDカードの寿命対策と処理速度の向上を目的に、SSD化を図った記録。
1. SSD化を行う目的とSSD化の方法
Reverse Proxy System の稼働環境。
nginx で構築した『Reverse Proxy Server』の下で、『nginx + wordpress』の Webサーバー【ドメイン別・3台】を運用している。
SSD化の目的。
処理速度の向上。(特に、キャッシュの読み書き。)
USB接続のSSDで動かすと、一桁以上のディスクアクセス速度の向上が見込めるらしい。→ この後、キャッシュをRAM化した。
Raspberry Pi 4 に於けるUSB起動の状況。
■ラズパイ3B、3B+では、マイクロSDレスでUSBブートできる。
■ラズパイ4は、マイクロSDレスでのUSBブートはサポートされていない。
■Raspberry Pi OS 64bit beta では、USB Boot が既に組み込まれている。
Raspberry Pi 4 現状での、SSD化の方法。
案A:microSDカードをブートローダとして使う方式 rootをSSDへコピーする。
案B:EEPROMのブートローダを書き換える方式 Raspberry Pi 4ではボード上にEEPROMが装備されており、この中に bootloaderが格納されているので、これを書き換えて起動できるようにする。
今回は
案Aの、「SD Card Copier」による、
rootをSSDにコピーする方式を採用し、microSDカードはブートローダとして残した。
SSD化を行うに最適な環境
本番稼働を止めないでSSD化を行う為に、
『テスト環境』の Raspberry Pi 4 で、SSD化の作業を実施。
①.本番稼働中の Reverse Proxy の SDカードのコピーを作成。
②.『テスト環境』のRaspberry Pi 4 を停止し、LANケ-ブルを抜く。
③.本番稼働中の Reverse Proxy でコピーしたSSDを挿して起動。
④.rootをSSDにコピー。
⑤.起動情報を変更する。
こうすると、『本番環境と同じIPアドレス』で作業ができ、SSD化が完了した時点で、LANケ-ブルを差し替えるだけで、即、本番移行が可能になる。
※:SSD化した【microSDカード】と【SSD】を、『他の Raspberry Pi』に移設しても動作しない。
2. SSDの準備
Raspberry Pi 4のUSB端子は電源が弱いため、SSDの接続には、
「セルフパワーの USB HUB」を使用するか、
「電源アダプター付の SATA - USB3.0変換アダプタ」が、
必要である。
今回利用したSSDと、電源アダプター付の SATA - USB3.0変換アダプタ。
参考:下記の変換アダプタで、USB用のコネクタをUSB3.0に挿し、電源供給用のコネクタをUSB2.0に挿して使用してもOKだった。
※:変換アダプタやSSDのモデルによっては・・・
USBに、マウスやキーボードを接続すると、
・デスクトップにカミナリ印が表示される。
・"Under-voltage detected!"とのメッセージが表示される。
・赤い電源のLEDが消えたり点いたりする。
↓
どうやら電力不足になるようで、
マウスやキーボードを外せば、ギリギリ動く。
Raspberry Pi に接続するSSDの条件。
①.パーティション形式:MBR
②.ファイルシステム:EXT4
MBR ディスクへの変換。
SSDが GPT ディスコの場合、コントロールパネルの「管理ツール」→「コンピューターの管理」→「ディスクの管理」で、左端のディスク名を右クリックして、【MBR ディスクへの変換】を行う。
EXT4 パーティションの作成要領
「AOMEI Partition Assistant Standard」で、SSDを選択して右クリックし「パーティションを作成」を選択。
ファイルシステムのプルダウンメニューから、「EXT4」を選択する。
画面左上の、「適用」をクリックする。
「パーティションを作成」の確認画面になるので、「続行」をクリックする。
「はい」をクリックする。
「パーティションを作成」が完了。
EXT4 でのフォーマット要領
「AOMEI Partition Assistant Standard」で、SSDを選択して右クリックし「パーティションのフォーマット」を選択。
ファイルシステムのプルダウンメニューから、「EXT4」を選択する。
画面左上の、「適用」をクリックする。
「パーティションをフォーマット」の確認画面になるので、「続行」をクリックする。
「パーティションをフォーマット」が完了。
SSD化用の microSDカードについて
SSD化用の microSDカード。
容量は小さくて良く、且つ、スピードも求められないので、
本番で稼働中の 64GB を 32GB のものに縮小コピーして利用した。
「SD Card Copier」を使用すれば、
容量が 64GB の microSDカードから 32GB の microSDカードに、
縮小コピーが可能。
microSDカードは、本番で稼働中のものをコピーして使用。
本番で稼働中の microSDカードは、バックアップ用として残しておく。
参考:
3. 「SD Card Copier」によるSSDへのコピー
raspberry pi 4 の、USBに接続されたストレージに、rootをコピーする
Raspberry Pi 4 のUSBにSSDを接続すると、「リムーバルメディアが挿入されました」の画面が表示される。
「アクセサリ」にある「SD Card Copier」を起動する。
Copy From Device(コピー元)に【microSDカード】を選択し、Copy To Device(コピー先)に【SSD】を選択して、且つ、「
New Partition UUIDs」にチェックを入れて「Start」をクリックする。
確認メッセージに【SSD名】が表示されるので、「Yes」をクリックする。
「Copy complete.」が表示されて完了。「OK」をクリックして、SD Card Copierを終了する。
4. 起動情報の変更
Linuxのカーネルロードを、【microSDカード】から【SSD】に変更する
メニューバーから「LXTerminal」を起動する。
「LXTerminal」で、blkid(UUIDに対応するディスクパーティションの確認)コマンドを入力する。
sudo blkid
【microSDカード】の『
PARTUUID』と、【SSD】の『
PARTUUID』が表示される。
画面を開いたまま、もう一つ「LXTerminal」を起動する。
2つ目の「LXTerminal」で、【cmdline.txt】ファイルを編集する。
sudo mousepad /boot/cmdline.txt
【cmdline.txt】の中に記述されている
「PARTUUID=」を、【microSDカード】の『PARTUUID』から、【SSD】の『PARTUUID』に変更する。
Raspbian のブートプロセス
1.ROM内のルーチンが、ブートパーティションから【bootcode.bin】を読み込んで実行する。
2.【bootcode.bin】が、ブートパーティションから【loader.bin】を読み込んで実行する。
3.【loader.bin】が、ブートパーティションから【start.elf】を読み込んで実行する。
4.【start.elf】が、Linuxカーネルをロードして実行する。
■ ブートパーティションにある「config.txt」に基づいてデバイスを設定する
■ 「config.txt」の 'kernel=' 行に指定されたLinuxカーネルをロードして実行する。
■ その際に、ブートパーテイションにある「cmdline.txt」の内容が、カーネルコマンドオプションとして与えられる。
「cmdline.txt」のオプション
root=PARTUUID=ea7d04d6-02 → [KNL] Root filesystem
rootfstype=ext4 → [KNL] Set root filesystem type
この他に、CPUシリアル番号、MACアドレス、デイスプレイの解像度など多くのパラメータがあり、『他の Raspberry Pi』に【microSDカード】と【SSD】を移設すると動作しない。
PARTUUID とは
パーティションを識別するためのUUID。
MBRパーティションテーブルの場合、ディスク識別子とパーティション番号を連結することにより形成される。
サンプル:ea7d04d6-02
UUID(Universally Unique Identifier) とは
オブジェクトを一意に識別するための識別子で、これを使ってUSBデバイスのSSDを特定している。
サンプル:ea7d04d6-02
5. 再起動と確認
再起動すると、デスクトップに MicroSDカードの中身の「boot」と「rootfs」のアイコンが表示されるようになる。
ディスク情報を確認する。
df -h
yaopi@Reverse-Proxy:~ $ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/root 228G 9.0G 208G 5% /
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 2.0G 8.6M 1.9G 1% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
tmpfs 32M 4.0K 32M 1% /tmp
tmpfs 16M 0 16M 0% /var/tmp
/dev/sda1 253M 53M 200M 21% /boot
tmpfs 391M 0 391M 0% /run/user/1001
/dev/mmcblk0p2 29G 8.9G 19G 32% /media/yaopi/rootfs
/dev/mmcblk0p1 253M 53M 200M 21% /media/yaopi/boot
黄色の部分:/dev/root のサイズが SSDの 228G になっている。
水色の部分:元のMicroSDのマウントポイント。
I/O統計情報 sysstat のインストール。
sudo apt-get install sysstat
I/O統計情報
iostat の実行結果。
【microSDカード】へのアクセスが無くなり、【SSD】での R/W になった。
又、他のサーバーの【microSDカード】と比べると、 R/W 速度が格段に向上した。
処理速度の向上
効果。
①.PageSpeed Insights での評価スコアが上がった。
②.同時アクセス数が増加した。
『PageSpeed Insights』における、評価スコアの変化。
Google Map 表示 & 画像が多いサイト:【パソコン】が「67」から「84」に、「
17」ポイント上がった。
Google Map の表示が無いサイト:【モバイル】が「65」から「91」に、「
26」ポイント上がった。
SSD化の結果
SSD化を行った結果は、今迄の対策の中で最も効果が大きく、
大正解だった。
WordPressは体感できるほど早くなり、
一度により沢山のリクエストが捌けるようになった。
6. SSD化後のバックアップ
A:SSDから、B:microSDカードへのバックアップ要領。
バックアップ用のmicroSDカード。
Raspberry Piが起動できる状態のもの。
SSD化前の、microSDカードが望ましい。
microSDカードを、USBに挿したときのデバイス一覧(
lsblk)。
「SD Card Copier」で、コピー元にSSDを選択し、コピー先にバックアップ用のmicroSDカードを指定する。「
New Partition UUIDs」にはチェックを入れない。
これでコピーした「microSDカード」を使用すれば、「microSDカード」のみで起動し、問題なく稼働する。
Reverse Proxy と WebサーバーのすべてをSSD化
参考:
以上。
(2020.08.03)