王厕所

coder的自我修养

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

最近nodejs很火,我也忍不住随潮流去研究了下。

哎。都是英文文档看起来老吃力了,随便看了点,也没点具体印象。

最后看到mongodb的时候觉得挺有意思于是自己也试着接触下。

简单的CRUD就不说了,语法很好玩

db.news.find()

db.news.save({title:'testtitle',content:'testcontent',addTime:new Date()})

db.news.remove({title:'testtitle'})

db.news.update({title:'testtitle'},{$set:{title:'testtitle1'}})

简单点这样了。

下面进如主题mongodb集群(不分片,主要就是主从数据库备份,额,大概就是这么个意思)

step1:建立数据库存放地址以及日志文件

mkdir -p /root/mongo/database/r0 /root/mongo/database/r1 /root/mongo/database/r2

mkdir -p /root/mongo/log

vi /root/mongo/log/r0.log

vi /root/mongo/log/r1.log

vi /root/mongo/log/r2.log

step2:启动3个mongodb

我的mongodb路径是/root/mongodb/

/root/mongodb/bin/mongod -dbpath=/root/mongo/database/r0 -logpath=/root/mongo/log/r0.log -logappend -fork -rest -replSet mongoSet -port 27017 -directoryperdb

forked process: 1453
all output going to: /root/mongo/log/r0.log
child process started successfully, parent exiting

/root/mongodb/bin/mongod -dbpath=/root/mongo/database/r1 -logpath=/root/mongo/log/r1.log -logappend -fork -rest -replSet mongoSet -port 27018 -directoryperdb

forked process: 1517
all output going to: /root/mongo/log/r1.log
child process started successfully, parent exiting

/root/mongodb/bin/mongod -dbpath=/root/mongo/database/r2 -logpath=/root/mongo/log/r2.log -logappend -fork -rest -replSet mongoSet -port 27019 -directoryperdb

forked process: 1565
all output going to: /root/mongo/log/r2.log
child process started successfully, parent exiting

[root@nodeLinux bin]# ./mongo 127.0.0.1:27017
MongoDB shell version: 2.2.0
connecting to: 127.0.0.1:27017/test
> rs.initiate()
{
"info2" : "no configuration explicitly specified -- making one",
"me" : "nodeLinux:27017",
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1
}

> rs.add('127.0.0.1:27018')  //这里这样不知道为什么不行
{
"errmsg" : "exception: can't use localhost in repl set member names except when using it for all members",
"code" : 13393,
"ok" : 0
}
mongoSet:PRIMARY> rs.add('localhost:27018')//这里也不行
{
"errmsg" : "exception: can't use localhost in repl set member names except when using it for all members",
"code" : 13393,
"ok" : 0
}
mongoSet:PRIMARY> rs.add('nodeLinux:27018')//只能用hostname,貌似就行了。这里也可以用rs.initiate({_id:'mongoSet',member:                  [{_id:0,host:'nodeLinux:27017'},{_id:1,host:'nodeLinux:27018'},{_id:2,host:'nodeLinux:27019'}]})什么的吧。我没去试,看mongodb的DOC用的add
{ "ok" : 1 }

mongoSet:PRIMARY> rs.add('nodeLinux:27019')
{ "ok" : 1 }

mongoSet:PRIMARY> rs.status()
{
"set" : "mongoSet",
"date" : ISODate("2012-09-04T05:23:32Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "nodeLinux:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 1011,
"optime" : Timestamp(1346735894000, 1),
"optimeDate" : ISODate("2012-09-04T05:18:14Z"),
"self" : true
},
{
"_id" : 1,
"name" : "nodeLinux:27018",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 318,
"optime" : Timestamp(1346735894000, 1),
"optimeDate" : ISODate("2012-09-04T05:18:14Z"),
"lastHeartbeat" : ISODate("2012-09-04T05:23:32Z"),
"pingMs" : 0
}
],
"ok" : 1
}

mongoSet:PRIMARY> use test;
switched to db test
mongoSet:PRIMARY> db.news.save({title:'testtitle',content:'testcontent',addTime:new Date()});

在另外一个窗口连接27018

[root@nodeLinux ~]# cd /root/mongodb/bin/
[root@nodeLinux bin]# ./mongo 127.0.0.1:27018
MongoDB shell version: 2.2.0
connecting to: 127.0.0.1:27018/test

mongoSet:SECONDARY> db.news.find()
error: { "$err" : "not master and slaveOk=false", "code" : 13435 }//这里会报错哦,从库不能读写滴。
mongoSet:SECONDARY>rs.slaveOk()//不过这样一下就可以读了

mongoSet:SECONDARY> db.news.save({title:'testtitle111',content:'testcontent111',addTime:new Date()})//还是不能写,哈哈哈
not master
mongoSet:SECONDARY>

 

这就搭建完毕了,至于后面怎么弄就以后再说吧。。。

 

哎,这么简单的过程我搞了好几天,主要是每次建好数据库以后,在配置的时候总是提示我“all members and seeds must be reachable to initiate set”,查了点资料,说是在配置的时候要用hostname,别用IP地址,结果我用hostname也不行,哎呀,linux基础不行啊,最后纠结了好几天,查了数据库的log文件才发现每次都有这样的提示:"mongodb getaddrinfo("nodeLinxu") failed: Temporary failure in name resolution",应该是hosts没设置的原因了。。。

vi /etc/hosts加上即可,不过迷糊的是为什么127.0.0.1 nodeLinux不行呢,只能用192.168.10.28 nodeLinux(我虚拟机的IP是这个)才行。

一波十八折总算也勉强跑起来了。

 

posted on 2012-09-04 13:43  王厕所  阅读(2390)  评论(0编辑  收藏  举报