`环境准备
ip 服务 192.168.5.111 shard1-master shard2-slave shard3-仲裁 192.168.5.112 shard2-master shard3-slave shard1-仲裁 192.168.5.113 shard3-master shard1-slave shard2-仲裁 192.168.5.151 mongos 192.168.5.152 mongos 192.168.5.111 config-server 192.168.5.112 config-server 192.168.5.113 config-server
服务 端口 shard1 29001 shard2 29002 shard3 29003
mongos 27017 config 28000
1.创建目录 把mongodb解压到/data1/bin
配置环境变量export PATH=$PATH:/opt/mongodb/bin
2.创建目录 shard-server mkdir -p /opt/mongodb/{shard1,shard2,shard3}/{data,log}
config-server mkdir -p /opt/mongodb/configsvr/{data,log}
mongos-server mkdir -p /opt/mongodb/mongos/{data,log}
- 启动3台config-server 必须是奇数台
/opt/mongodb/bin/mongod --configsvr --dbpath /opt/mongodb/configsvr/data --fork --logpath /opt/mongodb/configsvr/log/configsvr.log --logappend --port 28000
- 启动2台mongos-server
/opt/mongodb/bin/mongos --configdb 192.168.5.111:28000,192.168.5.112:28000,192.168.5.113:28000 --port 27017 --fork --logpath /opt/mongodb/mongos/log/mongos.log
禁用NUMA 第一次先正常启动,第二次加numactl启动 numactl --interleave=all mongod [ options ]
- 配置各个分片的副本集
在每个mongod server 分别设置分片1服务器及副本集shard1
参数 --chunkSize 100 默认是64MB,取值范围是1 MB 到 1024 MB
numactl --interleave=all /opt/mongodb/bin/mongod --shardsvr --replSet shard1 --port 29001 --dbpath /opt/mongodb/shard1/data --logpath /opt/mongodb/shard1/log/shard1.log --fork --journal --oplogSize 5000 --storageEngine wiredTiger --directoryperdb --wiredTigerDirectoryForIndexes --wiredTigerCacheSizeGB 2 --wiredTigerCollectionBlockCompressor zlib --wiredTigerJournalCompressor zlib
numactl --interleave=all /opt/mongodb/bin/mongod --shardsvr --replSet shard2 --port 29002 --dbpath /opt/mongodb/shard2/data --logpath /opt/mongodb/shard2/log/shard2.log --fork --journal --oplogSize 5000 --storageEngine wiredTiger --directoryperdb --wiredTigerDirectoryForIndexes --wiredTigerCacheSizeGB 2 --wiredTigerCollectionBlockCompressor zlib --wiredTigerJournalCompressor zlib
numactl --interleave=all /opt/mongodb/bin/mongod --shardsvr --replSet shard3 --port 29003 --dbpath /opt/mongodb/shard3/data --logpath /opt/mongodb/shard3/log/shard3.log --fork --journal --oplogSize 5000 --storageEngine wiredTiger --directoryperdb --wiredTigerDirectoryForIndexes --wiredTigerCacheSizeGB 2 --wiredTigerCollectionBlockCompressor zlib --wiredTigerJournalCompressor zlib
================================================================================================= ip 服务 192.168.5.111 shard1-master shard2-slave shard3-仲裁 192.168.5.112 shard2-master shard3-slave shard1-仲裁 192.168.5.113 shard3-master shard1-slave shard2-仲裁
ID靠前的为主
#设置第一个分片副本集 mongo --port 29001
#使用admin数据库 use admin
#定义副本集配置 config = { _id:"shard1", members:[ {_id:0,host:"192.168.5.111:29001"}, {_id:1,host:"192.168.5.113:29001"}, {_id:2,host:"192.168.5.112:29001",arbiterOnly:true} ] }
rs.initiate(config) 注意:最后不要加分号
#设置第二个分片副本集 mongo --port 29002
#使用admin数据库 use admin
#定义副本集配置 config = { _id:"shard2", members:[ {_id:0,host:"192.168.5.112:29002"}, {_id:1,host:"192.168.5.111:29002"}, {_id:2,host:"192.168.5.113:29002",arbiterOnly:true} ] }
rs.initiate(config)
=================================================================================================
#设置第三个分片副本集 mongo --port 29003
#使用admin数据库 use admin
#定义副本集配置 config = { _id:"shard3", members:[ {_id:0,host:"192.168.5.113:29003"}, {_id:1,host:"192.168.5.112:29003"}, {_id:2,host:"192.168.5.111:29003",arbiterOnly:true} ] }
rs.initiate(config)
=================================================================================================
- 使分片生效 连接到mongos
mongo 192.168.5.151:27017 use admin
串联mongos与分配副本集
db.runCommand( { addshard : "shard1/192.168.5.111:29001,192.168.5.112:29001,192.168.5.113:29001"});
db.runCommand( { addshard : "shard2/192.168.5.111:29002,192.168.5.112:29002,192.168.5.113:29002"});
db.runCommand( { addshard : "shard3/192.168.5.111:29003,192.168.5.112:29003,192.168.5.113:29003"});
#查看分片服务器的配置 db.runCommand( { listshards : 1 } )
#查看集群信息 sh.status() 或 db.printShardingStatus()
参数说明: 第一:shards 分成三片,shard1 shard2 shard3 第二:databases: partitioned表示是否分区 第三:chunks: 分成了一段。都在shard0000
- 创建t2库users集合分片 use t2
创建索引 db.users.ensureIndex({"username":1})
标识数据库t2可以启用分片,但实际上并没有进行分片 sh.enableSharding("t2")
sh.shardCollection("t2.users",{"username":1})
for (var i=0; i<100; i++) { db.users.insert({"username" : "user"+i, "created_at" : new Date()}); } 单行方式 for (var i=0; i<10000; i++) { db.users.insert({"username" : "user"+i, "created_at" : new Date()}); }
======================================================================== 标识数据库testdb可以启用分片,但实际上并没有进行分片 sh.enableSharding("testdb")
查看分片信息 sh.status() sh.status({verbose:true}) 查看分片详细信息
#再对集合进行分片,name字段是片键 sh.shardCollection("testdb.table1",{"name":1})
#插入数据 use testdb for (var i = 1; i <= 10; i++) { db.table1.save({id:i,"test1":"testval1"}) }
#查看集合table1分片分布情况 db.table1.stats()
#查看数据库分片状态 需要先选择一个数据库 use db1 db.stats()
db.runCommand( { shardcollection : "testdb.table1",key : {id: 1} } )
书上的for for (var i=0; i<100000; i++) { db.user.insert({"username" : "user"+i, "created_at" : new Date()}); }
db.user.count()
========================================================================
安装失败清理数据
mongod-server
rm -rf /opt/mongodb/shard1/data/* rm -rf /opt/mongodb/shard2/data/* rm -rf /opt/mongodb/shard3/data/* rm -rf /opt/mongodb/shard1/log/* rm -rf /opt/mongodb/shard2/log/* rm -rf /opt/mongodb/shard3/log/*
config-server rm -rf /opt/mongodb/configsvr/data/* rm -rf /opt/mongodb/configsvr/log/*
mongos-server rm -rf /opt/mongodb/mongos/data/* rm -rf /opt/mongodb/mongos/log/* `