ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2021-06-15 19:00:11  阅读:337  来源: 互联网

标签:单机版 Mongodb app db shard mongo44 configdb home 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()

 

标签:单机版,Mongodb,app,db,shard,mongo44,configdb,home,Docker
来源: https://blog.csdn.net/one2threexm/article/details/117822683

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有