我正在尝试MongoDB的shard tutorial,进行一些简单的测试(概念验证项目)。
我想在一台机器上尝试分片。这有可能和/或它有意义吗?
当我按照指南步骤操作时,它不起作用。
首先,我在我的机器上启动mongod configsrv数据库实例:
bin/mongod --configsvr --dbpath $BASEDIR/data/configdb --port 27019 &
bin/mongod --configsvr --dbpath $BASEDIR/data/configdb1 --port 27020 &
bin/mongod --configsvr --dbpath $BASEDIR/data/configdb2 --port 27021 &
然后,我启动mongos实例,以便它们“绑定”到配置服务器:
HOST=$(uname -n) # my machine's name
# starts on default poort 27017
bin/mongos --configdb $HOST:27019,$HOST:27020,$HOST:27021
直到这里,一切看起来都不错。
现在我想将一个碎片添加到群集中:
bin/mongo --host $(uname -n)
它进入MongoDB shell。
连接到:my.machine.name:27017/test
但是当我尝试添加新的分片时,出现以下错误:
mongos> sh.addShard( "rs1/my.machine.name:27017" )
{
"ok" : 0,
"errmsg" : "couldn't connect to new shard socket exception [CONNECT_ERROR] for rs1/my.machine.name:27017"
}
我尝试过ip,机器的别名,localhost ......似乎没什么用。
有人可以帮我吗?也许我错过了一点。
提前致谢
答案 0 :(得分:0)
我有同样的问题,你必须运行
mongod&
在你的每个碎片上
然后你可以打电话
sh.addShard(“rs1 / my.machine.name:27017”)
答案 1 :(得分:-1)
可能,按照以下顺序。
假设我们想在同一台机器上创建一个包含3个分片的群集,每个分片有1个副本。
mkdir -p / data / shard0 / rs0 / data / shard0 / rs1 / data / shard0 / rs2
/bin/mongod --replSet Sv1 --logpath "Sv1-r0.log" --dbpath /data/shard0/rs0 --port 37017
/bin/mongod --replSet Sv2 --logpath "Sv2-r0.log" --dbpath /data/shard0/rs1 --port 47017
/bin/mongod --replSet Sv3 --logpath "Sv3-r0.log" --dbpath /data/shard0/rs2 --port 57017
这将启动3个mongod服务器/分片,每个分片有一个副本
/bin/mongo --port 37017 << 'EOF'
config = { _id: "Sv1", members:[
{ _id : 0, host : "<ip>:37017" }]};
rs.initiate(config)
EOF
这会将副本添加到副本集Sv1。这应该针对每个分片进行,即在每个端口47017和57017
上进行现在我们已准备好使用分片和副本的集群,但没有人知道其他分片和副本,因此我们需要配置服务器
/bin/mongod --logpath "cfg-a.log" --dbpath /data/config/config-a --port 57040 --fork --configsvr
然后启动mongos进行管理员访问,
/bin/mongos --logpath "mongos-1.log" --configdb 10.88.66.218:57040
现在将碎片添加到我们的群集中,
/bin/mongo <<'EOF'
db.adminCommand( { addShard : "Sv1/"+"<ip>:37017" } );
db.adminCommand( { addShard : "Sv2/"+"<ip>:47017" } );
db.adminCommand( { addShard : "Sv3/"+"<ip>:57017" } );
use db
db.createCollection("col1")
db.adminCommand({enableSharding:"db"}) db.adminCommand({shardCollection: "db.col1", key: {_id:"hashed"}});
EOF
就是这样......群集应该有3个分片。你可以在mongos上查看sh.status()命令。