基于MongoDb创建NoSQL分布式的数据库

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")

可以以心感悟,以此沉淀,足矣;耳听佳音,目极美好,

基于MongoDb创建NoSQL分布式的数据库

相关文章:

你感兴趣的文章:

标签云: