准备目录 mkdir -p /root/Mongo6_Shardingchmod 777 -R /root/Mongo6_Shardingcd /root/Mongo6_Sharding# 生成证书 openssl rand -base64128 > /root/Mongo6_Sharding/keyFilechmod 600 /root/Mongo6_Sharding/keyFile搭建Config Server # 创建目录并拷贝证书 sudo mkdir -p /root/Mongo6_Sharding/mongo6-config-0/dbsudo mkdir -p /root/Mongo6_Sharding/mongo6-config-0/configdbsudo chmod -R777 /root/Mongo6_Sharding/mongo6-config-0cp -a /root/Mongo6_Sharding/keyFile /root/Mongo6_Sharding/mongo6-config-0/configdb/# 配置文件 cat > /root/Mongo6_Sharding/mongo6-config-0/configdb/mongod.conf<< EOF net: port: 21000 bindIpAll: true security: keyFile: /data/configdb/keyFile authorization: enabled replication: replSetName: rs-conf-0 sharding: clusterRole: configsvr storage: wiredTiger: engineConfig: cacheSizeGB: 0.5 EOF 搭建Shard-0 # 创建目录并拷贝证书 mkdir -p /root/Mongo6_Sharding/mongo6-shard-0/dbmkdir -p /root/Mongo6_Sharding/mongo6-shard-0/configdbchmod -R777 /root/Mongo6_Sharding/mongo6-shard-0cp -a /root/Mongo6_Sharding/keyFile /root/Mongo6_Sharding/mongo6-shard-0/configdb/# 配置文件 cat > /root/Mongo6_Sharding/mongo6-shard-0/configdb/mongod.conf<< EOF net: port: 22000 bindIpAll: true security: keyFile: /data/configdb/keyFile authorization: enabled replication: replSetName: rs-shard-0 sharding: clusterRole: shardsvr storage: wiredTiger: engineConfig: cacheSizeGB: 0.5 EOF 搭建Shard-1 # 创建目录并拷贝证书 mkdir -p /root/Mongo6_Sharding/mongo6-shard-1/dbmkdir -p /root/Mongo6_Sharding/mongo6-shard-1/configdbchmod -R777 /root/Mongo6_Sharding/mongo6-shard-1cp -a /root/Mongo6_Sharding/keyFile /root/Mongo6_Sharding/mongo6-shard-1/configdb/# 配置文件 cat > /root/Mongo6_Sharding/mongo6-shard-1/configdb/mongod.conf<< EOF net: port: 23000 bindIpAll: true security: keyFile: /data/configdb/keyFile authorization: enabled replication: replSetName: rs-shard-1 sharding: clusterRole: shardsvr storage: wiredTiger: engineConfig: cacheSizeGB: 0.5 EOF 搭建Shard-2 # 创建目录并拷贝证书 mkdir -p /root/Mongo6_Sharding/mongo6-shard-2/dbmkdir -p /root/Mongo6_Sharding/mongo6-shard-2/configdbchmod -R777 /root/Mongo6_Sharding/mongo6-shard-2cp -a /root/Mongo6_Sharding/keyFile /root/Mongo6_Sharding/mongo6-shard-2/configdb/# 配置文件 cat > /root/Mongo6_Sharding/mongo6-shard-2/configdb/mongod.conf<< EOF net: port: 24000 bindIpAll: true security: keyFile: /data/configdb/keyFile authorization: enabled replication: replSetName: rs-shard-2 sharding: clusterRole: shardsvr storage: wiredTiger: engineConfig: cacheSizeGB: 0.5 EOF 搭建Mongos-0 # 创建目录并拷贝证书 mkdir -p /root/Mongo6_Sharding/mongos6-0/dbmkdir -p /root/Mongo6_Sharding/mongos6-0/configdbchmod -R777 /root/Mongo6_Sharding/mongos6-0cp -a /root/Mongo6_Sharding/keyFile /root/Mongo6_Sharding/mongos6-0/configdb/chown 999 /root/Mongo6_Sharding/mongos6-0/configdb/keyFile# 配置文件 cat > /root/Mongo6_Sharding/mongos6-0/configdb/mongos.conf<< EOF net: port: 27027 bindIpAll: true security: keyFile: /data/configdb/keyFile sharding: configDB: rs-conf-0/172.19.40.9:21000 EOF docker-compose # 创建并启动 version : '3.8' services : mongo6-config-0 : container_name : mongo6- config- 0 image : mongo: 6 restart : alwaysnetwork_mode : hostvolumes : - /root/Mongo6_Sharding/mongo6- config- 0/db: /data/db- /root/Mongo6_Sharding/mongo6- config- 0/configdb: /data/configdb- /etc/localtime: /etc/localtime: rocommand : mongod- f /data/configdb/mongod.confmongo6-shard-0 : container_name : mongo6- shard- 0 image : mongo: 6 restart : alwaysnetwork_mode : hostvolumes : - /root/Mongo6_Sharding/mongo6- shard- 0/db: /data/db- /root/Mongo6_Sharding/mongo6- shard- 0/configdb: /data/configdb- /etc/localtime: /etc/localtime: rocommand : mongod- f /data/configdb/mongod.confmongo6-shard-1 : container_name : mongo6- shard- 1 image : mongo: 6 restart : alwaysnetwork_mode : hostvolumes : - /root/Mongo6_Sharding/mongo6- shard- 1/db: /data/db- /root/Mongo6_Sharding/mongo6- shard- 1/configdb: /data/configdb- /etc/localtime: /etc/localtime: rocommand : mongod- f /data/configdb/mongod.confmongo6-shard-2 : container_name : mongo6- shard- 2 image : mongo: 6 restart : alwaysnetwork_mode : hostvolumes : - /root/Mongo6_Sharding/mongo6- shard- 2/db: /data/db- /root/Mongo6_Sharding/mongo6- shard- 2/configdb: /data/configdb- /etc/localtime: /etc/localtime: rocommand : mongod- f /data/configdb/mongod.confmongos6-0 : container_name : mongos6- 0 image : mongo: 6 restart : alwaysnetwork_mode : hostvolumes : - /root/Mongo6_Sharding/mongos6- 0/db: /data/db- /root/Mongo6_Sharding/mongos6- 0/configdb: /data/configdb- /etc/localtime: /etc/localtime: rocommand : mongos- f /data/configdb/mongos.conf初始化Config Server #进入容器 dockerexec -it mongo6-config-0 /bin/bash#进入mongo mongosh --port21000 #切换到admin数据库 use admin#初始confi server复制集配置 rs.initiate( { _id:"rs-conf-0" , members:[ { _id: 0 ,host : "172.19.40.9:21000" } ] } ) db.createUser( { user:"admin" , pwd:"123456" , roles:[ { role:"root" , db:"admin" } ] } ) ; 初始化shard-0复制集 #进入容器 dockerexec -it mongo6-shard-0 /bin/bash#进入mongo mongosh --port22000 #切换到admin数据库 use admin#初始confi server复制集配置 rs.initiate( { _id:"rs-shard-0" , members:[ { _id: 0 ,host : "172.19.40.9:22000" } ] } ) db.createUser( { user:"admin" , pwd:"123456" , roles:[ { role:"root" , db:"admin" } ] } ) ; 初始化shard-1复制集 #进入容器 dockerexec -it mongo6-shard-1 /bin/bash#进入mongo mongosh --port23000 #切换到admin数据库 use admin#初始confi server复制集配置 rs.initiate( { _id:"rs-shard-1" , members:[ { _id: 0 ,host : "172.19.40.9:23000" } ] } ) db.createUser( { user:"admin" , pwd:"123456" , roles:[ { role:"root" , db:"admin" } ] } ) ; 初始化shard-2复制集 #进入容器 dockerexec -it mongo6-shard-2 /bin/bash#进入mongo mongosh --port24000 #切换到admin数据库 use admin#初始confi server复制集配置 rs.initiate( { _id:"rs-shard-2" , members:[ { _id: 0 ,host : "172.19.40.9:24000" } ] } ) db.createUser( { user:"admin" , pwd:"123456" , roles:[ { role:"root" , db:"admin" } ] } ) ; 初始化mongos-0配置文件 #登录mongos-0,进行分片配置 #进入容器 dockerexec -it mongos6-0 /bin/bash#进入mongo mongosh --port27027 #切换到admin数据库 use admin#登录 db.auth( 'admin' ,'123456' ) #添加分片 sh.addShard( "rs-shard-0/172.19.40.9:22000" ) ; sh.addShard( "rs-shard-1/172.19.40.9:23000" ) ; sh.addShard( "rs-shard-2/172.19.40.9:24000" ) ; #对指定库进行分片 sh.enableSharding( "testdb" ) # 使用hash分片键 sh.shardCollection( 'testdb.collection' ,{ 'field' : 'hashed' } ) #移除分片 db.adminCommand( { removeShard: < shardToRemove> } ) #分片集群中的每个数据库都有一个主分片。如果您要删除的分片也是集群数据库之一的主分片,则在迁移分片中的所有数据后,您必须手动将数据库移至新分片。 #当您删除集群中块分布不均匀的分片时,平衡器首先从排出分片中删除块,然后平衡剩余的不均匀块分布。 分片相关命令,在mongos上使用 # 启用数据库分片: sh.enableSharding( "<database>" ) # 使用hash分片键 sh.shardCollection( 'db.collection' ,{ 'field' : 'hashed' } ) # 使用递增分片键 sh.shardCollection( 'db.collection' ,{ field:1 } ) # 查看分片是否成功 db.collection.stats( ) .sharded# 查看数据分布 db.collection.getShardDistribution( ) 设置平衡器运行窗口时间 use config#设置平衡器窗口时间 db.settings.updateOne( { _id:"balancer" } ,{ $set : { activeWindow: { start: "<start-time>" , stop: "<stop-time>" } } } ,{ upsert:true } ) ; #将<开始时间>和<结束时间>替换为使用两位数小时和分钟值(即HH:MM)的时间值,该值指定平衡窗口的开始和结束边界。 #对于HH值,使用00-23之间的小时值。 #对于MM值,请使用00-59之间的分钟值。 #对于内部部署或自管理的分片集群,MongoDB评估相对于配置服务器副本集中主要成员的时区的开始和停止时间。 #块只有在到达指定大小才会进行分裂,默认128MB #获取平衡器状态 sh.getBalancerState( ) #启动平衡器 sh.startBalancer( ) #停止平衡器 sh.stopBalancer( ) 分片操作相关命令 #获取所有分片相关信息 db.runCommand( "getShardMap" )