基于Docker搭建Mongodb分片(单机版)

一、Mongodb分片架构图

基于Docker搭建Mongodb分片(单机版)

 

1、Config Server:配置服务器存储集群的元数据和配置设置。

2、Shard:数据分片,每个分片包含分片数据的一个子集。 每个分片都可以部署为一个副本集。

3、Mongos:mongos 充当查询路由器,提供客户端应用程序和分片集群之间的接口。 从 MongoDB 4.4 开始,mongos 可以支持对冲读取以最小化延迟。

 

二、创建keyFIle

openssl rand -base64 128 > /home/app/keyFile
chmod 600 /home/app/keyFile

 

三、搭建Config Server

1、创建config server数据目录

mkdir -p /home/app/mongo44-config-0/db
mkdir -p /home/app/mongo44-config-0/configdb
chmod -R 777 /home/app/mongo44-config-0/db
chmod -R 777 /home/app/mongo44-config-0/configdb

 2、初始化config server配置文件

cat > /home/app/mongo44-config-0/configdb/mongod.conf <<EOF
net:
  port: 21000
  bindIpAll: true
 
#security:
  #keyFile: /data/configdb/keyFile
  #authorization: enabled
 
#replication:
#   replSetName: rs-conf

sharding:
   clusterRole: configsvr
   archiveMovedChunks: false
 
storage:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 0.5
EOF
cp /home/app/keyFile /home/app/mongo44-config-0/configdb/keyFile

 

  3、启动config server

docker run -d \
--network host \
--restart=always \
-v /home/app/mongo44-config-0/db:/data/db \
-v /home/app/mongo44-config-0/configdb:/data/configdb \
-v /etc/localtime:/etc/localtime:ro \
--name mongo44-config-0 mongo:4.4 mongod \
-f /data/configdb/mongod.conf

4、配置管理员账号

#进入容器
docker exec -it mongo44-config-0 /bin/bash

#进入mongo
mongo --port 21000

#切换到admin数据库
use admin

#创建管理员账号
db.createUser(
   {
     user: "admin",
     pwd: "123456",
     roles: [ { role: "root", db: "admin" } ]
   }
);

5、修改配置文件,重启mongo

net:
  port: 21000
  bindIpAll: true
 
security:
  keyFile: /data/configdb/keyFile
  authorization: enabled
 
replication:
   replSetName: rs-conf

sharding:
   clusterRole: configsvr
   archiveMovedChunks: false
 
storage:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 0.5

6、初始化config server的复制集

#进入容器
docker exec -it mongo44-config-0 /bin/bash

#进入mongo
mongo --port 21000

#切换到admin数据库
use admin

#创建管理员账号
db.auth('admin', '123456')

#初始confi server复制集配置
rs.initiate(
  {
    _id: "rs-conf",
    members: [
      { _id : 0, host : "192.168.2.127:21000"}
    ]
  }
)

 

 

四、搭建Shard-0

1、创建Shard-0数据目录

mkdir -p /home/app/mongo44-shard-0/db
mkdir -p /home/app/mongo44-shard-0/configdb
chmod -R 777 /home/app/mongo44-shard-0/db
chmod -R 777 /home/app/mongo44-shard-0/configdb

 2、初始化Shard-0配置文件

cat > /home/app/mongo44-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 
   archiveMovedChunks: false
 
storage:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 0.5
EOF
cp /home/app/keyFile /home/app/mongo44-shard-0/configdb/keyFile

 

  3、启动shard-0

docker run -d \
--network host \
--restart=always \
-v /home/app/mongo44-shard-0/db:/data/db \
-v /home/app/mongo44-shard-0/configdb:/data/configdb \
-v /etc/localtime:/etc/localtime:ro \
--name mongo44-shard-0 mongo:4.4 mongod \
-f /data/configdb/mongod.conf

4、配置管理员账号

#进入容器
docker exec -it mongo44-shard-0 /bin/bash

#进入mongo
mongo --port 22000

#切换到admin数据库
use admin

#创建管理员账号
db.createUser(
   {
     user: "admin",
     pwd: "123456",
     roles: [ { role: "root", db: "admin" } ]
   }
);

5、修改配置文件,重启mongo

net:
  port: 22000
  bindIpAll: true
 
security:
  keyFile: /data/configdb/keyFile
  authorization: enabled
 
replication:
   replSetName: rs-shard-0

sharding:
   clusterRole: shardsvr
   archiveMovedChunks: false
 
storage:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 0.5

6、初始化shard-0复制集

#进入容器
docker exec -it mongo44-shard-0 /bin/bash

#进入mongo
mongo --port 22000

#切换到admin数据库
use admin

#创建管理员账号
db.auth('admin', '123456')

#初始confi server复制集配置
rs.initiate(
  {
    _id: "rs-shard-0",
    members: [
      { _id : 0, host : "192.168.2.127:22000"}
    ]
  }
)

 

 

 

五、搭建Shard-1

 

1、创建shard-1数据目录

mkdir -p /home/app/mongo44-shard-1/db
mkdir -p /home/app/mongo44-shard-1/configdb
chmod -R 777 /home/app/mongo44-shard-1/db
chmod -R 777 /home/app/mongo44-shard-1/configdb

 2、初始化shard-1配置文件

cat > /home/app/mongo44-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 
   archiveMovedChunks: false
 
storage:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 0.5
EOF
cp /home/app/keyFile /home/app/mongo44-shard-1/configdb/keyFile

 

  3、启动shard-1

docker run -d \
--network host \
--restart=always \
-v /home/app/mongo44-shard-1/db:/data/db \
-v /home/app/mongo44-shard-1/configdb:/data/configdb \
-v /etc/localtime:/etc/localtime:ro \
--name mongo44-shard-1 mongo:4.4 mongod \
-f /data/configdb/mongod.conf

4、配置管理员账号

#进入容器
docker exec -it mongo44-shard-1 /bin/bash

#进入mongo
mongo --port 23000

#切换到admin数据库
use admin

#创建管理员账号
db.createUser(
   {
     user: "admin",
     pwd: "123456",
     roles: [ { role: "root", db: "admin" } ]
   }
);

5、修改配置文件,重启mongo

net:
  port: 23000
  bindIpAll: true
 
security:
  keyFile: /data/configdb/keyFile
  authorization: enabled
 
replication:
   replSetName: rs-shard-1

sharding:
   clusterRole: shardsvr
   archiveMovedChunks: false
 
storage:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 0.5

6、初始化shard-1复制集

#进入容器
docker exec -it mongo44-shard-1 /bin/bash

#进入mongo
mongo --port 23000

#切换到admin数据库
use admin

#创建管理员账号
db.auth('admin', '123456')

#初始confi server复制集配置
rs.initiate(
  {
    _id: "rs-shard-1",
    members: [
      { _id : 0, host : "192.168.2.127:23000"}
    ]
  }
)

 

五、搭建Mongos-0

 

1、创建mongos-0数据目录

mkdir -p /home/app/mongos-0/db
mkdir -p /home/app/mongos-0/configdb
chmod -R 777 /home/app/mongos-0/db
chmod -R 777 /home/app/mongos-0/configdb

 

 2、初始化mongos-0配置文件

cat > /home/app/mongos-0/configdb/mongos.conf <<EOF
net:
  port: 24000
  bindIpAll: true
 
security:
  keyFile: /data/configdb/keyFile

 
sharding:
   configDB: rs-conf/192.168.2.127:21000

EOF
cp /home/app/keyFile /home/app/mongos-0/configdb/keyFile

#如果启动mongos报bad file,执行
chown 999 /home/app/mongos-0/configdb/keyFile

 

 3、启动mongos-0

docker run -d \
--network host \
--restart=always \
-v /home/app/mongos-0/db:/data/db \
-v /home/app/mongos-0/configdb:/data/configdb \
-v /etc/localtime:/etc/localtime:ro \
--name mongos-0 mongo:4.4 mongod \
-f /data/configdb/mongos.conf

 

4、登录mongos-0,进行分片配置

#进入容器
docker exec -it mongos-0 /bin/bash

#进入mongo
mongo --port 24000

#切换到admin数据库
use admin

#登录
db.auth('admin','123456')

#添加分片
sh.addShard("rs-shard-0/192.168.2.127:22000");
sh.addShard("rs-shard-1/192.168.2.127:23000");

#对指定库进行分片
sh.enableSharding("testdb")

# 使用hash分片键
sh.shardCollection('testdb.collection', {'field':'hashed'})

 

5、分片相关命令,在mongos上使用

# 启用数据库分片:
sh.enableSharding("<database>")

# 使用hash分片键
sh.shardCollection('db.collection', {'field':'hashed'})

# 使用递增分片键
sh.shardCollection('db.collection', { field: 1})

# 查看分片是否成功
db.collection.stats().sharded

# 查看数据分布
db.collection.getShardDistribution()

 

上一篇:es基本概念


下一篇:[原创干货]Oracle Sharding实施教程来袭!!!