目录
一、安装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,看参数说明)