这两天需要部署一套mongodb测试用,好久没搞过了,第一反应是上网找找有没有现成的资料,就不用我自己再摸索了,一切还是懒癌至上,结果发现网上的很多资料都是不全的,折腾了半天还是自己弄弄好
记录一下自己做的步骤,给自己以后做个备份也给大家一个参考
测试系统就不部署太复杂
一个复制集(一主一从),两个配置服务,一个路由,访问走路由,都部署在一台机器上
下载就不说了,能找到这篇文章的估计都不会卡在下载上
下面是复制集的配置
主要就是replSet参数,需要配置,而且两个需要配置成同一个值
mongo1.conf
logpath=/home/mongodb/logs/mongod.log
logappend=true
fork=true
port=22002
dbpath=/home/mongodb/data
pidfilepath=/home/mongodb/data/mongod.pid
oplogSize=4096
maxConns=64000
directoryperdb=true
bind_ip=0.0.0.0
replSet=XXX
shardsvr=true
mongo2.conf
logpath=/home/mongodb2/logs/mongod.log
logappend=true
fork=true
port=22003
dbpath=/home/mongodb2/data
pidfilepath=/home/mongodb2/data/mongod.pid
oplogSize=4096
maxConns=64000
directoryperdb=true
bind_ip=0.0.0.0
replSet=XXX
shardsvr=true
然后用
./mongod -f mongo1.conf
./mongod -f mongo2.conf
都启起来
起来之后连上1
执行下面的命令设置主从关系
rs.initiate({"_id":"XXX","members":[{"_id":0,"host":"ip:22002"},{"_id":1,"host":"ip:22003"}]})
到这里复制集部分就配置完了
下面配置配置服务的
两个配置文件如下,记得要加上configsvr参数来指定是配置服务
这里也要配置replSet来说明这是一组的
logpath=/home/mongoconf/log/mongod.log
logappend=true
configsvr=true
fork=true
port=22004
dbpath=/home/mongoconf/data
pidfilepath=/home/mongoconf/data/mongod.pid
bind_ip=0.0.0.0
replSet=XXXconf
logpath=/home/mongoconf1/log/mongod.log
logappend=true
configsvr=true
fork=true
port=22005
dbpath=/home/mongoconf1/data
pidfilepath=/home/mongoconf1/data/mongod.pid
bind_ip=0.0.0.0
replSet=XXXconf
记得也要init啊,mongo中凡是配置了replSet的都需要用下面的方法初始化一下
rs.initiate({"_id":"XXXconf","members":[{"_id":0,"host":"ip:22004"},{"_id":1,"host":"ip:22005"}]})
然后用mongod把两个服务启动起来
再就是路由了
路由没配多个,多个反正就加replSet就行
路由配置如下
注意的就是configdb的参数,指定配置服务的地址
port=22006
configdb=XXXconf/ip:22004,ip:22005
fork = true
logpath = /home/mongos/log/mongo.log
bind_ip=0.0.0.0
用mongos把路由服务启起来
连上路由,如果用replSet配置了多个的话记得初始化,我这儿起的单个就不用初始化了
接下来增加分片
我就一对儿复制集,实际就一个分片,复制集的两个机器都是同一个分片的
执行下面的命令
use admin
db.runCommand({addshard:"XXX/ip:22002"} )
db.runCommand({addshard:"XXX/ip:22003"} )
这里吧复制集的两台机器都加到了同一个名字XXX下面,实际就是同一个分片了
执行下面的命令就能看到分片的信息
db.runCommand( {listshards : 1 } )
基本到这儿就顺利部署完了
这里简单说明也说一下遇到过的问题
账号密码的问题
很多帖子里面说必须设置账号密码,否则无法配置复制集。这个跟你用的账号有关,如果是在root下面部署的话就没限制,不用root的话才需要设置,着看你们公司对这个东西控制严格不严格了
报错问题
No host described in new configuration 1 for replica set tag maps to this node
通常遇到这个问题是由于在replSet初始化的时候members里面没有自己,一定要含自己,这个在网上很多帖子里面都是错的,只写了除自己外的其他服务地址,就会报这个错
cannot accept sharding commands if not started with --shardsrv
这个问题比较奇怪,是我用robo连上路由创建表时报的错,但是通过命令行连上mongos创建就没问题,后来是在复制集的启动参数中增加了shardsvr=true解决的,具体原因也就没深究了