1,在Ubuntu上安装MongoDB
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org
2, 创建3个虚拟机,分别是wzq-mongo1, wzq-mongo2, wzq-mongo3.
其中三个虚拟机分别对应的IP如下
wzq-mongo1 - 》 192.168.0.60,
wzq-mongo2 -》 192.168.0.64,
wzq-mongo3 -》 192.168.0.69
3, 在每个虚拟机上,编辑mongodb.conf
sudo vim /etc/mongodb.conf改变如下设置
replSet = rs0 bind_ip = 192.168.0.60由于mongodb 3.0会通过主机名称启动,所以有时候需要修改hosts里面主机名对应的ip
将主机名对应的
127.0.1.1 wzq-mongo1
修改为
192.168.0.60 wzq-mongo1
sudo service mongod restart
4, 在wzq-mongo1上启动mongodb
mongo 192.168.0.605, 初始化replication
mongo> rs.initiate()
rs0:PRIMARY> rs.add("192.168.0.60:27017") rs0:PRIMARY> rs.add("192.168.0.64:27017") rs0:PRIMARY> rs.add("192.168.0.69:27017")
rs0:PRIMARY> rs.status()
rs0:PRIMARY> rs.status() { "set" : "rs0", "date" : ISODate("2015-03-23T14:47:56.002Z"), "myState" : 1, "members" : [ { "_id" : 0, "name" : "192.168.0.60:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 2303, "optime" : Timestamp(1427121702, 1), "optimeDate" : ISODate("2015-03-23T14:41:42Z"), "electionTime" : Timestamp(1427121785, 1), "electionDate" : ISODate("2015-03-23T14:43:05Z"), "configVersion" : 89294, "self" : true }, { "_id" : 1, "name" : "192.168.0.69:27017", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 290, "optime" : Timestamp(1427121702, 1), "optimeDate" : ISODate("2015-03-23T14:41:42Z"), "lastHeartbeat" : ISODate("2015-03-23T14:47:54.312Z"), "lastHeartbeatRecv" : ISODate("2015-03-23T14:47:54.059Z"), "pingMs" : 811, "configVersion" : 89294 }, { "_id" : 2, "name" : "192.168.0.64:27017", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 290, "optime" : Timestamp(1427121702, 1), "optimeDate" : ISODate("2015-03-23T14:41:42Z"), "lastHeartbeat" : ISODate("2015-03-23T14:47:55.770Z"), "lastHeartbeatRecv" : ISODate("2015-03-23T14:47:55.810Z"), "pingMs" : 992, "configVersion" : 89294 } ], "ok" : 1 }
rs0:PRIMARY> db.test.insert({name:"wang",code:"w"})这样就可以在另外两个虚拟机上查看新添加的结果
恭喜你,
在这个过程中,有可能出现如下的问题
问题一
Failed global initialization: BadValue Invalid or no user locale set. Please ensure LANG and/or LC_* environment variables are set correctly.解决办法
$ export LC_ALL=C
Error: error: { "$err" : "not master and slaveOk=false", "code" : 13435 }
解决办法
rs.slaveOk()
问题三
一个结点一直是RECOVERING的状态
一般的解决办法是
1,从主结点上,把这个SECONDARY结点删除
rs.remove("192.168.0.64:27017")
2,关闭这个mongodb
3, 删除这个secondary结点上面的数据文件
删除/var/lib/mongodb 下面的所有的文件
4,重启这个secondary结点
5,在主结点上添加这个secondary结点
rs0:PRIMARY> rs.add("192.168.0.64:27017")
问题四, 修改replica set的配置
如果在配置文件里面修改了配置,但是在启动replica set的时候,还是使用旧的配置,
那就可以通过如下的语句在mongo里面强制使用新的配置
conf = rs.conf() cfg.members[0].host="192.168.0.64:27018" cfg.members[1].host="192.168.0.69:27018" cfg.members[2].host="192.168.0.60:27018" rs.reconfig(cfg,{force:true})