1、规划

(1)config

10.0.0.51:20004

10.0.0.51:20005

10.0.0.51:20006

(2)shard0

10.0.0.51:20001

10.0.0.51:20002

10.0.0.52:20003

(3)shard2

10.0.0.52:20001

10.0.0.52:20002

10.0.0.51:20003

(4)mongos

10.0.0.51:20010

10.0.0.52:20011

db01:

su - mongod
mkdir -p /mongodb/20001/conf /mongodb/20001/data /mongodb/20001/log
mkdir -p /mongodb/20002/conf /mongodb/20002/data /mongodb/20002/log
mkdir -p /mongodb/20003/conf /mongodb/20003/data /mongodb/20003/log
cat > /mongodb/20001/conf/mongod.conf <<EOF
systemLog:
  destination: file
  path: /mongodb/20001/log/mongodb.log
  logAppend: true
storage:
  journal:
    enabled: true
  dbPath: /mongodb/20001/data
  directoryPerDB: true
  #engine: wiredTiger
  wiredTiger:
    engineConfig:
      cacheSizeGB: 0.5
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: zlib
    indexConfig:
      prefixCompression: true
processManagement:
  fork: true
net:
    port: 20001
    bindIp: 10.0.0.51,127.0.0.1
replication:
  oplogSizeMB: 2048
  replSetName: CN_sh
sharding:
  clusterRole: shardsvr
EOF
\cp  /mongodb/20001/conf/mongod.conf  /mongodb/20002/conf/
\cp  /mongodb/20001/conf/mongod.conf  /mongodb/20003/conf/
sed 's#20001#20002#g' /mongodb/20002/conf/mongod.conf -i
sed 's#20001#20003#g' /mongodb/20003/conf/mongod.conf -i
mongod -f /mongodb/20001/conf/mongod.conf
mongod -f /mongodb/20002/conf/mongod.conf
mongod -f /mongodb/20003/conf/mongod.conf

db02:

su - mongod
mkdir -p /mongodb/20001/conf /mongodb/20001/data /mongodb/20001/log
mkdir -p /mongodb/20002/conf /mongodb/20002/data /mongodb/20002/log
mkdir -p /mongodb/20003/conf /mongodb/20003/data /mongodb/20003/log
cat > /mongodb/20001/conf/mongod.conf <<EOF
systemLog:
  destination: file
  path: /mongodb/20001/log/mongodb.log
  logAppend: true
storage:
  journal:
    enabled: true
  dbPath: /mongodb/20001/data
  directoryPerDB: true
  #engine: wiredTiger
  wiredTiger:
    engineConfig:
      cacheSizeGB: 0.5
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: zlib
    indexConfig:
      prefixCompression: true
processManagement:
  fork: true
net:
    port: 20001
    bindIp: 10.0.0.52,127.0.0.1
replication:
  oplogSizeMB: 2048
  replSetName: US_sh
sharding:
  clusterRole: shardsvr
EOF
\cp  /mongodb/20001/conf/mongod.conf  /mongodb/20002/conf/
\cp  /mongodb/20001/conf/mongod.conf  /mongodb/20003/conf/
sed 's#20001#20002#g' /mongodb/20002/conf/mongod.conf -i
sed 's#20001#20003#g' /mongodb/20003/conf/mongod.conf -i
mongod -f /mongodb/20001/conf/mongod.conf
mongod -f /mongodb/20002/conf/mongod.conf
mongod -f /mongodb/20003/conf/mongod.conf

db01:

mkdir -p /mongodb/20004/conf /mongodb/20004/data /mongodb/20004/log
mkdir -p /mongodb/20005/conf /mongodb/20005/data /mongodb/20005/log
mkdir -p /mongodb/20006/conf /mongodb/20006/data /mongodb/20006/log
cat > /mongodb/20004/conf/mongod.conf <<EOF
systemLog:
  destination: file
  path: /mongodb/20004/log/mongodb.log
  logAppend: true
storage:
  journal:
    enabled: true
  dbPath: /mongodb/20004/data
  directoryPerDB: true
  #engine: wiredTiger
  wiredTiger:
    engineConfig:
      cacheSizeGB: 0.5
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: zlib
    indexConfig:
      prefixCompression: true
processManagement:
  fork: true
net:
    port: 20004
    bindIp: 10.0.0.51,127.0.0.1
replication:
  oplogSizeMB: 2048
  replSetName: config
sharding:
  clusterRole: configsvr
EOF
\cp  /mongodb/20004/conf/mongod.conf  /mongodb/20005/conf/
\cp  /mongodb/20004/conf/mongod.conf  /mongodb/20006/conf/
sed 's#20004#20005#g' /mongodb/20005/conf/mongod.conf -i
sed 's#20004#20006#g' /mongodb/20006/conf/mongod.conf -i
mongod -f /mongodb/20004/conf/mongod.conf
mongod -f /mongodb/20005/conf/mongod.conf
mongod -f /mongodb/20006/conf/mongod.conf

复制集配置

config = {_id: 'CN_sh', members: [
                          {_id: 0, host: '10.0.0.51:20001'},
                          {_id: 1, host: '10.0.0.51:20002'},
                          {_id: 2, host: '10.0.0.52:20003'}]
         }
rs.initiate(config)
config = {_id: 'US_sh', members: [
                          {_id: 0, host: '10.0.0.52:20001'},
                          {_id: 1, host: '10.0.0.52:20002'},
                          {_id: 2, host: '10.0.0.51:20003'}]
         }
rs.initiate(config)
config = {_id: 'config', members: [
                          {_id: 0, host: '10.0.0.51:20004'},
                          {_id: 1, host: '10.0.0.51:20005'},
                          {_id: 2, host: '10.0.0.51:20006'}]
         }
rs.initiate(config)

mongos配置

mkdir -p /mongodb/20010/conf  /mongodb/20010/log
cat > /mongodb/20010/conf/mongos.conf<<EOF
systemLog:
  destination: file
  path: /mongodb/20010/log/mongos.log
  logAppend: true
net:
  bindIp: 10.0.0.51,127.0.0.1
  port: 20010
sharding:
  configDB: config/10.0.0.51:20004,10.0.0.51:20005,10.0.0.51:20006
processManagement:
  fork: true
EOF
mongos -f /mongodb/20010/conf/mongos.conf
mkdir -p /mongodb/20011/conf  /mongodb/20011/log
cat>  /mongodb/20011/conf/mongos.conf <<EOF
systemLog:
  destination: file
  path: /mongodb/20011/log/mongos.log
  logAppend: true
net:
  bindIp: 10.0.0.52,127.0.0.1
  port: 20011
sharding:
  configDB: config/10.0.0.51:20004,10.0.0.51:20005,10.0.0.51:20006
processManagement:
  fork: true
EOF
mongos -f /mongodb/20011/conf/mongos.conf
db.runCommand( { addshard : "CN_sh/10.0.0.51:20001,10.0.0.51:20002,10.0.0.52:20003",name:"CN_sh"} )
db.runCommand( { addshard : "US_sh/10.0.0.52:20001,10.0.0.52:20002,10.0.0.51:20003",name:"US_sh"} )

1、针对每个要分片的集合,模型中增加一个区域字段 locationCode

locationCode:"CN" 应用程按照规则自动加上这个字段

2、给分片添加标签

sh.addShardTag("shard0", "CHINA")
sh.addShardTag("shard1", "AMERICA")

3、为打好标签的分片设置片键的数值区间

sh.addTagRange( "crm.orders",
 { "locationCode" : "CN", "order_id" : MinKey },
 { "locationCode" : "CN", "order_id" : MaxKey } ,
 "CHINA" )
sh.addTagRange( "crm.orders",
 { "locationCode" : "US", "order_id" : MinKey },
 { "locationCode" : "US", "order_id" : MaxKey } ,
 "AMERICA" )

image-20260404164813062