Carpe Diem

備忘録

MongoDBのデータをElasticsearchにリアルタイム同期

概要

以前はMongoRiverを使う - Carpe Diemで紹介したようにRiverという機能を使って同期を実現させていました。
しかしながらElasticsearchがRiverを廃止することを決め、バージョン2.x以降は使うことができなくなりました。

そこで調べてみて挙がったのは以下です。

ツール 用途 デメリット
logstash 様々なデータをElasticsearchへ投入するツール。
公式が薦めてる
inputにmongoのプラグインがない
beats ログの解析に使える。ダッシュボードもすぐ用意できる mongoのデータを送るようなプラグインがない
embulk バルクローダー。fluentdのバッチ版 バッチ版というようにリアルタイム同期ではない
fluentd リアルタイムな同期システムを作れる データがすでにあるものに対しての全同期には不向き
transporter 全同期可能。リアルタイムなデータ同期もできる sharded mongo clusterに未対応
mongo-connector 同上 デフォルト設定だとログが少ない

以上の結果からmongo-connectorを使用することにしました。

続きを読む

DockerでMongoDBのレプリカセットを構築

概要

MongoDBのレプリカセットを組んで検証する必要があったのでdockerを使って構築することにしてみました。

環境

  • Docker 1.12.0
  • Mongo 3.2.9

構成

コンテナ名 役割 ホスト側ポート
mongo1 Primary 30001
mongo2 Secondary 30002
arbiter Arbiter。データは持たない 30011

以下の様な形です。

f:id:quoll00:20160823131951p:plain

ref: https://docs.mongodb.com/manual/core/replica-set-architecture-three-members/

続きを読む

Elasticsearchでの文字列の正規化

概要

検索システムを扱う上で文字列の正規化は非常に重要な要素です。
大抵納品されるデータはフォーマットがバラバラ(全角半角、カタカナひらがなが統一されないなど)なので、この正規化によってある程度統一させることで検索の精度を向上できます。

環境

  • Elasticsearch 2.3

NFC、NFD、NFKC、NFKD

Unicode正規化形式は主に4つあります。簡単にまとめると以下です。

名称 説明 具体例
NFC 正規分解して合成 「か」+「゛」→「が」
NFD 正規分解して分解 「が」→「か」+「゛」
NFKC 互換分解して合成 NFCと大体同じ。さらに「㌢」→「センチ」と展開
NFKD 互換分解して分解 NFDと大体同じ。さらに「㌢」→「センチ」と展開
続きを読む

負荷試験中に使ったコマンド

概要

負荷試験やサービスが重くなっている時にチェックしたほうがいい項目を挙げてみました。

環境

チェック項目

疎通できているか確認

AWSだとデフォルトだとpingが通らないのでncコマンドを使います。

$ nc -z 192.168.1.10 27017
Connection to 192.168.1.10 port 27017 [tcp/*] succeeded!

メモリの量(Total、Swap)を確認

$ free
             total       used       free     shared    buffers     cached
Mem:       2050028     169268    1880760        688      14840      64408
-/+ buffers/cache:      90020    1960008
Swap:            0          0          0
  • usedが多くてもbuffers/cachedが多ければ大丈夫
  • freeが示すのはVIRTなのでmallocJVMでのヒープ確保している分も含む
  • 一方top%MEMはRES/Totalの物理メモリなので確保が大きい場合は差がでる
続きを読む

TerraformでECS環境の構築

概要

ECSというコンテナのクラスタ環境構築のサービスをTerraformで作成してみます。
簡単のため、以下の設定はこのコードには含んでいません。

  • EC2インスタンスのオートスケール用のアラーム設定なし
  • ECSのコンテナのオートスケールはなし(Terraform未対応)

完成形は以下です。

github.com

環境

  • Terraform v0.6.16
続きを読む

ELB+nginxでbasic認証をかける方法

概要

開発環境では外部に見られないようにbasic認証をかけることが良くあります。
一方でELBのHealthCheckはbasic認証がかかったパスだと401エラーが返り、そのままだとOutOfServiceとなって接続することができません。
今回はそんな時の対応方法です。Nginxをリバースプロキシにしている場合も同様にできます。

環境

方法

結論から述べると以下の2つです。

  1. ELBのHealth Checkのポートを別にする
  2. NginxでVirtualHostを設定してHealth Checkと別にする
続きを読む