Raspberry PiにUSBハードディスクドライブを接続する

コンピュータ関連のことを、出来る時に、出来ることだけ。
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
前回Raspberry Piにwordpressをインストールしましたが、パフォーマンスが非常に悪いので、改善を試みます。

wordpress使用中にtopを表示させると、ページ更新するたびにiowaitが100%近くまで上昇していて、ディスクIOがボトルネックになっているようです。さすがにSDカードでDBMSのIOを処理するのは辛そうなので、USBハードディスクドライブを接続し、データベースのデータファイルをそこに置くようにしてみました。

mariadbの設定(/etc/my.cnf)を確認すると、データ関連のファイルはデフォルトで/var/配下に保存される設定になっていました。
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

wordpressも/var/www/wordpress配下に配置していますし、各種ログも/var/log配下に出力されることを考えて、USBハードディスクを/varにマウントすることにします。

Ansibleのplaybookを以下のように修正します。

1:---
2:- hosts: <ホスト名>
3: sudo: yes
4: vars_files:
5: - vars/vars.yml
6: tasks:
7:
8: - name: ls /dev/disk/by-uuid
9: command: ls -la /dev/disk/by-uuid
10: register: ls_result
11:
12: - debug: var=ls_result.stdout_lines
13: when: ls_result
14:
15: - pause: prompt="Device UUID?"
16: register: devuuid
17:
18: - name: Mount the New Device
19: shell: mount -t ext4 "UUID={{ devuuid.user_input }}" /media
20: when: devuuid.user_input != ""
21:
22: - name: Copy /var Data
23: shell: creates=/media/log/messages cp -rf /var/* /media/
24: when: devuuid.user_input != ""
25:
26: - name: Unmount the New Device
27: shell: umount /media
28: when: devuuid.user_input != ""
29:
30: - name: Mount the new device, add the fstab configuration
31: mount: name=/var src='UUID="{{ devuuid.user_input }}"' fstype=ext4 state=mounted
32: when: devuuid.user_input != ""
33:
34: - name: Install the relevant package yum
35: yum: pkg={{ item }} state=present
36: with_items:
37: - httpd
38: - php
39: - mariadb
40: - mariadb-server
41: - php-mysql
42: - MySQL-python
43:
44: - name: Enable the relevant services
45: service: name={{ item }} state=started enabled=yes
46: with_items:
47: - httpd
48: - mariadb
49:
50: - name: Root user password setting
51: mysql_user: name=root password={{ db_root_password }} state=present
52:
53: - name: Place a my.cnf
54: template: src=my.cnf.j2 dest=/root/.my.cnf mode=0600
55:
56: - name: Remove a test database
57: mysql_db: name=test state=absent
58:
59: - name: Remove anonymous user
60: mysql_user: name='' state=absent
61:
62: - name: Remove remote users
63: mysql_user: name='' host=pidora.local state=absent
64: mysql_user: name=root host=pidora.local state=absent
65:
66: - name: Create a new database
67: mysql_db: name=wordpress state=present
68:
69: - name: Create User for Wordpress
70: mysql_user: name=wordpress password={{ db_wpuser_password }} priv=wordpress.*:ALL,GRANT state=present
71:
72: - name: Expand the wordpressarchive file
73: unarchive: copy=yes src=wordpress-4.2.2-ja.zip dest=/var/www/html/
74:
75: - name: Copy the configuration file
76: copy: src=wp-config.php dest=/var/www/html/wordpress/



前回から8行~32行を追加しました。その他の変更はありません。USBハードディスクは予めext4でフォーマットしています。

[8-13行目]
USBデバイスを複数接続した場合、起動ごとにデバイス名が変わってしまうことがあるため、デバイスはUUIDで指定するようにしました。リモートホスト上でコマンド「ls」を実行させて、その結果を表示します。

9行目→command:でlsコマンド実行。UUIDを確認するため/dev/disk/by-uuidを表示します。
10行目→register:で変数に結果を保存
12行目→debug:で表示

[15-16行目]
プロンプトを表示してユーザーからの入力をまちます。ユーザがUUIDを入力してEnterキーを押すと、register:の変数に入力値を保存します。

[18-20行目]
shell:でリモートホスト上でmountコマンドを実行して、/mediaにUSBハードディスクをマウントします。

ポイントは16行目のregister:で保存されるのは単純に入力した値ではなく、変数名、保存時間などの各種パラメータを含むオブジェクトであることです。入力した値そのものを取得したい場合は、変数名のdevuuidだけでなく、devuuid.user_inputを指定する必要があります。

また、このあたりの処理は2回目以降は実行する必要がないので、when:でdevuuidの値が空白ならコマンドを実行させないようにしました。

[22-24行目]
/var配下のファイルを/mediaにコピーします。コピー済みの場合は実行しないよう、念のためcreate=/media/log/messagesを追加しました。この場合/media/log/messagesが存在する場合は、コマンドは実行されません。
また、command:ではなくshell:を使っているのは、commandではワイルドカード(*)が使用できなかったためです。

[26-28行目]
/mediaをアンマウントします。

[30-32行目]
mount:で/varにUSBハードディスクをマウントします。これが便利で、マウントしたうえ、/etc/fstabに追記してくれる優れものです。

一旦SDカードをwordpressインストール前の状態に戻してからRaspberry Piを起動し、Playbookを実行すると、無事にUSBハードディスクが/varにマウントされて、そこにデータファイルが配置されました。

さっそくWordpressの管理画面を開いてみると、若干パフォーマンスが上昇しましたが、まだ遅い..
topを見ると、iowaitは上がらなくなりましたが、userの使用率が100%近くまで上がっていて、httpdプロセスが主に使用していました。次はapacheのチューニングを行ってみます。
スポンサーサイト
この記事へのコメント
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
この記事のトラックバックURL
http://fukushimaya2.blog103.fc2.com/tb.php/35-bb882195
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック

 | Copyright © ふたごパパのサーバ構築日記 All rights reserved. | 

 / Template by 無料ブログ テンプレート カスタマイズ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。