夏休みの自由工作(2)

続・Raspberry Pi3でCephを動かす

e6zout.hatenablog.jp

2. Ceph環境の構築

  • 基本はありもののパッケージを利用する
  • まずはオブジェクトストレージの検証を第一目標にする
    • 手順についてはビットアイルのこちらの記事を多々参考にさせていただきました

    Ceph ~ブロックアクセス可能な分散ストレージ

2-1. 接続環境

  • ズレてたらごめん
    • ローカルネットワークはルータデフォルトの 192.168.10.0/24 を利用
    • IPは自宅サーバCentOS以外は明示での固定せずDHCP任せ(48Hリリースなので実質固定状態)
    • 自宅サーバのhostnameは comicsong を利用しているが以降手順の中では簡略化のため Client にて表記する
+----------------------------------+
|個人用PC(Win10),タブレット機器etc.|
+-+--------------------------------+
  |
+-+-----------------------+  +----------- ... ..  .  
|NECのブロードバンドルータ   +--+ The Internet
+-+---------------------+-+  +----------- ... ..  . 
  |                     |
+-+----------------+    |
|自宅サーバ(録画用)|    |
|Client兼Deployer  |    |
|CentOS7           |    |
+------------------+    | 
+-----------------------++
|Netgear スイッチングハブ|
+------------------------+
|  +----------------------------------------+
+--+※Ceph-node1(MON.0) OSD.0,3(各USB 128GB)|
|  +----------------------------------------+
|
|  +----------------------------------------+
+--+※Ceph-node2(MON.1) OSD.1,4(各USB 128GB)|
|  +----------------------------------------+
|
|  +----------------------------------------+
+--+※Ceph-node3(MON.2) OSD.2,5(各USB 128GB)|
|  +----------------------------------------+
|
|  +--------------------+
+--+※Ceph-node4(MDS.0) |
   +--------------------+

※4台共通で Raspberry Pi3/Ubuntu16.04

2-2. CephDeployerのインストール

  • Clinetで実行
$ sudo yum install ceph-deploy
  • バージョンは 1.5.25-1 でした
[ubuntu@comicsong ~]$ rpm -q ceph-deploy
ceph-deploy-1.5.25-1.el7.noarch
  • 各ceph-nodeに鍵配布してsshでパスなしでのログインを設定
  • ceph-deploy を実施
[ubuntu@comicsong ~]$ ceph-deploy new ceph-node1 ceph-node2 ceph-node3
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/ubuntu/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (1.5.25): /bin/ceph-deploy new ceph-node1 ceph-node2 ceph-node3
[ceph_deploy.new][DEBUG ] Creating new cluster named ceph
[ceph_deploy.new][INFO  ] making sure passwordless SSH succeeds
[ceph-node1][DEBUG ] connected to host: comicsong.jp
[ceph-node1][INFO  ] Running command: ssh -CT -o BatchMode=yes ceph-node1
[ceph-node1][DEBUG ] connection detected need for sudo
[ceph-node1][DEBUG ] connected to host: ceph-node1
[ceph-node1][DEBUG ] detect platform information from remote host
[ceph-node1][DEBUG ] detect machine type
[ceph-node1][DEBUG ] find the location of an executable
[ceph-node1][INFO  ] Running command: sudo /bin/ip link show
[ceph-node1][INFO  ] Running command: sudo /bin/ip addr show
[ceph-node1][DEBUG ] IP addresses found: ['192.168.10.7']
[ceph_deploy.new][DEBUG ] Resolving host ceph-node1
[ceph_deploy.new][DEBUG ] Monitor ceph-node1 at 192.168.10.7
[ceph_deploy.new][INFO  ] making sure passwordless SSH succeeds
[ceph-node2][DEBUG ] connected to host: comicsong.jp
[ceph-node2][INFO  ] Running command: ssh -CT -o BatchMode=yes ceph-node2
[ceph-node2][DEBUG ] connection detected need for sudo
[ceph-node2][DEBUG ] connected to host: ceph-node2
[ceph-node2][DEBUG ] detect platform information from remote host
[ceph-node2][DEBUG ] detect machine type
[ceph-node2][DEBUG ] find the location of an executable
[ceph-node2][INFO  ] Running command: sudo /bin/ip link show
[ceph-node2][INFO  ] Running command: sudo /bin/ip addr show
[ceph-node2][DEBUG ] IP addresses found: ['192.168.10.8']
[ceph_deploy.new][DEBUG ] Resolving host ceph-node2
[ceph_deploy.new][DEBUG ] Monitor ceph-node2 at 192.168.10.8
[ceph_deploy.new][INFO  ] making sure passwordless SSH succeeds
[ceph-node3][DEBUG ] connected to host: comicsong.jp
[ceph-node3][INFO  ] Running command: ssh -CT -o BatchMode=yes ceph-node3
[ceph-node3][DEBUG ] connection detected need for sudo
[ceph-node3][DEBUG ] connected to host: ceph-node3
[ceph-node3][DEBUG ] detect platform information from remote host
[ceph-node3][DEBUG ] detect machine type
[ceph-node3][DEBUG ] find the location of an executable
[ceph-node3][INFO  ] Running command: sudo /bin/ip link show
[ceph-node3][INFO  ] Running command: sudo /bin/ip addr show
[ceph-node3][DEBUG ] IP addresses found: ['192.168.10.9']
[ceph_deploy.new][DEBUG ] Resolving host ceph-node3
[ceph_deploy.new][DEBUG ] Monitor ceph-node3 at 192.168.10.9
[ceph_deploy.new][DEBUG ] Monitor initial members are ['ceph-node1', 'ceph-node2', 'ceph-node3']
[ceph_deploy.new][DEBUG ] Monitor addrs are ['192.168.10.7', '192.168.10.8', '192.168.10.9']
[ceph_deploy.new][DEBUG ] Creating a random mon key...
[ceph_deploy.new][DEBUG ] Writing monitor keyring to ceph.mon.keyring...
[ceph_deploy.new][DEBUG ] Writing initial config to ceph.conf...
  • 設定ファイルが作成された
    • 何処に作られるのかなと探したがまさかの実行ディレクトリだった
[ubuntu@comicsong ~]$ pwd
/home/ubuntu
[ubuntu@comicsong ~]$ cat ceph.conf
[global]
fsid = 37164a6b-7187-4ba7-8b3f-4eccc58a9cf0
mon_initial_members = ceph-node1, ceph-node2, ceph-node3
mon_host = 192.168.10.7,192.168.10.8,192.168.10.9
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
filestore_xattr_use_omap = true
  • ceph-deploy install を実施
$ ceph-deploy install ceph-node1 ceph-node2 ceph-node3 ceph-node4
  • ceph-deploy mon create-initial を実施
$ ceph-deploy mon create-initial
  • ここで問題発生。対象で sudo initctl emit ceph-mon cluster=ceph id=ceph-node1 を実施する箇所でエラー出る
  • 実行される各nodeは initctl じゃなくて systemd だからね…
[ceph-node1][INFO  ] Running command: sudo initctl emit ceph-mon cluster=ceph id=ceph-node1
[ubuntu@comicsong ~]$ wget http://download.ceph.com/rpm/el7/noarch/ceph-deploy-1.5.34-0.noarch.rpm
.
.
.
`ceph-deploy-1.5.34-0.noarch.rpm' に保存中

100%[=========================================================================>] 288,604     95.8KB/s 時間 2.9s

2016-08-16 16:48:37 (95.8 KB/s) - `ceph-deploy-1.5.34-0.noarch.rpm' へ保存完了 [288604/288604]

[ubuntu@comicsong ~]$ rpm --test -Uvh ceph-deploy-1.5.34-0.noarch.rpm
警告: ceph-deploy-1.5.34-0.noarch.rpm: ヘッダー V4 RSA/SHA1 Signature、鍵 ID 460f3994: NOKEY
準備しています...              ################################# [100%]
[ubuntu@comicsong ~]$ sudo rpm -Uvh ceph-deploy-1.5.34-0.noarch.rpm
警告: ceph-deploy-1.5.34-0.noarch.rpm: ヘッダー V4 RSA/SHA1 Signature、鍵 ID 460f3994: NOKEY
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:ceph-deploy-1.5.34-0             ################################# [ 50%]
整理中 / 削除中...
   2:ceph-deploy-1.5.25-1.el7         ################################# [100%]
  • 旧バージョンで作成されたconfを削除しておく
rm ceph.conf
  • newからやり直す
$ ceph-deploy new ceph-node1 ceph-node2 ceph-node3
$ ceph-deploy install ceph-node1 ceph-node2 ceph-node3 ceph-node4
  • 続く

e6zout.hatenablog.jp

夏休みの自由工作(1)

Raspberry Pi3でCephを動かす

  • 会社の仕事でCephをバックエンドストレージとして検証する必要が出た
    • Cephについてはさわり程度しか扱ったことは無い
    • 夏季休業中の間に最低限の知見は獲たい
  • ただVMで立ち上げるだけでは味気ない
    • いっそ変な環境でやろうぜと出来るかどうか調べる前にラズパイに手を出した

1. 準備編

  • Cephのデータノードを置くサーバを準備する

1-1. 購入

  • 当初は価格差と電源要求の緩さからRaspberry Pi2 Bを予定していた

    • 10日に秋葉原でさまよったが秋月は当日丁度休業日
    • 他の空いている店は軒並み2は扱っていないか品切れ
  • 諦めかけたが色々落ち込む事があった13日に半ば自棄、半ばストレス解消でamazonで一式購入

    f:id:uyT4vEne:20160815210709p:plain

  • Raspberry Pi3 B 4個

    • システム領域用のMicroSDHD 32GB 4枚
    • ストレージ領域用の128GB USBメモリ6本(3ノードに2本ずつ装着)
    • 画面には映ってないけれど整列用のアクリルケース
  • 給電用のUSB電源アダプタ1個

  • ポートが足りないのでノンインテリなスイッチ

    • 接続用LANケーブル4本
  • 自宅Linux環境はSDHD読めないのでそのUSBリーダライタ

  • 作業時用のUSB有線キーボードが無かったので有線キーボード

  • 仮に出来上がってもその値段で買えるものから大きく劣るスペック。無駄遣いにも程がある

    • でももっと給料がよければネットワークの勉強用にスイッチをインテリにしてたと思います

1-2. OSの準備

  • 結果から言えば問題なく、懸念していたSDカードの相性問題も出なかった

    • が、結果以外の経緯についてはそれなりに苦労したためメモする
  • 前述のとおり、当初はラズパイ2の予定だった

    • そのため事前に参考にしていたubuntu ラズパイ2の検索で出てくるこの記事を参考に行った

    gihyo.jp

  • 記事内の手順を随時自分の環境+Pi3に置き換えてインストールを試した

    • ブートローダの書き込みで上手くいってないのか電源は入るもののブートシークエンスが開始されず
    • 記事内のchroot周りではqemu-arm-staticパッケージがCentOS7では見つからずchroot出来ず
    • qemu-arm-staticを自前makeするか、作業用のubuntuVMでも用意するかとか考えてたら…
  • 公式のドキュメントでも探そうかと思ったら普通にパッケージが置いてあった

    • この手順通りに作業し、冒頭でも書いた通り無事インストールが出来た
    • 16.04を選択。またGUIは今回必要ないのでOptional系の手順は実施せず

    ARM/RaspberryPi - Ubuntu Wiki

  • ネットワークも深く考慮せずにDHCPでIP付与、自宅のネットワークと特に切り分けはしない

  • SDHDの書き込み速度が遅く、焼きながら並行してOS起動したPi3の初期設定などを行っていた

    f:id:uyT4vEne:20160815214909p:plain

1-3. 配線と組み立て

  • 全台仮接続を行い起動と疎通が確認が取れたので一旦全台起動のまま放置

  • この時点ではケースのみ到着していなかったため14日はここまで

  • 日が明けて15日、早い時間にケースが届いたので装着しつつケーブリング

    • 幸いケースが起動したままでの作業が可能な形式だったため起動したまま作業
    • ケーブリングはいうに及ばず
  • 最終的にはこんな外見で落ち着きました。初日に比べるとだいぶすっきり

    f:id:uyT4vEne:20160815215024p:plain

  • 準備編はここまで、次回はCephインストール編を予定しています

e6zout.hatenablog.jp

続・sandisk SDCZ48-128Gベンチマーク

前回のあらすじ

環境準備

  • パーテションを再作成
[comicsong@comicsong ~]$ umount /mnt/USB/
umount: /mnt/USB: umount failed: 許可されていない操作です
[comicsong@comicsong ~]$ sudo umount /mnt/USB/
[comicsong@comicsong ~]$ sudo parted /dev/sdc
GNU Parted 3.1
/dev/sdc を使用
GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。
(parted) p
モデル: SanDisk Ultra (scsi)
ディスク /dev/sdc: 124GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始    終了   サイズ  ファイルシステム  名前   フラグ
 1    1049kB  124GB  124GB   ext4              OSD01

(parted) rm 1
(parted)
(parted) p
モデル: SanDisk Ultra (scsi)
ディスク /dev/sdc: 124GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始  終了  サイズ  ファイルシステム  名前  フラグ

(parted) mkpart OSD01 0% 100%
(parted) p
モデル: SanDisk Ultra (scsi)
ディスク /dev/sdc: 124GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始    終了   サイズ  ファイルシステム  名前   フラグ
 1    1049kB  124GB  124GB   ext4              OSD01

(parted) q
通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。
[comicsong@comicsong ~]$ sudo mkfs.ext4 /dev/sdc1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
7585792 inodes, 30326272 blocks
1516313 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2178940928
926 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
  • マウントしてテスト環境づくり
[comicsong@comicsong ~]$ mount -t ext4 -o noatime /dev/sdc1 /mnt/USB
mount: only root can use "--options" option
[comicsong@comicsong ~]$ sudo mount -t ext4 -o noatime /dev/sdc1 /mnt/USB
[comicsong@comicsong ~]$ cd /mnt/USB/
[comicsong@comicsong USB]$ sudo mkdir fio
[comicsong@comicsong USB]$ cd fio/
[comicsong@comicsong fio]$ sudo vim fio.sh
[comicsong@comicsong fio]$ sudo chmod +x fio.sh
[comicsong@comicsong fio]$ sudo ./fio.sh

fio.sh

  • 基本的には冒頭に貼った昨日のテストと同一
    • ブレが大きかったため実行時間を60秒から180秒に延長している
#!/bin/bash

fio --size=30m --numjobs=4 --iodepth=8 --time_based --runtime=180 --overwrite=1 --ioengine=libaio --bs=4k --group_reporting --direct=1 --name=test --rw=read | grep iops=
fio --size=30m --numjobs=4 --iodepth=8 --time_based --runtime=180 --overwrite=1 --ioengine=libaio --bs=4k --group_reporting --direct=1 --name=test --rw=write | grep iops=
fio --size=30m --numjobs=4 --iodepth=8 --time_based --runtime=180 --overwrite=1 --ioengine=libaio --bs=4k --group_reporting --direct=1 --name=test --rw=randread | grep iops=
fio --size=30m --numjobs=4 --iodepth=8 --time_based --runtime=180 --overwrite=1 --ioengine=libaio --bs=4k --group_reporting --direct=1 --name=test --rw=randwrite | grep iops=

結果

  • 上からSeqRead,SeqWrite,RandRead,RandWriteの順
  read : io=4435.7MB, bw=25233KB/s, iops=6308, runt=180004msec
  write: io=750344KB, bw=4166.4KB/s, iops=1041, runt=180097msec
  read : io=538688KB, bw=2991.2KB/s, iops=747, runt=180043msec
  write: io=231164KB, bw=1212.4KB/s, iops=303, runt=190682msec
  • 比較用に昨日の
  read : io=882528KB, bw=14707KB/s, iops=3676, runt= 60009msec
  write: io=627904KB, bw=10463KB/s, iops=2615, runt= 60010msec
  read : io=158516KB, bw=2639.8KB/s, iops=659, runt= 60050msec
  write: io=109504KB, bw=1823.2KB/s, iops=455, runt= 60064msec
  • 繰り返し試したところSeqWriteのiopsは3000程度まで出ることがあったが全体の最高値としては上記のSeqReadの6308だった
  • Raspiのメモリ量を考慮してベンチマークファイルのサイズ小さすぎたのが悪かったようで
    • その後ファイルサイズを500MB,1job/32QD で試したところ公称値に近い値が出た
  read : io=8215.3MB, bw=93470KB/s, iops=23367, runt= 90001msec
  • しかしランダム系テスト項目については大きく変わらず

まとめ

  • Read系はスコア向上したがWrite系は下落。調子いいSeqReadでも25MB/sと公称値の1/4
  • 相変わらずRand系が弱く安定しない
  • Win系での利用が前提なのかしらんし、公式ページの下に注釈あるけれど up to 100MB/s は盛りすぎでは?
    • SeqReadスペシャルなIO傾向なので一度入れたらあとは読むだけな写真などには適していそう