こんにちは、へんりー(@a_henly)です。
サーバ運用初心者ながらrsyncコマンドの検証作業をやってみました。
初心者ならではの観点で調べた調査結果、考えた検証項目などを紹介したいと思います。
同じくサーバ運用初心者の方や、そういった方を指示する立場にある方にお役立てればと思います。
要件:rsyncでデータ同期せよ。
まず要件としては”サーバ間のデータをrsyncで同期させる”というものです。
コマンドはcopyではなくrsyncが推奨されており、まずはその違いからつまずきました。
(copyもrsyncも複製するという同じ目的を果たすためのものではないのか…!?)
copyとrsyncの違いとは
さくっと調べました。
copyは単純にコピー(複製)することに適しており、rsyncはどちらかというと差分をコピー(複製)することに適しているようです。
そのため、初回の動きはcopyもrsyncも同じように動作しますが、同一ファイルの2回目以降のコピー作業はrsyncの方が待ち時間は短く済みます。
また、rsyncですと「–bwlimit」というオプションを渡すと転送速度の上限を制御することが可能となります。
コピー(複製)コマンドを実行するサーバへの負荷軽減対策としてもrsyncは有効でしょう。
「–bwlimit」コマンドは
rsync --bwlimit = 10000
という表記で実行可能ですが単位がkBですので注意してください。
上記例のコマンドですと「10000kB = 10MB」なので10MBを転送上限として実施されます。
あくまで転送上限ですので下限の定義をすることはできないようです。
また、デフォルトの転送速度は存在せず、そのマシンの空きリソースを可能な限り利用します。
詳細な情報がなく参考になりませんが私の環境では約40MB/secというスピードが出ていました。
なお、ファイル差分のみコピー時はrsync処理後のメッセージに”DRY RUN”と表示されます。
sent *** bytes received ** bytes ***.** bytes/sec
total size is ***** speedup is ****** (DRY RUN)
少々長くなりましたがrsyncの特徴としては
- 2回目以降の同一ファイルコピー時に強い
- 転送速度の上限を決められるので負荷を考慮した作業がしやすい
といった点が大きなポイントです。
rsyncの検証項目を考えよう
rsyncの概略を掴んだところで実際にどのような観点で検証すれば”サーバ間のデータをrsyncで同期させる”を満たせるでしょうか。
- rsyncするサーバ・rsyncされるサーバのCPU/メモリ構成を把握する
- rsyncするサーバ・rsyncされるサーバの間に存在するNW機器の負荷を考慮する
- rsync稼働時のCPU/メモリ負荷状況を試算する
- rsync初回動作完了(コピー完了)までにかかる時間を目算する
- hash値を比較してコピー差分がないことを念のため確認する
ざっとこれくらいの検証項目が浮かびました。
一番大事なのはサーバ、NW機器の負荷状況を判断し予め定めた閾値を超えそうになる時にrsync作業を止めることができるかどうか、という点です。
rsync自体はコピー(複製)途中でctrl+cを入力することで中断させることができます。
(同じコマンドを打てば差分のみを確認してコピーを再開します。)
また作業時間も重要です。決められた作業時間内に終わるのかどうか、夜通し実行させているといつ頃終わる作業なのか、その辺りの指標となるという点で重要な観点だと思いました。
1.rsyncするサーバ・rsyncされるサーバのCPU/メモリ構成を把握する
rsyncするサーバ・rsyncされるサーバに対してtopコマンドを実行し、プロセス情報を確認します。
2.rsyncするサーバ・rsyncされるサーバの間に存在するNW機器の負荷を考慮する
サーバとサーバの間にあるSWに対してshow processコマンドで情報を確認。
3.rsync稼働時のCPU/メモリ負荷状況を試算する
4.rsync初回動作完了(コピー完了)までにかかる時間を目算する
この3.4に関しては今回の環境では検証環境があったのでテストで確認しました。
もし本番環境しかない場合は前述の「–bwlimit」オプションを用いて、
例えば1000kB(=1MB)で通信させてみてその時のCPU/メモリ負荷状況を確認することを手順書に盛り込むなどして対処するのも手かと思います。
とりあえずオプションなしで動かしてみていざとなったらctrl+cで抜けるなど。
体感的にCPUの負荷はそれほど高くないですがメモリを結構食いつぶされるように感じました。
5.hash値を比較してコピー差分がないことを念のため確認する
コピー(複製)後にもう一度rsyncを回すという方法でもいいですが、md5sumコマンドを用いてhash値取得、比較という方法もありです。
比較時はdiffよりも指定の文字列のところまでを比較するというcmpの方が適しています。
md5sumで生成されたファイルは実際のhash値(乱数)の部分までは一緒でも後半のファイル名の部分がそれぞれ異なるからです。
cmp -n ** FileA FileB
cmpコマンドの「-n」オプションはFileAとFileBの各行先頭から**列までを比較するという内容です。
他の作業などでも是非活用ください。
初めてこういうエンジニア系の記事を書いてみました。
自分が検証したことを正確に文字に移すというのは意外と簡単で楽しいものでした。
また、気が向けばこういった趣旨の記事も更新します。
それでは。
【参考にさせていただいたサイト】
【 rsync 】コマンド(その1)――ファイルやディレクトリを同期する / @IT
コメント