ラズパイとMinIOでデータを同期する。
ラズパイとMinIOでデータを同期する。
前回までにMinIOのインストールが完了。
https://qiita.com/qiitaroi/items/7139ae983b5db2404cdb
今回はラズパイでパケットキャプチャをして、そのデータをオブジェクトストレージと同期させます。
正直、オブジェクトストレージの勉強用なので、キャプチャデータには何の意味もなく、何なら写真でも動画でも、データならなんでも良いけど、たまたま仕事でパケットキャプチャシステムの話が出たので、Wiresharkを使いました。
1、ラズパイでパケットキャプチャしてデータをローカルに保存
2、ローカルとMinIOサーバーで同期して、ローカルファイルを消す
3、MinIOサーバー側のライフサイクルを設定する
4、同期失敗用に古いファイルを消すツールを仕込む
環境
H/W | OS | IPアドレス | ソフトウェア |
---|---|---|---|
ラズパイ Pi3b+ | Pi4.19.118-v7+ | 192.168.3.15 | Wireshark/Tshark |
Supermicro E300-9D | CentOS7.8 | 192.168.3.18 | MinIO server |
ノートPC | Win10 | 192.168.3.100 | Win10/Firefox |
1 ラズパイでパケットキャプチャしてデータをローカルに保存
今回はWiresharkとそのコマンド版のtsharkを使用する。
以下でGUIからWiresharkが使えるようになる。使い方はよくわからない。
$ sudo apt-get update
$ sudo apt-get install wireshark
$ sudo dpkg-reconfigure wireshark-common
$ sudo usermod -a -G wireshark pi
次にローカルでデータを蓄積させるディレクトリの作成とtsharkのインストール
$ sudo mkdir /pidata
$ sudo chown -R pi /pidata && sudo chmod u+rxw /pidata
$ sudo apt-get install tshark
下記でラズパイのWIFIネットワークのwlan0を60秒毎のファイルにして/pidata/以下にaugxxxというファイル名で出力。
$ tshark -i wlan0 -w /pidata/aug -b duration:60
これでこんな感じのファイルがひたすら量産されます。
15680 Aug 28 14:55 aug_00001_20200828145442
19196 Aug 28 15:01 aug_00001_20200828150030
31620 Aug 28 15:02 aug_00002_20200828150130
31632 Aug 28 15:03 aug_00003_20200828150230
25608 Aug 28 15:04 aug_00004_20200828150330
データを溜める為にデータを作成するという行為。
「穴を埋めるために穴を掘る」に似ている。
2、ローカルとMinIOサーバーで同期して、ローカルファイルを消す
まずは、ラズパイにMinIO オブジェクトストレージと会話するためのコマンドラインツール"mc"をインストールしてエイリアスを設定。
(すでにサーバー側にはminioがインストール済みで"minio server /data"コマンドで待機状態にあることが前提。)
$ sudo wget https://dl.minio.io/client/mc/release/linux-arm/mc
$ chmod +x mc
$ cp mc /usr/bin
$ mc alias set minio http://192.168.3.18:9000 minioadmin minioadmin
lsコマンドのテスト。
エラーにならなければOK。
$ mc ls minio
MinIOサーバー側にもローカルと同じ名前(pidata)の専用Bucketを作成。
ここにローカルのデータ流し込む。
$ mc mb minio/pidata
ローカルフォルダとMinio Serverの同期と、同期後のローカルのデータを消すというシンプルなスクリプトを作成。
mc mirror ローカルフォルダ MinIOターゲット名/Bucket名 という使い方。
mcコマンドの使用方法は下記参照。
https://docs.min.io/docs/minio-client-complete-guide.html
$ vi upload.sh
#/bin/sh
if mc mirror /pidata/ minio/pidata; then
echo "Upload success,Delete local files."
rm /pidata/*
else
echo "Minio file upload failed."
fi
実行権を与えて実行
$ chmod +x upload.sh
$ ./upload.sh
ちゃんと入ってることをブラウザでも確認。
オッケー!
定期的に同期するためにcrontabで下記を追記。
毎分ローカルとオブジェクトストレージを同期する。
$crontab -e
*/1 * * * * ~/upload.sh
これでジャンジャンアップロードが可能になったぜ。
容量制限?アクセス回数制限? 関係なし!
オブジェクトストレージ側で容量足りなくなったら、消すも良し、HDD増設するも良し、スケールアウトするも良し。
自分でコントロールできるって健全。
3、MinIOサーバーのライフサイクルを設定する。
オブジェクトストレージというとデータの長期保存が主な用途になると思うけど、無限に溜めれるわけもなく、
一定期間を過ぎたら別の場所に移動させるか、削除するかを考えなくてはいけない。
MinIOのmcコマンドは、オブジェクトを一定期間保存した後、消したり移動させたりが可能らしい。
今回はちゃんと消えるかを、mc ilmコマンドを使用して検証。
IDとPrefixは任意の文字、TransitionはさらにAWSのGracierとかに送る場合に使う、Tagは別につけなくてもOK。
日付指定の場合
--expiry-date "yyyy-mm-dd"
# mc ilm add --id "testilm01" --prefix "test1" --expiry-date "2020-09-04" --tags "object=ISOs" minio/iso
Lifecycle configuration rule added with ID `testilm01` to minio/iso.
# mc ilm list minio/iso
ID | Prefix | Enabled | Expiry | Date/Days | Transition | Date/Days | Storage-Class | Tags
----------------|----------------|------------|--------|--------------|--------------|------------------|------------------|------------------
testilm01 | test1 | ✓ | ✓ | 4 Sep 2020 | ✗ | | | object:ISOs
----------------|----------------|------------|--------|--------------|--------------|------------------|------------------|------------------
日数指定の場合
--expiry-days "日数"
# mc ilm add --id "testilm02" --prefix "test2" --expiry-days "1" --tags "object=Docs" minio/test01
Lifecycle configuration rule added with ID `testilm02` to minio/test01.
# mc ilm list minio/test01
ID | Prefix | Enabled | Expiry | Date/Days | Transition | Date/Days | Storage-Class | Tags
----------------|----------------|------------|--------|--------------|--------------|------------------|------------------|------------------
testilm02 | test2 | ✓ | ✓ | 1 day(s) | ✗ | | | object:Docs
----------------|----------------|------------|--------|--------------|--------------|------------------|------------------|------------------
ただし、バケットを指定しないと行けないので、全体のルールを確認することは難しそう。
どのバケットにどのルールを適用したかはちゃんと把握しておかないと。
# mc ilm list minio/
mc: <ERROR> Unable to get lifecycle. Bucket name cannot be empty.
4、同期失敗用に古いファイルを消すツールを仕込む
とは言え、ネットワークの問題等でMinIOにうまくアップロードできていないと
ローカルにどんどん溜まってしまうので、1日以上経ったデータは消す。
ツールとしてはtmpreaperというのを使ってみる。(初めて。)
本来はOSの/tmpを定期的に消すのが目的らしいけど、まあいいでしょ。
ラズパイでapt-getでインストールし、/etc/tmpreaper.confを編集
$sudo apt-get install tmpreaper
編集
$ sudo vi /etc/tmpreaper.conf
#SHOWWARNING=true <コメントアウト
TMPREAPER_TIME=1d <コメント外して1日に設定(Defaultは7d)
TMPREAPER_PROTECT_EXTRA=''
TMPREAPER_DIRS='/pidata/.' <ファイルパスを指定(defaultは/tmp/.)
TMPREAPER_DELAY=256
これで何があってもローカルには1日分だけしか保存されませんよ。
このプログラムは/etc/cron.daily で動くようになっているけど、cron.dailyがいつ動くかは下記で確認可能。
なんで6:25なんだろう。 まあいいや。
$ grep run-parts /etc/crontab
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
翌朝ちゃんと消えていたので良しとする。
Author And Source
この問題について(ラズパイとMinIOでデータを同期する。), 我々は、より多くの情報をここで見つけました https://qiita.com/Taroi_Japanista/items/7c0b68ba1e23b1bb7ddb著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .