インフラブログ

とあるWEBサイトのインフラを構築運用するメモ

mongodb構築

WEBサーバのアクセスログ、アプリのアクティビティログをmongodbで保存することにしました。 アクセスログの追跡をできるようにrockmongoというWEBユーザーインタフェイスも入れておきます。

レプリカセットを作る

PRIMARY,SECONDARY,ARBITERで3つのインスタンスを用意します。ARBITERはどちらがPRIMARYであるべきかを監視してるもののようです。 各インスタンスにmongodbをインストールした後、mongodを立ち上げます。レプリカセット名はrs0とします。

/etc/mongod.conf

replSet = rs0

次にmongoコマンドでシェルに入って、次のように初期化を行います。

config = {
  _id : "rs0",
  members : [
    { _id : 0, host : "staging-mongo-1" },
    { _id : 1, host : "staging-mongo-2" },
    { _id : 2, host : "staging-admin-1", arbiterOnly : true } ] }

rs.initiate(config);

rs.status()で状態を確認できます。

mongoidの設定

railsからは常にPRIMARYに接続するようにします。mongoidでは下記のように設定してPRIMARYにつなぐようにします。もしフェイルーオーバした場合でも、再起動とか必要なくそのまま新しいPRIMARYに接続してくれます。

config/mondoig.yml

staging:
  sessions:
    default:
      hosts:
        - staging-mongo-1:27017
        - staging-mongo-2:27017
      database: example_staging
      options:
        max_retries: 30
        retry_interval: 1
        read: primary

nginxのアクセスログの保存

fluentd経由でmongodbに書きこみます。