はじめまして。hiroshiの部下、yoshitoです。
僕の主な仕事は、ここだけの話、hiroshiのゴキゲンをとることですが、稀にコードを書いたり、サーバーをいじったり、hiroshiの弁当を買ってきたりしています。
僕はとくに技術力が高いわけではなく、難しい事は他の方々がさくっとやってくれるので、僕はみなさんがゴキゲンよろしくお仕事ができるようにサポートしています。
技術的なものはあまり書けないと思いますが、社内の雰囲気をお伝えできればと思います。
しかし。
ネタが無いので、今回は技術ネタにしましたさーせん!!!!
ネタが無いので、今回は技術ネタにしましたさーせん!!!!
:Chefサーバーのディスク容量が増えすぎて困ったですの巻
以前の記事で紹介されているように、DECOLOGではChefというサーバー管理ツールを使ってサーバーを管理しています。
今回は、そのChefサーバーがディスク容量不足になってしまった時のことを紹介します。
今回は、そのChefサーバーがディスク容量不足になってしまった時のことを紹介します。
DECOLOGのサーバーは、Zabbixというサーバー監視システムで監視されていて、サーバーの状態がおかしくなるとメールを送ってくれたりします。
今回の場合も、
「Chefサーバーのディスク使用量が90%を超えましたよ」
的なアラートメールが届いて、問題が発覚しました。
「Chefサーバーのディスク使用量が90%を超えましたよ」
的なアラートメールが届いて、問題が発覚しました。
調べてみると、chef.couchというファイルがHDDのほとんどを占めている状態。
Google先生に聞いてみると、Chefが使っているCouchDBというデータベースシステムのファイルだということがわかりました。
Google先生に聞いてみると、Chefが使っているCouchDBというデータベースシステムのファイルだということがわかりました。
ChefサーバーはCouchDBを使って、クライアントの情報を管理しており、今回はそのデータベースのファイルが大きくなりすぎていたようです。
教訓:
Chefサーバーが容量不足になったら
CouchDBを疑ってみる!
の巻
CouchDBは、ドキュメント管理に特化したデータベースです。(ってここに書いてありました)
特徴として、データが更新されるたびに、新しくリビジョンを作成するという特徴があります。
つまり、過去のデータをまるっととっておくわけです。
つまり、過去のデータをまるっととっておくわけです。
Chefで管理しているクライアントの情報がアップデートされるたびに、
CouchDB上ではそのデータが複製されて、情報を更新すれば更新するほどDBは肥大化してしまいます。
CouchDB上ではそのデータが複製されて、情報を更新すれば更新するほどDBは肥大化してしまいます。
そこで、Compactionの出番です。
Compactionは、CouchDBに保存されている過去のデータを削除する機能。
Compactionを実行しましょう!
CouchDBは面白くて、RESTfulなAPIでアクセスできるんです。
URLを叩けば、お手軽にDBを操作できます。
URLを叩けば、お手軽にDBを操作できます。
例えばDBの情報を見たければ、Curlコマンドを使って、
$ curl http://localhost:5984
とすると、
{"couchdb":"Welcome","version":"0.11.2"}
こんな感じで情報を取得することができます。
ChefのDBの情報は、こんな感じです。
$ curl http://localhost:5984/chef {"db_name":"chef","doc_count":3875,"doc_del_count":99, "update_seq":5139079,"purge_seq":0, "compact_running":false,"disk_size":455128299901, "instance_start_time":"1287986483011849","disk_format_version":5}
らくちんですね。
ということで、早速Compactionを実行してみましょう。
$ curl -H "Content-Type: application/json" -X POST http://localhost:5984/chef/_compact {"ok":true}
OK!
確認してみましょう。
確認してみましょう。
$ curl http://localhost:5984/chef {"db_name":"chef","doc_count":3875,"doc_del_count":99, "update_seq":5139107,"purge_seq":0, "compact_running":true,"disk_size":455131086952, "instance_start_time":"1287986483011849","disk_format_version":5}
おおお!
compact_running:true
になってます。うまくいってそうです。
Compactionが終了すると、
compact_running:false
になります。
compact_running:false
になります。
結果
Before
$ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 564436604 481904116 53398212 91% /
After
$ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 564436604 37030504 498271824 7% /
効果絶大。 めでたし めでたし。
ちなみに、CouchDBの読み方はカウチです。
*1 : Read The Fucking Manualの略。「マニュアル読んで」的な。実際、大抵のことはマニュアルに書いてあります。