mongodb集群安装

本文介绍了MongoDB集群的安装过程,包括一个shard、三个配置服务器和一个副本集的配置。同时,针对启动时遇到的错误'Insufficient free space for journal files',解析了错误原因并提供了解决方案——使用'smallfiles'参数来启动MongoDB。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.集群安装,一个shard、三个配置服务器、一个副本集(一个主节点、一个备节点和一个仲裁节点),这里用端口来实现节点。

1).启动副本集各节点(需要注意目录)
  //启动主节点
./mongod --shardsvr --replSet shard1 --port 18010 --oplogSize 100 \
--dbpath /usr/local/mongodb/shardserver1/shard1/replcaset1/master \
--logpath /usr/local/mongodb/shardserver1/shard1/replcaset1/master/log/master.log \
--logappend --fork --rest


  //启动备节点(我的磁盘空间不够了,使用--smallfiles参数,下面一样)
./mongod --smallfiles --shardsvr --replSet shard1 --port 18011 --oplogSize 100 \
--dbpath /usr/local/mongodb/shardserver1/shard1/replcaset1/slaver \
--logpath /usr/local/mongodb/shardserver1/shard1/replcaset1/slaver/log/slaver.log \
--logappend --fork --rest


  //启动仲裁节点
./mongod --smallfiles --shardsvr --replSet shard1 --port 18012 --oplogSize 100 \
--dbpath /usr/local/mongodb/shardserver1/shard1/replcaset1/arbiter \
--logpath /usr/local/mongodb/shardserver1/shard1/replcaset1/arbiter/log/arbiter.log \
--logappend --fork --rest


2).登陆主节点
./mongo admin -port 18010


3).初始化
//部署副本集,优先级(这里priority:2最高)最高的为主节点,仲裁节点中arbiterOnly设为true,不然贮备模式不生效。
config_shard1={_id:"shard1",members:[{_id:0,host:"127.0.0.1:18010",priority:2},{_id:1,host:"127.0.0.1:18011",priority:1},{_id:2,host:"127.0.0.1:18012",arbiterOnly:true}]}


//使上面的配置生效。
rs.initiate(config_shard1);


//也可以下面这样初始化,初始化备节点
rs.add("127.0.0.1:18011")
//初始化仲裁节点
rs.addArb("127.0.0.1:18012")


//查看部署结果
rs.conf()


4).启动配置服务器(这里我配了三个服务器,一般测试环境一个,生产环境三个,同样注意目录)
./mongod --configsvr --dbpath /usr/local/mongodb/configserver/set1 \
--port 40000 --logpath /usr/local/mongodb/configserver/set1/config.log \
--logappend -fork --rest


./mongod --configsvr --dbpath /usr/local/mongodb/configserver/set2 \
--port 40001 --logpath /usr/local/mongodb/configserver/set2/config.log \
--logappend -fork --rest


./mongod --configsvr --dbpath /usr/local/mongodb/configserver/set3 \
--port 40002 --logpath /usr/local/mongodb/configserver/set3/config.log \
--logappend -fork --rest


5).启动路由服务器 
./mongos --configdb 127.0.0.1:40000,127.0.0.1:40001,127.0.0.1:40002 --port 50000 --chunkSize 5 \
--logpath /usr/local/mongodb/log/route.log --logappend --fork


6).添加数据库的用户名和密码


//连接mongos
./mongo admin -port 50000


//添加用户
db.addUser("admin","admin")


//使用admin
use admin


//添加shard
db.runCommand({addshard:"shard1/127.0.0.1:18010"})
//db.runCommand({addshard:"shard2/127.0.0.1:18030"})


//列出shard个数
db.runCommand({listshards:1}) 


//创建库
db.runCommand({enablesharding:"test_demo"}) 


//使用test_demo.student表来做分片,片键为id,唯一
db.runCommand({shardcollection:"test_demo.student",key:{"_id":1},unique:true}) 


//查看配置结果:
printShardingStatus();


--- Sharding Status --- 
  sharding version: {
        "_id" : 1,
        "version" : 3,
        "minCompatibleVersion" : 3,
        "currentVersion" : 4,
        "clusterId" : ObjectId("589c0e39c86fed5bc778e1ad")
}
  shards:
  databases:

        {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }


2.
1).mongodb正常关闭:kill -2 50000或者use admin ,db.shutdownServer(); 
2).集群:use admin,db.adminCommand({shutdown:1,force:true}) 或者 db.shutdownServer({force:true});
3).集群指定时间关闭:use admin,db.adminCommand({shutdown:1,force:true,timeoutsec:5}) 或者 db.shutdownServer({force:true,timeoutsec:5});


3.
mongodb启动时出现以下错误:
about to fork child process, waiting until server is ready for connections.
forked process: 134148
all output going to: /usr/local/mongodb/shardserver1/shard1/replcaset1/arbiter/log/arbiter.log
ERROR: child process failed, exited with error number 100


刚开始一直以为mongodb非正常关闭导致,后来发现不是这个原因。


日志查看:
一定要看日志,log/日志文件.
查看日志文件如下:
Thu Feb  9 00:37:52.502 [initandlisten] MongoDB starting : pid=134148 port=18012 dbpath=/usr/local/mongodb/shardserver1/shard1/replcaset1/arbiter 64-bit host=test_node2
Thu Feb  9 00:37:52.503 [initandlisten] db version v2.4.9
Thu Feb  9 00:37:52.503 [initandlisten] git version: 52fe0d21959e32a5bdbecdc62057db386e4e029c
Thu Feb  9 00:37:52.503 [initandlisten] build info: Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_49
Thu Feb  9 00:37:52.503 [initandlisten] allocator: tcmalloc
Thu Feb  9 00:37:52.503 [initandlisten] options: { dbpath: "/usr/local/mongodb/shardserver1/shard1/replcaset1/arbiter", fork: true, logappend: true, logpath: "/usr/local/mongodb/shardserver1/shard1/replcaset1/arbiter/log/arbiter.log", oplogSize: 100, port: 18012, replSet: "shard1", rest: true, shardsvr: true }
Thu Feb  9 00:37:52.513 [initandlisten] journal dir=/usr/local/mongodb/shardserver1/shard1/replcaset1/arbiter/journal
Thu Feb  9 00:37:52.513 [initandlisten] recover : no journal files present, no recovery needed
Thu Feb  9 00:37:52.513 [initandlisten] 
Thu Feb  9 00:37:52.513 [initandlisten] ERROR: Insufficient free space for journal files
Thu Feb  9 00:37:52.513 [initandlisten] Please make at least 3379MB available in /usr/local/mongodb/shardserver1/shard1/replcaset1/arbiter/journal or use --smallfiles
Thu Feb  9 00:37:52.513 [initandlisten] 
Thu Feb  9 00:37:52.513 [initandlisten] exception in initAndListen: 15926 Insufficient free space for journals, terminating
Thu Feb  9 00:37:52.513 dbexit: 
Thu Feb  9 00:37:52.513 [initandlisten] shutdown: going to close listening sockets...
Thu Feb  9 00:37:52.513 [initandlisten] shutdown: going to flush diaglog...
Thu Feb  9 00:37:52.513 [initandlisten] shutdown: going to close sockets...
Thu Feb  9 00:37:52.513 [initandlisten] shutdown: waiting for fs preallocator...
Thu Feb  9 00:37:52.513 [initandlisten] shutdown: lock for final commit...
Thu Feb  9 00:37:52.513 [initandlisten] shutdown: final commit...
Thu Feb  9 00:37:52.513 [initandlisten] shutdown: closing all files...
Thu Feb  9 00:37:52.513 [initandlisten] closeAllFiles() finished
Thu Feb  9 00:37:52.513 [initandlisten] journalCleanup...
Thu Feb  9 00:37:52.513 [initandlisten] removeJournalFiles
Thu Feb  9 00:37:52.514 [initandlisten] shutdown: removing fs lock...
Thu Feb  9 00:37:52.514 dbexit: really exiting now


导致的原因:journal至少以2G的数量进行增长,我这边是磁盘不够用报的错。
解决方法:./mongod --smallfiles 带这个参数就可以。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值