freedom-man.com

ブログは俺のセーブポイント

Tag: zabbix

dockerコンテナで動くmysqlを永続化してみる【Zabbix編】

今回はdockerコンテナで動くmysqlデータをホストOS上にセーブすることで、

commitしなくてもデータを維持する!ということをしてみます。

 

今まではコンテナ落とす度にちゃんとcommitしないと、次に起動するときにデータが無くなり

Immutable Infrastructureとは程遠い感じになっていたので

サーバーは機能だけを提供して、データは別にするという疎結合な感じにするっていうのがモチベーション。

 

本日の参考サイトはこちら↓

http://www.zabbix.jp/documents/installation/install-rpm

http://cpw.hatenadiary.jp/entry/2013/08/20/220306

 

考え方としては、ホストOSにmysqlデータを格納してそれをコンテナがマウントして使うって感じ。

docker+zabbixの回で既にmysql-serverがインストールされているので、そのデータ移行もやってみます。

 

1. ホストOSに任意のディレクトリを作成。

コンテナにマウントさせる共有ディレクトリを作成します。

前者はダンプファイル共有用、後者はmysqlデータ格納用になります。

 

2. docker run でコンテナ作成。

1で作成した共有ディレクトリの内、ダンプファイル共有用のディレクトリをマウントしてコンテナを作成します。

 

これでホストOSの/home/tzm/docker/shareディレクトリがコンテナの/shareでアクセス出来るようになります。

 

3. mysqlのダンプを取ってマウントしたディレクトリ内に格納してコンテナを落とす。

 

4. mysqlデータ共有ディレクトリをマウントして再度コンテナ起動。

 

今回はzabbix使うのでポート転送は443と10051を指定。

1で作成した共有ディレクトリも全てマウント。

 

5. コンテナ内でmysqlの初期化及び設定を行う。

mysqlの初期化

 

mysql起動

 

ダンプファイルのディレクトリに移動してmysqlにログイン。パスワードも設定。

 

zabbixデータベース、zabbixユーザを作成してdumpデータをzabbixデータベースにインポート

 

これでマウントしたコンテナ内で作成されるmysqlデータは

ホストOSの/home/tzm/docker/mysqlに格納されてcommitせずともデータが永続化します。

zabbixをnginxで動かす!

DigitalOceanの512MBプランでやっている都合上メモリは極力抑えたい。

apacheだとメモリ食いまくるので貧乏人節約家的にはシングルスレッドなWebサーバで

メモリは安くやりたいところです。

 

ということで前回インストールしたzabbixをnginxで動かします。

 

で、方法は色々とありそうですが、こちらの方法が簡単そうだったのでトライしてみました。

原理は簡単で、zabbixのパスでアクセスしてきたら

/usr/share/zabbix(phpアプリの場所)にアクセスするようにリンクを貼ってあげて

phpに対するアクセスはphp-fpmに渡せばOK。

ついでにSSLも対応しちゃいます。

 

まずはnginxとphp-fpmのインストールから

 

ドキュメントルート直下にリンクを貼る

 

SSLの証明書&キーを作成

 

ログ用のディレクトリを作成

 

/etc/nginx/conf.d/zabbix.confを作成

 

/etc/php5/fpm/php.iniを以下のように設定

 

nginxとphp-fpmを起動!

 

で、nginx + php5-fpmで動かしてみた結果…メモリ全然減らないorz

 

topで見てみたら、結局php5-fpmがメモリ食いまくってるっていうオチw

 

ちなみに、今回はlnでリンク貼る方法でしたが、aliasでもいけちゃいます。

こんな感じのlocationディレクティブを/etc/nginx.conf.d/zabbix.confに設定すればOK

php以外はそのままaliasでOKなんだけど、phpはalias貼りつつfastcgiにちゃんと渡してあげないとダメ。

locationは一つしか適用されず、正規表現が優先されるっていうところでプチハマりしました…。

参考URL:http://heartbeats.jp/hbblog/2012/04/nginx05.html

DigitalOcean + docker + Zabbixで監視サーバ立ててみる

激安VPSのDigitalOceanで、dockerのコンテナでZabbixを使って

ストーキング監視サーバを立てるのが今回の目的。

 

何でZabbixかっていうと、先日のOSC 2014でトピックに上がっていて

個人的に興味持ったので、その検証用って感じっす。

 

何でDigitalOcean&dockerかっていうとお金がないから今熱いからです!

 

で工程としては

1. DigitalOceanでサーバ立てる

2. dockerをインストール

3. dockerでコンテナを立てる

4. コンテナOSにZabbixとかインストール

5. Zabbixとapacheを起動

6. 監視対象サーバにZabbixエージェントをインストールして起動

7. WebGUIで設定

って感じ。

 

1. DigitalOceanでサーバを立てる

DigitalOceanはAWSみたいにサーバを自由に作ったり壊したりできる

格安クラウドサービスで、月額500円でメモリ512MB相当のVPSを作れます。

 

今回はテキトーに512MBのUbuntuで作成。

 

EC2とかと違って、配布されるユーザはrootなので

作った後は作業用ユーザ作成して、sshのログインとかパスワード認証禁止して

公開鍵設定して、みたいなことは全部やんないとダメなので注意。

ここらへんは自前でChefとかで自動化した方が良いかもねー。

 

2. dockerのインストール

今回はUbuntu使ったので

http://docs.docker.io/en/latest/installation/ubuntulinux/

に従ってインストールする。

 

3. dockerでコンテナを立てる

dockerでコンテナを作成

 

dockerの使い方はここらへんを参考にしました↓

http://apatheia.info/blog/2013/06/17/docker/

http://qiita.com/h_demon/items/096dafed2b8fec362323

 

最初のイメージをダウンロードする時間はちょっとかかるけど

一回ダウンロードした後のコンテナの起動は超早い、っていうか一瞬です。

 

4. コンテナOSにZabbixとかインストール

コンテナが作成されたらbash起動するので

Zabbixのインストール方法に従って、色々とインストール。

※上記リンクの順番と違って、Zabbixよりも先にmysql-serverをインストールするのがミソ。

 

このサイトによるとdockerでinitctlがうまく動かないみたいで

とmysqlサーバを立ち上げようとしても起動しない…。

 

と直接起動しようとしても

とか出やがる。

 

ということで、参考サイト通りに

を起動する。

 

あとは

でZabbixのインストールをするだけ。

 

途中、色々とパスワードを入力する画面が出てくるけど、

最初はmysql-serverをインストールしたときのRootユーザのパスワードを入力。

このRootユーザがZabbixユーザとかZabbixデータベースを作る。

ConfigZabbixDBAdmin

 

MySQLのDBユーザ(Zabbix)のパスワードを設定。

ConfigZabbixDBUser

 

で、上記パスワードの確認。

ConfigZabbixDBUserConfig

 

これで、サーバ側のインストールは完了!

 

5. Zabbixとapacheを起動

apacheは/etc/apache2/conf.d/zabbixのタイムゾーン部分を以下のように書き換える。

 

 

7のWeb画面上の設定で最初にMySQLの認証とかで、パスワードを入力する場面があったりするので

apacheにopensslを入れて起動することを推奨します。

ubuntuだとこんな感じ。

 

 

6. 監視対象サーバにZabbixエージェントをインストールして起動

監視対象はこのブログ置いてるサーバ(CentOS)なので以下のように

Zabbixエージェントをインストールする。

 

/etc/zabbix/zabbix_agentd.confの以下の項目を設定。詳細はここ参照。

・Sever:ZabbixサーバのIPアドレス

・Hostname:監視対象のホスト名(OSホスト名と異なっててもOK)

・ListenIP: 監視対象サーバのIPアドレス

 

で、起動

 

7. WebGUIでZabbixサーバを設定

あとは、チュートリアルに沿って設定していくだけ!

 

で、実際に設定がおわったらこんな感じでグラフィカルに表示されます。

SampleGraph

 

 

ホストを作成するときのホスト名はZabbixエージェントで設定した値にすることが注意点。

ちなみに、最初の設定でCPUを計測しようとアイテムを追加してたら

取得不可能(not supported by zabbix agent)ってなって

調べてみたら、キーがsystem.cpu.load[<cpu>,<mode>]と、不正なキー値だった為でした。

system.cpu.load[,avg5]って感じなキー値が正しいです。

 

あとは、zabbix_getコマンドでも個々に値を取得できたりします。

 

あと、特定のキーはエージェントのZabbixユーザのパーミッションを適切に設定する必要あるみたい。

http://www.atmarkit.co.jp/ait/articles/1003/03/news146_3.html

 

dockerコンテナなので作り終わったらdocker commitしてイメージ作っておくのも大事。

あと、この構成だとcommitしないとコンテナ破棄して再起動するときに、mysqlの監視データも消えるので

ホストOSのディレクトリとかマウントしたりしてMySQLのデータを永続化する仕組みを作る必要がある。

http://cpw.hatenadiary.jp/entry/2013/08/17/024028

 

っていうかcommitしなくてもdockerが自動的に履歴残してくれるの良い機能だなーと思った。

commitし忘れてもdocker psからのcommit + runで復元って感じで。

© 2017 freedom-man.com

Theme by Anders NorenUp ↑