ツナワタリマイライフ

日常ネタから技術ネタ、音楽ネタまで何でも書きます。

VagrantでMongoDB Replica Setを作る

はじめに

作った。

github.com

いろいろMongoDBをガチャガチャ動かしたくて、まぁDockerで動かすのも普通にできたが、どうせだしReplicaSetも作ろうと思ったので組んだ。

存在は知っていたものの、今回はじめてVagrantのGuest/Hostのhostsを自動設定してくれるやつを使った。

github.com

guestのhostsはこんな感じになる。

vagrant@mongo0:~$ cat /etc/hosts
127.0.0.1   localhost

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost   ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
127.0.1.1   mongo0  mongo0

## vagrant-hostmanager-start
192.168.33.202  mongo2

192.168.33.201  mongo1

192.168.33.200  mongo0

## vagrant-hostmanager-end

Vagrantfileにはこのへんの設定が必要。

  config.hostmanager.enabled = true
  config.hostmanager.manage_host = true
  config.hostmanager.ignore_private_ip = false
  config.hostmanager.include_offline = false

mongodbのreplicasetのinitiate処理だけは全部終わってから、特定の1台であてなきゃならんので別の処理とした。mongo shellのコマンドをどうやってbash scriptから渡したもんかなと思ったが、普通に標準入力で渡してやればいい。

vagrant@mongo0:~$ cat /vagrant/repl.js | mongo
$ cat repl.js
rs.initiate()
rs.add('mongo1:27017')
rs.add('mongo2:27017')
rs.status()
cfg = rs.conf()
cfg.members[2].hidden = true
cfg.members[2].priority = 0
rs.reconfig(cfg)

mongo shellにわたすものなので # でコメントが書けない。 jsなんで // で書けばいいんだろうけど。

おわりに

おもちゃができたのでガンガン遊んでいく。

MongoDB In Actionの2nd Editionが出ていて買ったので、Wired Tigerの章読んで何か書くかも。

www.manning.com

しかしいつになってもVagrantは好きだ。。。こわして作る、再現性があるのがいい。