Carpe Diem

備忘録

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と別にする
続きを読む

Dockerのネットワークを理解するために覚えたことまとめ

概要

Dockerのネットワーク周りを勉強していると、

  • docker0
  • 仮想ブリッジ
  • VXLAN
  • link機能

など色んな要素が出てくるのですが、ちゃんと理解していないとすぐ忘れるため一度しっかり学んでみました。
今回はその時に疑問に思ったことをまとめてみました。

環境

  • docker 1.11.2

構成

マシン IP 役割
ホスト 192.168.33.10 Dockerホスト
docker0 172.17.0.1 仮想ブリッジ
nginx1 172.17.0.2 コンテナ1
nginx2 172.17.0.3 コンテナ2
続きを読む