6. S3QLについて
• S3QL is a file system that stores all its data online using storage services
like Google Storage, Amazon S3, or OpenStack. S3QL effectively provides a
hard disk of dynamic, infinite capacity that can be accessed from any
computer with internet access.
• S3QL is a standard conforming, full featured UNIX file system that is
conceptually indistinguishable from any local file system. Furthermore,
S3QL has additional features like compression, encryption, data de-
duplication, immutable trees and snapshotting which make it especially
suitable for online backup and archival.
2016/5/14
JAWS-UGアーキテクチャ専門支部ハイブリッドクラウド
分科会CDP議論会#5
6
7. S3QLの利用例
• オンプレミスからクラウドストレージをデータのバックアップ領域などに利用。
• “リフト・アップ”したのとき、EC2インスタンス上のデータのバックアップ
領域などに利用。
– 直接マウントして書き出しができますが、十分なキャッシュ領域を確保しな
いと性能が出ないため、相応の作業領域が必要です。
– バケット上のオブジェクトとして参照する必要がなければ有効でしょう。
– ローカルキャッシュは書き込みでも使用されるため、s3fsよりは速いです。
(write-back)
– たとえば、
– MySQLのInnoDB データをXtraBackupでインクリメンタルバックアップする。
→ それ RDS Restore to Point in Time で、できるよね。
“リフト・アンド・シフト”で、リファクタするときには、
そのように変更するのが良いでしょう。
2016/5/14
JAWS-UGアーキテクチャ専門支部ハイブリッドクラウド
分科会CDP議論会#5
7
9. mkfs.s3ql
# /usr/local/bin/mkfs.s3ql s3://s3ql-‐
bucket
Enter backend login:
Enter backend passphrase:
_do_request(): redirected to bucket.s3-‐
region.amazonaws.com
Before using S3QL, make sure to read the
user's guide, especially
the 'Important Rules to Avoid Loosing
Data' section.
_do_request(): redirected to bucket.s3-‐
region.amazonaws.com
Enter encryption password:
Confirm encryption password:
Generating random encryption key...
Creating metadata tables...
Dumping metadata...
Dumping metadata...
..objects..
..blocks..
..inodes..
..inode_blocks..
..symlink_targets..
..names..
..contents..
..ext_attributes..
Compressing and uploading metadata...
Wrote 150 bytes of compressed metadata.
Cycling metadata backups...
Backing up old metadata...
Please store the following master key in a
safe location. It allows
decryption of the S3QL file system in case
the storage objects holding
this information get corrupted:
-‐-‐-‐BEGIN MASTER KEY-‐-‐-‐
XXXXXXXXX
-‐-‐-‐END MASTER KEY-‐-‐-‐
2016/5/14
JAWS-UGアーキテクチャ専門支部ハイブリッドクラウド
分科会CDP議論会#5
9
11. mount
# mkdir -‐p /var/lib/s3ql/cache
# mkdir -‐p /s3/s3ql-‐fs
# /usr/local/bin/mount.s3ql -‐-‐cachedir /var/lib/s3ql/cache s3://s3ql-‐
bucket /s3/s3ql-‐fs
Using 2 upload threads.
Autodetected 4058 file descriptors available for cache entries
_do_request(): redirected to 3ql-‐bucket.s3-‐ap-‐northeast-‐1.amazonaws.com
_do_request(): redirected to 3ql-‐bucket.s3-‐ap-‐northeast-‐1.amazonaws.com
Using cached metadata.
Setting cache size to 4503 MB
Mounting s3://s3ql-‐bucket/ at /s3/s3ql-‐fs...
2016/5/14
JAWS-UGアーキテクチャ専門支部ハイブリッドクラウド
分科会CDP議論会#5
11
12. umount
umount するとキャッシュがフラッシュされデータアップロードの分、時間がかかります。
# cd /
# time /usr/local/bin/umount.s3ql /s3/s3ql-‐fs
/usr/local/bin/umount.s3ql /s3/s3ql-‐fs 0.19s user 0.04s system 0% cpu
1:15.81 total
変更がないときはすぐに umount が終了します。
# /usr/local/bin/mount.s3ql -‐-‐cachedir /var/cache/s3ql s3://s3ql-‐bucket
/s3/s3ql-‐fs
# cd /
# time /usr/local/bin/umount.s3ql /s3/s3ql-‐fs
/usr/local/bin/umount.s3ql /s3/s3ql-‐fs 0.16s user 0.04s system 8% cpu
2.308 total
2016/5/14
JAWS-UGアーキテクチャ専門支部ハイブリッドクラウド
分科会CDP議論会#5
12
13. 速度比較
ローカル
% time dd if=/dev/urandom of=test bs=64k
count=1000
1000+0 records in
1000+0 records out
65536000 bytes (66 MB) copied, 6.11013 s,
10.7 MB/s
dd if=/dev/urandom of=test bs=64k
count=1000 0.00s user 6.03s system 98%
cpu 6.111 total
% time dd if=/dev/urandom of=test bs=64k
count=10000
10000+0 records in
10000+0 records out
655360000 bytes (655 MB) copied, 62.6933 s,
10.5 MB/s
dd if=/dev/urandom of=test bs=64k
count=10000 0.01s user 60.09s system 95%
cpu 1:02.70 total
S3QL
# cd /s3/s3ql-‐fs
# time dd if=/dev/urandom of=test bs=64k
count=1000
1000+0 records in
1000+0 records out
65536000 bytes (66 MB) copied, 7.31893 s,
9.0 MB/s
dd if=/dev/urandom of=test bs=64k
count=1000 0.00s user 6.10s system 83%
cpu 7.336 total
# time dd if=/dev/urandom of=test bs=64k
count=10000
10000+0 records in
10000+0 records out
655360000 bytes (655 MB) copied, 121.856 s,
5.4 MB/s
dd if=/dev/urandom of=test bs=64k
count=10000 0.01s user 61.25s system 42%
cpu 2:25.42 total
2016/5/14
JAWS-UGアーキテクチャ専門支部ハイブリッドクラウド
分科会CDP議論会#5
13
14. ファイルツリーのコピー
# /usr/local/bin/mount.s3ql -‐-‐cachedir /var/cache/s3ql s3://s3ql-‐
bucket /s3/s3ql-‐fs
# time mkdir /s3/s3ql-‐fs/test-‐dir
mkdir /s3/s3ql-‐fs/test-‐dir 0.00s user 0.00s system 5% cpu 0.018
total
# time cp -‐r /boot /lib/modules /s3/s3ql-‐fs/test-‐dir/
cp -‐r /boot /lib/modules /s3/s3ql-‐fs/test-‐dir/ 0.01s user 0.18s
system 2% cpu 7.180 total
# time du -‐sk /s3/s3ql-‐fs/test-‐dir/
53631 /s3/s3ql-‐fs/test-‐dir/
du -‐sk /s3/s3ql-‐fs/test-‐dir/ 0.00s user 0.01s system 4% cpu 0.310
total
2016/5/14
JAWS-UGアーキテクチャ専門支部ハイブリッドクラウド
分科会CDP議論会#5
14
15. ツリーの削除やコピー
rm -r ディレクトリ より s3qlrm ディレクトリ を使用しましょう。(効率がよい)
rm -r の場合
# time rm -‐r /s3/s3ql-‐fs/test-‐dir/
rm -‐r /s3/s3ql-‐fs/test-‐dir/ 0.00s user 0.03s system 0% cpu 7.071 total
# time /usr/local/bin/umount.s3ql /s3/s3ql-‐fs
/usr/local/bin/umount.s3ql /s3/s3ql-‐fs 0.14s user 0.05s system 11% cpu
1.701 total
s3qlrm の場合
# time s3qlrm /s3/s3ql-‐fs/test-‐dir
s3qlrm /s3/s3ql-‐fs/test-‐dir 0.14s user 0.01s system 30% cpu 0.489 total
# time /usr/local/bin/umount.s3ql /s3/s3ql-‐fs
/usr/local/bin/umount.s3ql /s3/s3ql-‐fs 0.16s user 0.03s system 11% cpu
1.698 total
ファルシステム内でのコピー
s3qlcp source target を使えば効率的に処理が行われます。
2016/5/14
JAWS-UGアーキテクチャ専門支部ハイブリッドクラウド
分科会CDP議論会#5
15
16. cp –rとrm –r の 速度
# time cp -‐r /boot /lib/modules /s3/s3ql-‐fs/test-‐dir/
cp -‐r /boot /lib/modules /s3/s3ql-‐fs/test-‐dir/ 0.01s user 0.18s system 2%
cpu 7.180 total
# time rm -‐r /s3/s3ql-‐fs/test-‐dir/
rm -‐r /s3/s3ql-‐fs/test-‐dir/ 0.00s user 0.03s system 0% cpu 7.071 total
# time /usr/local/bin/umount.s3ql /s3/s3ql-‐fs
/usr/local/bin/umount.s3ql /s3/s3ql-‐fs 0.14s user 0.05s system 11% cpu
1.701 total
# /usr/local/bin/mount.s3ql -‐-‐cachedir /var/cache/s3ql s3://s3ql-‐bucket
/s3/s3ql-‐fs
# time cp -‐r /boot /lib/modules /s3/s3ql-‐fs/test-‐dir/
cp -‐r /boot /lib/modules /s3/s3ql-‐fs/test-‐dir/ 0.03s user 0.13s system 3%
cpu 4.611 total
# time /usr/local/bin/umount.s3ql /s3/s3ql-‐fs
/usr/local/bin/umount.s3ql /s3/s3ql-‐fs 0.14s user 0.06s system 0% cpu
58.982 total
2016/5/14
JAWS-UGアーキテクチャ専門支部ハイブリッドクラウド
分科会CDP議論会#5
16
18. s3fs
# /usr/local/bin/s3fs test-‐bucket /s3/test-‐bucket -‐o
rw,allow_other,use_cache=/var/cache/s3fs
# mkdir /s3/test-‐bucket/test-‐dir
# time cp -‐r /boot /lib/modules /s3/test-‐bucket/test-‐dir/
cp -‐r /boot /lib/modules /s3/test-‐bucket/test-‐dir 0.02s user 0.16s system
0% cpu 4:26.14 total
# time rm -‐r /s3/test-‐bucket/test-‐dir
rm -‐r /s3/test-‐bucket/test-‐dir 0.01s user 0.04s system 0% cpu 1:10.38
total
# fusermount -‐u /s3/test-‐bucket
2016/5/14
JAWS-UGアーキテクチャ専門支部ハイブリッドクラウド分科会
CDP議論会#5
18
19. s3fs cpioでコピー
# time find boot lib/modules -‐print | cpio -‐pdm /s3/test-‐bucket/test-‐dir
106782 blocks
find boot lib/modules -‐print 0.00s user 0.00s system 83% cpu 0.003 total
cpio -‐pdm /s3/test-‐bucket/test-‐dir 0.10s user 0.81s system 0% cpu 9:23.19
total
# time rm -‐r /s3/test-‐bucket/test-‐dir
rm -‐r /s3/test-‐bucket/test-‐dir 0.00s user 0.04s system 0% cpu 52.469
total
2016/5/14
JAWS-UGアーキテクチャ専門支部ハイブリッドクラウド分科会
CDP議論会#5
19
20. riofs
# /usr/local/bin/riofs test-‐bucket /s3/test-‐bucket
# mkdir /s3/test-‐bucket/test-‐dir
# time cp -‐r /boot /lib/modules /s3/test-‐bucket/test-‐dir/
cp: error writing ‘/s3/test-‐bucket/test-‐dir/modules/3.13.0-‐48-‐
generic/kernel/arch/x86/kvm/kvm.ko’: No such file or directory
cp: error writing ‘/s3/test-‐bucket/test-‐dir/modules/3.13.0-‐48-‐
generic/kernel/arch/x86/kvm/kvm-‐amd.ko’: No such file or directory
: (以下略)コピーエラーがザクザク出る
cp -‐r /boot /lib/modules /s3/test-‐bucket/test-‐dir/ 0.01s user 0.11s
system 0% cpu 31.318 total
# time rm -‐r /s3/test-‐bucket/test-‐dir
rm: cannot remove ‘/s3/test-‐bucket/test-‐dir/boot/grub/i386-‐
pc/cmdline_cat_test.mod’: No such file or directory
rm: cannot remove ‘/s3/test-‐bucket/test-‐dir/boot/grub/i386-‐
pc/mda_text.mod’: No such file or directory
: (以下略)削除エラーがザクザク出る
rm -‐r /s3/test-‐bucket/test-‐dir 0.03s user 0.03s system 0% cpu 47.312
total
2016/5/14
JAWS-UGアーキテクチャ専門支部ハイブリッドクラウド
分科会CDP議論会#5
20
21. riofs cpioでコピー
# time find boot lib/modules -‐print | cpio -‐pdm /s3/test-‐
bucket/test-‐dir
106782 blocks
find boot lib/modules -‐print 0.00s user 0.00s system 6% cpu 0.046
total
cpio -‐pdm /s3/test-‐bucket/test-‐dir 0.08s user 0.69s system 2% cpu
33.614 total
# time rm -‐r /s3/test-‐bucket/test-‐dir
rm: cannot remove ‘/s3/test-‐bucket/test-‐dir/boot/grub/i386-‐
pc/cmdline_cat_test.mod’: No such file or directory
rm: cannot remove ‘/s3/test-‐bucket/test-‐dir/boot/grub/i386-‐
pc/mda_text.mod’: No such file or directory
: (以下略)削除エラーがザクザク出るのは一緒
rm -‐r /s3/test-‐bucket/test-‐dir 0.02s user 0.04s system 0% cpu
46.314 total
2016/5/14
JAWS-UGアーキテクチャ専門支部ハイブリッドクラウド
分科会CDP議論会#5
21
22. goofys
# /usr/local/bin/goofys test-‐bucket /s3/test-‐bucket
# mkdir /s3/test-‐bucket/test-‐dir
# time cp -‐r /boot /lib/modules /s3/test-‐bucket/test-‐dir
cp: cannot create symbolic link ‘/s3/test-‐bucket/test-‐
dir/modules/3.13.0-‐48-‐generic/build’: Function not implemented
cp: error writing ‘/s3/test-‐bucket/test-‐dir/modules/3.13.0-‐48-‐
generic/kernel/arch/x86/kvm/kvm.ko’: Invalid argument
cp: failed to close ‘/s3/test-‐bucket/test-‐dir/modules/3.13.0-‐48-‐
generic/kernel/arch/x86/kvm/kvm.ko’: Invalid argument
: (以下略) コピーエラーがザクザク出る
cp -‐r /boot /lib/modules /s3/test-‐bucket/test-‐dir 0.03s user
0.12s system 0% cpu 1:24.36 total
# time rm -‐r /s3/test-‐bucket/test-‐dir
rm -‐r /s3/test-‐bucket/test-‐dir 0.00s user 0.05s system 0% cpu
39.570 total
# fusermount -‐u /s3/test-‐bucket
2016/5/14
JAWS-UGアーキテクチャ専門支部ハイブリッドクラウド
分科会CDP議論会#5
22
23. エラーメッセージ
# grep goofys /var/log/syslog | grep fuse.ERROR | head -‐5
May 10 18:45:50 ops-‐hub /usr/local/bin/goofys[2479]: fuse.ERROR
WriteFile: only sequential writes supported 338 test-‐
dir/modules/3.13.0-‐48-‐generic/kernel/arch/x86/kvm/kvm.ko [327680
331776]
May 10 18:45:50 ops-‐hub /usr/local/bin/goofys[2479]: fuse.ERROR
WriteFile: only sequential writes supported 339 test-‐
dir/modules/3.13.0-‐48-‐generic/kernel/arch/x86/kvm/kvm-‐amd.ko [36864
40960]
May 10 18:45:50 ops-‐hub /usr/local/bin/goofys[2479]: fuse.ERROR
WriteFile: only sequential writes supported 340 test-‐
dir/modules/3.13.0-‐48-‐generic/kernel/arch/x86/kvm/kvm-‐intel.ko [61440
69632]
May 10 18:45:52 ops-‐hub /usr/local/bin/goofys[2479]: fuse.ERROR
WriteFile: only sequential writes supported 368 test-‐
dir/modules/3.13.0-‐48-‐generic/kernel/crypto/tcrypt.ko [20480 24576]
May 10 18:46:06 ops-‐hub /usr/local/bin/goofys[2479]: fuse.ERROR
WriteFile: only sequential writes supported 561 test-‐
dir/modules/3.13.0-‐48-‐generic/kernel/drivers/md/bcache/bcache.ko
[176128 180224]
2016/5/14
JAWS-UGアーキテクチャ専門支部ハイブリッドクラウド
分科会CDP議論会#5
23
24. goofys cpioでコピー
# time find boot lib/modules -‐print | cpio -‐pdm /s3/test-‐
bucket/test-‐dir
cpio: /usr/src/linux-‐headers-‐3.13.0-‐48-‐generic: Cannot create
symlink to `/s3/test-‐bucket/test-‐dir/lib/modules/3.13.0-‐48-‐
generic/build': Function not implemented
106782 blocks
find boot lib/modules -‐print 0.00s user 0.00s system 14% cpu
0.019 total
cpio -‐pdm /s3/test-‐bucket/test-‐dir 0.07s user 0.55s system 0% cpu
2:03.93 total
# time rm -‐r /s3/test-‐bucket/test-‐dir
rm -‐r /s3/test-‐bucket/test-‐dir 0.02s user 0.03s system 0% cpu
46.708 total
# fusermount -‐u /s3/test-‐bucket
2016/5/14
JAWS-UGアーキテクチャ専門支部ハイブリッドクラウド
分科会CDP議論会#5
24
25. AWS CLI
コピー
# time aws s3 cp /boot s3://test-‐bucket/test-‐dir -‐-‐recursive
aws s3 cp /boot s3://test-‐bucket/test-‐dir -‐-‐recursive 0.97s user
0.07s system 30% cpu 3.431 total
# time aws s3 cp /lib/modules s3://test-‐bucket/test-‐dir -‐-‐
recursive
aws s3 cp /lib/modules s3://test-‐bucket/test-‐dir -‐-‐recursive
37.73s user 3.00s system 39% cpu 1:43.51 total
削除
# time aws s3 rm s3://test-‐bucket/test-‐dir -‐-‐recursive
aws s3 rm s3://test-‐bucket/test-‐dir -‐-‐recursive 36.13s user 1.43s
system 58% cpu 1:04.68 total
2016/5/14
JAWS-UGアーキテクチャ専門支部ハイブリッドクラウド
分科会CDP議論会#5
25