mongodb是非常流行的nosql型数据库 集合对应的是mysql里的表 文档对应的表里的一条数据
mongodb也非常绿色 直接解压就能用 也太绿色了。。。
以下mongodb的复制集跟分片的安装与测试
本机启动三个mongod 一个mongos 一个config
端口27017、27018为集合1
端口27019为集合2
端口20000为mongos
端口21000为config
下载mongodb-linux-x86_64-2.6.10.tgz
把mongodb解压到/usr/local/目录下
netstat -tln #查看默认端口27017是否占用
mkdir -p /data/mongodb/rs1.1
mkdir -p /data/mongodb/rs1.2
mkdir -p /data/mongodb/rs1.3
普通启动
/usr/local/mongodb/bin/mongod --port 27019 --dbpath /data/mongodb/rs2.1/ --logpath=/var/log/mongodb/rs2.1.log --fork #默认端口27017
复制集
第一个mongod服务
/usr/local/mongodb/bin/mongod --port 27017 --dbpath=/data/mongodb/rs1.1/ --logpath=/var/log/mongodb/rs1.1.log --replSet rs1 --fork --logappend #默认端口27017
mongod的配置参数也可以写在文件里 -f
port=27017
dbpath=/data/mongodb/rs1.1/
logpath=/var/log/mongodb/rs1.1.log
logappend=true
bind_ip=默认绑定外网ip,为了安全绑定服务器的内网ip
storageEngine=wiredTiger
fork=true
storageEngine=wiredTiger 为mongod的新引擎
fork=true后台运行
第二个mongod服务
/usr/local/mongodb/bin/mongod --port 27018 --dbpath=/data/mongodb/rs1.2/ --logpath=/var/log/mongodb/rs1.2.log --replSet rs1 --fork --logappend
第三个mongod服务
/usr/local/mongodb/bin/mongod --port 27019 --dbpath=/data/mongodb/rs1.3/ --logpath=/var/log/mongodb/rs1.3.log --replSet rs1 --fork --logappend
客户端连接
/usr/local/mongodb/bin/mongo --host 127.0.0.1 --port 27017
//配置节点信息
config={_id : 'rs1',members : [{_id : 0, host : '127.0.0.1:27017'},{_id : 1, host : '127.0.0.1:27018'},{_id : 2, host : '127.0.0.1:27019'}]}
//这个过程可能要等个一到两分钟的时间
rs.initiate(config)
rs.status()
rs.reconfig(config) #重新加载config
创建config-service服务器
mkdir -p /data/mongodb/config/
mkdir -p /var/log/mongodb/config/
/usr/local/mongodb/bin/mongod --dbpath /data/mongodb/config/ --port 21000 --configsvr --logpath /var/log/mongodb/config/config.log --fork
配置mongos
/usr/local/mongodb/bin/mongos --configdb 127.0.0.1:21000 --logpath /var/log/mongodb/mongos/mongos.log --fork --port 20000
mongods的配置参数同样也可以写在文件里 -f
configdb=127.0.0.1:21000
logpath=/var/log/mongodb/mongos/mongos.log
logappend=true
bind_ip=默认绑定外网ip,为了安全绑定服务器的内网ip
fork=true
配置shard分片,先连接mongos
/usr/local/mongodb/bin/mongo --port 20000
#添加分片
use admin
db.runCommand( { addShard : "rs1/127.0.0.1:27017,127.0.0.1:27018"}); #如果有复制集则rs1为复制集的名字
db.runCommand( { addShard : "127.0.0.1:27019"});
开启test库的分片功能
db.runCommand({"enablesharding":"test"})
开启user集合分片功能
db.runCommand({"shardcollection":"test.user","key":{"name":1}})
插入100000条测试分片
for (var i = 1; i <= 100000; i++) db.user.save({id : i, name : i+'aaa'+i});
客户端连接
/usr/local/mongodb/bin/mongo --host 127.0.0.1 --port 27017
#显示数据库
show dbs
#得到当前db的所有聚集集合
db.getCollectionNames();
#创建集合
db.createCollection('user')
db.getMongo().setSlaveOk(); #从库读
Object.bsonsize(db.user.findOne());
mongodb基本操作(注意有些例子单引号是中文)
http://www.cnblogs.com/TankMa/archive/2011/06/08/2074947.html
创建集合
http://www.yiibai.com/mongodb/mongodb_create_collection.html
关闭mongodb
先通过shell连上服务器:
mongo
use admin
db.shutdownServer()
或者直接kill -15 ,注意kill -9 可能会导致数据文件损坏
或者mongod –shutdown –dbpath /data/mongodb/
添加仲裁节点
常见问题:
一:
mongodb启动不了:child process failed, exited with error number 100
http://www.dataguru.cn/thread-107361-1-1.html
没有正常关闭mongodb引起的
先删除数据库db下的mongod.lock文件
./mongod –logpath /var/log/mongodb1 –fork –dbpath /data/db1 –repair
/usr/local/mongodb/bin/mongod –port 27019 –dbpath=/data/rs1.3/ –logpath=/var/log/mongodb/rs1.3.log –repair
二:
看日志
2015-09-10T17:05:26.167+0800 [initandlisten] ERROR: Insufficient free space for journal files
2015-09-10T17:05:26.167+0800 [initandlisten] Please make at least 3379MB available in /data/rs2.1/journal or use –smallfiles
加–smallfiles启动
rs.status()
rs.isMaster()
rs.conf()
db.printSlaveReplicationInfo()
db.getMongo().setSlaveOk()
rs.setSlaveOk()
1.锁定已有的一个从库,并将缓存中的数据写入到磁盘
use admin
db.runCommand({“fsync”:1, “lock”:1})
2.拷贝被锁定从库的数据文件到新建从库的数据目录
3.解锁从库
db.$cmd.sys.unlock.findOne()
db.currentOp()
4.启动新从库
./mongod –replSet rs1 –keyFile /data/set/key/r4 –fork –port 28014 –dbpath /data/set/r4 –logpath=/data/set/log/r4.log –logappend –fastsync
5.rs.add(“localhost:27017”)
6.删除节点:
主节点上面执行 rs.remove(“ip:port”)