1,在Ubuntu上安装MongoDB
sudo apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv 7F0CEB10lsb_release -scsudo tee /etc/apt/sources.list.d/mongodb-org-3.0.listsudo apt-get updatesudo 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 = rs0bind_ip = 192.168.0.60由于mongodb 3.0会通过主机名称启动,所以有时候需要修改hosts里面主机名对应的ip
将主机名对应的
127.0.1.1 wzq-mongo1
修改为
192.168.0.60 wzq-mongo1然后重启mongodbsudo service mongod restart
4, 在wzq-mongo1上启动mongodb
mongo 192.168.0.605, 初始化replicationmongo> rs.initiate()6, 然后在这个新的rs上面添加成员,分别如下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")7, 查看目前的状态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}
8, 测试rs0:PRIMARY> db.test.insert({name:"wang",code:"w"})这样就可以在另外两个虚拟机上查看新添加的结果
恭喜你,在这个过程中,有可能出现如下的问题
问题一
解决办法
问题二
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")
可以以心感悟,以此沉淀,足矣;耳听佳音,目极美好,