Mongodb5.0.3 shard分片实验(Linux)问题合集

一、安装MongoDB

linux下MongoDB安装

二、遇到的问题:

1、config server的数量

建议config server的rs至少要有3个副本集成员。
参考文章1中提到config服务器个数需要是奇数,参考文章2提出2个服务器也可以,本次实验未验证。

2、启动mongos后闪退

原因:可能是上一次关闭mongos后端口未关闭。
解决:
查看端口:netstat -tunlp|grep 28000
并用kill -9 PID关闭。

3、addshard时报错:does not have a master.If this is a replica set, ensure that it has a health…

原因:Mongo版本为5.0.3,启动分片时增加了replSet属性将shard分为一组,且在启动分片后需要对其进行初始化。
参考:
MongoDB单复制集+路由本地部署指南
这里还做错了一次:
一开始的写错的代码的结果:

shards:
{ “_id” : “shard”, “host” : “shard/127.0.0.1:29001,127.0.0.1:29002,127.0.0.1:29003”, “state” : 1}

代码:

#注意replSet和config不同,但经实验发现这样会把三个端口都接到一个副本集,不符合配置要求
mongod --replSet shard --dbpath /newdata2/MongoShard/sh1/ --port 29001 --fork --logpath /newdata2/MongoShard/log/sh1.log --shardsvr --logappend

mongod --replSet shard --dbpath /newdata2/MongoShard/sh2/ --port 29002 --fork --logpath /newdata2/MongoShard/log/sh2.log --shardsvr --logappend

mongod --replSet shard --dbpath /newdata2/MongoShard/sh3/ --port 29003 --fork --logpath /newdata2/MongoShard/log/sh3.log --shardsvr --logappend
#登录mongos
mongo -port 29001
#初始化
config={
    
    _id:'shard',members:[{
    
    _id:0,host:'127.0.0.1:29001'},{
    
    _id:1,host:'127.0.0.1:29002'},{
    
    _id:2,host:'127.0.0.1:29003'}]}

rs.initiate(config)

实际要求和正确配置代码:
要求:

shards:
{ “_id” : “shard1”, “host” : “shard1/127.0.0.1:29001”, “state” : 1, “topologyTime” : Timestamp(1636915971, 2) }
{ “_id” : “shard2”, “host” : “shard2/127.0.0.1:29002”, “state” : 1, “topologyTime” : Timestamp(1636915977, 2) }
{ “_id” : “shard3”, “host” : “shard3/127.0.0.1:29003”, “state” : 1, “topologyTime” : Timestamp(1636915982, 2) }
代码:

#启动
mongod --replSet shard1 --dbpath /newdata2/MongoShard/sh1/ --port 29001 --fork --logpath /newdata2/MongoShard/log/sh1.log --shardsvr --logappend

mongod --replSet shard2 --dbpath /newdata2/MongoShard/sh2/ --port 29002 --fork --logpath /newdata2/MongoShard/log/sh2.log --shardsvr --logappend

mongod --replSet shard3 --dbpath /newdata2/MongoShard/sh3/ --port 29003 --fork --logpath /newdata2/MongoShard/log/sh3.log --shardsvr --logappend
#分别初始化
mongo -port 29001
config={
    
    _id:'shard1',members:[{
    
    _id:000,host:'127.0.0.1:29001'}]}
rs.initiate(config)

mongo -port 29002
config={
    
    _id:'shard2',members:[{
    
    _id:001,host:'127.0.0.1:29002'}]}
rs.initiate(config)

mongo -port 29003
config={
    
    _id:'shard3',members:[{
    
    _id:002,host:'127.0.0.1:29003'}]}
rs.initiate(config)

说明还是需要正确理解shard的配置和replSet的原理。

4、启动shard分片后显示mongo child process started successfully, parent exiting

说明分片启动成功。可用 ps -e|grep mongo查看。

5、addShard时显示:use replica set url format

输入命令sh.addShard("127.0.0.1:29001")时显示:

use replica set url format <setname>/<server1>,<server2>, ...

原因:Mongo版本不同。
解决:addShard需在admin库下执行,且应输入:sh.addShard("shard/127.0.0.1:29001")

三、参考

1、mongodb-分片shard-原理
2、MongoDB Sharding分片配置
(结合6看shard和replSet)
3、mongodb优化
4、MongoDB单复制集+路由本地部署指南
(配置最相似)
5、【MongoDB运维】Shard分片集群
6、mongodb4.0.2分片集群部署
(3个分片集)
7、MongoDB进行Sharding时遇到的问题
(看问题总结,以及移除分片用removeshard,但做实验的时候发现如果只剩一个shard集不能用)
8、Mongodb的安装、主从配置、replicaSet配置
(2.0.1,看参数说明)

猜你喜欢

转载自blog.csdn.net/ariarko/article/details/121320351