mongodb分片集群搭建步骤

1、创建目录
1.1 创建数据目录
–Config
mkdir -p /opt/apps/mongodb/rs1/shareconf1/data/node1
mkdir -p /opt/apps/mongodb/rs1/shareconf2/data/node1
mkdir -p /opt/apps/mongodb/rs1/shareconf3/data/node1
–Master
mkdir -p /opt/apps/mongodb/rs1/share1/data/node1
mkdir -p /opt/apps/mongodb/rs1/share1/data/node2
mkdir -p /opt/apps/mongodb/rs1/share1/data/node3
–Slavte
mkdir -p /opt/apps/mongodb/rs1/share2/data/node1
mkdir -p /opt/apps/mongodb/rs1/share2/data/node2
mkdir -p /opt/apps/mongodb/rs1/share2/data/node3
–Arbiter
mkdir -p /opt/apps/mongodb/rs1/share3/data/node1
mkdir -p /opt/apps/mongodb/rs1/share3/data/node2
mkdir -p /opt/apps/mongodb/rs1/share3/data/node3
1.2 创建日志目录
mkdir -p /opt/apps/mongodb/rs1/share1/logs
mkdir -p /opt/apps/mongodb/rs1/share2/logs
mkdir -p /opt/apps/mongodb/rs1/share3/logs

mkdir -p /opt/apps/mongodb/rs1/shareconf1/logs
mkdir -p /opt/apps/mongodb/rs1/shareconf2/logs
mkdir -p /opt/apps/mongodb/rs1/shareconf3/logs

mkdir -p /opt/apps/mongodb/rs1/routers/logs
2、创建Config配置

vim /opt/apps/mongodb/rs1/conf/【shareconf1】/mongodb.cfg

在这里插入图片描述

3、创建Share配置
vim /opt/apps/mongodb/rs1/conf/node4/mongodb.cfg

在这里插入图片描述

4、创建路由配置
vim /opt/apps/mongodb/rs1/conf/routers/mongodb.cfg

在这里插入图片描述

5、启动并配置config server
5.1 启动
mongod -f /opt/apps/mongodb/rs1/conf/shareconf1/mongodb.cfg (启动相应shard与config server的mongodb服务)
5.2 将config与shard切片配置为副本集
(1)连接:
mongo 172.17.56.175:28001
(2)切换到admin:
use admin
(3)配置为副本集:
rs.initiate({_id:“config”,members: [
{_id:0,host:“172.17.56.175:28001”,priority:2},
{_id:1,host:“172.17.56.175:28002”,priority:1},
{_id:2,host:“172.17.56.175:28003”,priority:1}
]})
(4)切换到mongos节点,添加切片

启动mongos,注意mongos的启动是与其他类型的mongo实例不一样的
mongos -config /opt/apps/mongodb/rs1/conf/routers/mongodb.cfg
use admin
sh.addShard(“share1/172.17.56.175:27004,172.17.56.175:27005,172.17.56.175:27005”);
sh.addShard(“share2/172.17.56.175:27007,172.17.56.175:27008,172.17.56.175:27009”);
sh.addShard(“share3/172.17.56.175:27011,172.17.56.175:27012,172.17.56.175:27013”);
(5)为具体的数据库配置sharding
sh.enableSharding(“test”)
(6)要使单个collection也分片存储
db.runCommand({ shardcollection: “test.log”, key: { id:1,time:1}})
6、生成keyFile
openssl rand -base64 741 > /etc/mongo/mongodb-keyfile
chown mongod:mongod /etc/mongo/mongodb-keyfile
chmod 600 /etc/mongo/mongodb-keyfile

相关命令

分片集群相关命令
状态
1、查看集群的状态
sh.status()
sh.status({“verbose”:1})
开启分片
2、 对集合test.log开启分片
sh.enableSharding(“test”) //首先需要开启所属数据库的分片
sh.shardCollection(“test.tt”,{id:“hashed”}) //再开启相应数据库的分片
db.runCommand({ shardcollection: “test.log”, key: { id:1,time:1}})

for (i=1;i<=1000;i++) {db.t.insert({id:i,name:“Leo”})}

3、 查看集合分片结果
db.t.stats()

Zone与tag设置
4、建立tags
sh.addShardTag(“shard0000”, “NYC”)
5、移除tags
sh.removeShardTag(shard, tag)

6、添加Shards 到 Zone
sh.addShardToZone(“shard0000”, “NYC”)

7、删除,remove zone from a particular shard
sh.removeShardFromZone(“shard0002”, “NRT”)

8、 创建更新zone范围
sh.updateZoneKeyRange(“records.users”, { zipcode: “10001” }, { zipcode: “10281” },“NYC”)
sh.addTagRange( “chat.messages”, { “country” : “US”, “userid” : MinKey }, { “country” : “US”, “userid” : MaxKey }, “NA”)
sh.addTagRange( “exampledb.collection”, { state: “NY”, zip: MinKey },{ state: “NY”, zip: MaxKey },“NY”)

9、移除,Remove a Zone Range
sh.removeRangeFromZone(“records.user”, {zipcode: “10001”}, {zipcode: “10281”})
移除老的zone范围
sh.removeTagRange( “chat.messages”, { “country” : “UK”, “userid” : MinKey }, { “country” : “UK”, “userid” : MaxKey } “EU”)

10、查看,View Existing Zones
(1) sh.status()
(2)use config db.shards.find({ tags: “NYC” })
(3)use config db.tags.find({ tag: “NYC” })

11、主切片移动命令:
db.adminCommand( { movePrimary : “test”, to : “shard0001” } )

chunk
12、分裂chunk
sh.splitFind( “records.people”, { “zipcode”: “63109” } )
//splitFind()将包含与此查询匹配的第一个文档的块拆分为两个大小相等的块
sh.splitAt( “test.foo”, { x: 70 } )
//splitAt()不一定将块分成两个大小相等的块。拆分发生在与查询匹配的文档的位置,无论该文档在块中的何处。

13、合并chunk
db.adminCommand( {
mergeChunks: “test.members”,
bounds: [ { “username” : “user69816” },
{ “username” : “user96401” } ]
} )

14、修改chunk大小
连接到mongos
use config
db.settings.save( { _id:“chunksize”, value: } )

15、手动迁移块
db.adminCommand( { moveChunk : “myapp.users”,
find : {username : “smith”},
to : “mongodb-shard3.example.net” } )

Sharding
16、更改给定碎片的最大存储大小
config = db.getSiblingDB(“config”) config.shards.updateOne( { “_id” : “”}, { $set : { “maxSize” : 1024 } } )

17、列出分片
db.adminCommand( { listShards : 1 } )

18、删除切片
db.adminCommand( { removeShard: “mongodb0” } )

19、添加分片
sh.addShard(“share2/172.17.56.175:27007,172.17.56.175:27008,172.17.56.175:27009”)

Balancer
19、关闭、开启某一个集合的Balancer
sh.disableBalancing(“test.col”)
sh.enableBalancing(“test.col”)

禁用balancer
sh.stopBalancer()
启用
sh.setBalancerState(true)
sh.startBalancer()

20、查看Balancer是否正在运行
sh.isBalancerRunning()

21、检查balancer 状态:是否开启
sh.getBalancerState()
确认是否已启用或禁用集合的平衡
db.getSiblingDB(“config”).collections.findOne({_id : “students.grades”}).noBalance
此操作将_return null 错误,true,false或无输出:

null 错误表示集合命名空间不正确。
如果结果为true,则禁用平衡。
如果结果为false,则当前启用平衡,但过去已为集合禁用了平衡。此集合的平衡将在平衡器运行的下一个 time 开始。
如果操作未返回任何输出,则当前启用平衡,并且此集合以前从未禁用过。此集合的平衡将在平衡器运行的下一个 time 开始。

22、设置balancer 窗口
使用update()设置活动窗口
db.settings.update( { _id: “balancer” }, { $set: { activeWindow : { start : “”, stop : “” } } }, { upsert: true } )
删除窗口
use config db.settings.update({ _id : “balancer” }, { $unset : { activeWindow : true } })

23、清除jumbo flag
db.getSiblingDB(“config”).chunks.update( { ns: “test.foo”, min: { x: 2 }, jumbo: true }, { $unset: { jumbo: “” } } )
然后更新 cluster 路由元数据缓存,将mongo shell 连接到配置服务器 primary然后run flushRouterConfig:
db.adminCommand( { flushRouterConfig: “test.foo” } )

24、刷新路由
db.adminCommand(“flushRouterConfig”)

25、查看网络连接
db.adminCommand({“connPoolStats”:1})
查看mongos和mongod之间的连接信息,在一个分片上执行connPoolStats,输出信息中可以看到该分片与其他分片间的连接,包括连接到其他分

片做数据迁移的连接。

注意事项:

1、mongos与configs server 相同密码,shard需要不同的密码:方法:在配置shard脚本中重置root密码

2、mongos开机自启动:在mongos脚本关掉起先的mongod,禁掉mongod的开机自启,开启mongos的开机自启。


版权声明:本文为weixin_44093264原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。