MongoDB, Inc. (ちょっと前まで 10gen だった) が提供するサービスとして MongoDB Management Services こと MMS がある。これは無償または有償で MongoDB サービスの監視、アラート、そしてバックアップをとってくれるというもの。
何ができるのか
- 監視 (無料)
- 接続数、ロック率、ネットワーク帯域、メモリ使用状況、Oplog の流速
- munin を接続している場合は、CPU 時間、ディスク使用量などのハードウェア項目
- ping (疎通) ログ
- プロファイリング
- アラート (無料)
- 監視が途絶えたとき
- ホストが落ちた時
- バックアップ (有料)
- 24 時間以内の任意時刻の状態を復元
- 6 時間おきのスナップショット (最長 2 日)
- 1 週間おきのスナップショット (最長 1 ヶ月)
- 1 ヶ月おきのスナップショット (最長 1 年)
現時点では、バックアップ以外の機能は無償で提供されている。またバックアップについては Oplog 1 GB あたり USD 1.00, スナップショット保持 1 GB あたり USD 0.08 となっているが、最初の 12 ヶ月間は USD 5.00 未満の利用であれば課金されない。
アカウントの準備
アカウントの取得は MMS のサイトから行う。
- First Name / Last Name: なまえ
- Email Address: メールアドレス (ログインおよび、他のユーザから招待されるときに用いる)
- Password
- Company : 個人で使う場合は Individual などとする
- Country : 国
- Job Responsibility : 役職。とりあえず Developer とかでよい
- MMS Group : すでに運用しているグループに参加する場合は “I’m joining an existing MMS group ..” を選ぶ。はじめての場合は “I’m the first person” とする。
ここで入力する MMS Group でグループが作成され、以後そのグループに対してサーバおよび他の管理者を追加することになる。あとで他のグループを作成し、1つのアカウントで複数のグループに所属することが可能なので、まず個人環境で試したい場合は MMS Group に “Taro’s Awesome Application” などぶつからなさそうな名前を適当に入れておけばよい。
ログインが終わったらダッシュボードが表示されるので、右上の Settings から以下の作業を済ませる。
- General Settings -> Group Time Zone: 日本時間またはサービスで標準的に採用しているタイムゾーン
- API Key, Secret Key : それぞれ控える
MMS Monitoring の構成
エージェントの設定
エージェントは、 MongoDB の状態を収集する小さなプログラムである。
あまり README では触れられてないが、エージェントは、監視対象の全 MongoDB インスタンスに接続が可能な クライアントホスト 1 つか 2 つに導入する だけでよい。(ここでいう “全 MongoDB インスタンス” は MMS Group に登録している全インスタンスである)
導入に適したホストの例を以下にあげる
- 全 MongoDB インスタンスにアクセスできるようにファイアウォールで構成された踏み台 (ゲートウェイ) サーバー
- すべての MongoDB インスタンスと VPN で接続をしている遠隔地の管理サーバー
複数のエージェントを登録した場合、 MMS ではうち 1 つがアクティブになり、そのアクティブになったホストから到達可能なサーバーしか監視対象にならない。運用が異なるなどの理由で、1 台のエージェントからすべての MongoDB インスタンスへの到達が不可能な構成になっている場合は、複数の MMS Group を作成し、グループごとに API Key を変えてエージェントを起動する必要がある。
cd /tmp/
wget https://mms.mongodb.com/settings/mms-monitoring-agent.tar.gz
tar zxvf mms-monitoring-agent.tar.gz && rm mms-monitoring-agent.tar.gz
sudo mv mms-agent /opt/
sudo aptitude install python python-dev python-setuptools
sudo easy_install pymongo hashlib hmac
sudo mkdir -p /var/log/mms-agent/
sudo touch /var/log/mms-agent/agent.log
sudo chown nobody:nogroup /var/log/mms-agent/agent.log
先ほど設定画面から確認した API Key を埋め込む
export MMS_API_KEY=deadbeaf…
export MMS_SECRET_KEY=deadbeaf…
sed -i "s/@API_KEY@/${MMS_API_KEY}/" /opt/mms-agent/settings.py
sed -i "s/@SECRET_KEY@/${MMS_SECRET_KEY}/" /opt/mms-agent/settings.py
Gist に貼り付けた upstart の起動スクリプト を用いる (Ubuntu 13.10 で確認)
wget -q "https://gist.github.com/shao1555/8098541/raw/c40c38afddfa5da5a234f969da3f366a0b692153/mms-agent.conf" -O - | sudo tee /etc/init/mms-agent.conf
サービスの開始 / 終了はこちら
sudo service mms-agent start
sudo service mms-agent stop
sudo service mms-agent status
完了後、トップページのステップ2 に “Ping received from Monitoring Agent” の一文がでていれば OK
次のステップ (Add a Host) で、ホストの FQDN を入力すれば監視がはじまる
- Sharding / Replica Set の場合は 1 台だけ追加すればいい。 Sharding と Replica Set 両方を構成している場合は、適当な mongos を追加すればすべて検知してくれるはず。
- エージェント, 監視対象ともに 1 台の同一マシンで行っている場合は、 Internal Hostname を “localhost” とすればよい。
- ポートはデフォルトで 27017
munin-node のインストール (任意)
上記の手順で MongoDB 関連のパラメータは監視されるが、CPU 使用率などのハードウェア情報を取得したい場合は munin-node を 監視対象の各 MongoDB インスタンス に入れ、エージェントを入れたホストから munin-node に接続が可能なようにファイアウォール等の設定を行う (デフォルトでは 4949/tcp) 。
sudo aptitude install munin-node
sudo ln -s /usr/share/munin/plugins/iostat /etc/munin/plugins/
sudo ln -s /usr/share/munin/plugins/iostat_ios /etc/munin/plugins/
sudo vim /etc/munin/munin-node.conf
# mms-agent が動いているホストから接続できるように、 allow 行を書き換えるか、 cidr_allow を追加する。mms-agent と munin-node が同一マシンの場合は設定不要
echo '
[iostat]
env.SHOW_NUMBERED 1' | sudo tee -a /etc/munin/plugin-conf.d/munin-node
sudo service munin-node restart
MMS Backup の構成
次に MMS Backup を試してみる。
MMS Backup は Replica Set 構成でないと動作をしないが、可用性の確保が目的でないのであれば、インスタンス 1 台 + MMS Backup という構成でも可能。
MongoDB の設定を変更
sudo vim /etc/mongodb.conf
# replSet = (任意の名前) を追記
sudo service mongodb restart
mongo
> rs.initiate()
mmsBackupTestdrive:PRIMARY> rs.status()
上記の通り、プロンプトが変われば OK (SECONDARY になっていても数回 Enter を押せば PRIMARY になるはず)
MMS Backup アカウントの有効化
次に、 MMS の管理画面から登録作業を行う。面倒なことにクレジットカード情報が必要。(とはいえ無料枠があるのでいきなり課金されることはない)
Phone Number は +819012345678 のように、手元の携帯番号を入力、続いてクレジットカード番号などを入力し登録を完了させる。
エージェントのインストール
cd /tmp/
wget https://mms.mongodb.com/settings/mms-backup-agent-linux_amd64.tar.gz
tar zxvf mms-backup-agent-linux_amd64.tar.gz && rm mms-backup-agent-linux_amd64.tar.gz
sudo mv backup-agent /opt/
sudo mkdir -p /var/log/backup-agent/
sudo touch /var/log/backup-agent/agent.log
sudo chown nobody:nogroup /var/log/backup-agent/agent.log
API Key は先ほどと同じ。
export MMS_API_KEY=deadbeaf…
sed -i "s/@API_KEY@/${MMS_API_KEY}/" /opt/backup-agent/local.config
Gist に貼り付けた upstart の起動スクリプト を用いる (Ubuntu 13.10 で確認)
wget -q "https://gist.github.com/shao1555/8098541/raw/c35e416c7c8f29ea8ff8157d36e241e6d8234534/backup-agent.conf" -O - | sudo tee /etc/init/backup-agent.conf
サービスの開始 / 終了はこちら
sudo service backup-agent start
sudo service backup-agent stop
sudo service backup-agent status
完了後、トップページのステップ2 に “Ping received from Backup Agent” の一文がでていれば OK
次のステップ (Start Backup) で、Replica Set 名を入力すればバックアップが開始される。
- Sharding / Replica Set の場合は 1 台だけ追加すればいい。 Sharding と Replica Set 両方を構成している場合は、適当な mongos を追加すればすべて検知してくれるはず。
- エージェント, 監視対象ともに 1 台の同一マシンで行っている場合は、 Internal Hostname を “localhost” とすればよい。
- ポートはデフォルトで 27017
スナップショットからの復元
まだ試したことがないが、説明 によると、スナップショットの db ディレクトリを HTTPS によるダウンロードか SCP によるアップロードで受け取ることができるとのこと。
課金についての注意
このまま放置すると、無料枠を超える (2GB の DB で oplog が月に 500 MB 程度) 、あるいは 1 年経つと課金されてしまう。 “Backup” の Replica Set Status 一覧から、すべての Replica Set を ”Stop” し、続けて “Terminate” することで、課金対象のリソースをすべて解約することができる。
なお、バックアップを有効化する前に、月額の概算バックアップ費用をReplica Set Status から確認することもできる。