docker compose部署mongodb 分片集群

分片机制

分片概念

分片(sharding)是指将数据库拆分,将其分散在不同的机器上的过程。将数据分散到不同的机器上,不需要功能强大的服务器就可以存储更多的数据和处理更大的负载。基本思想就是将集合切成小块,这些块分散到若干片里,每个片只负责总数据的一部分,最后通过一个均衡器来对各个分片进行均衡(数据迁移)。通过一个名为mongos的路由进程进行操作,mongos知道数据和片的对应关系(通过配置服务器)。大部分使用场景都是解决磁盘空间的问题,对于写入有可能跨分片,查询则尽量避免跨分片查询。

mongodb分片的主要使用场景:

  1. 数据量过大,单机磁盘空间不足;
  2. 单个mongod不能满足写数据的性能要求,需要通过分片让写压力分散到各个分片上面;
  3. 把大量数据放到内存里提高性能,通过分片使用分片服务器自身的资源。

mongodb分片优势**:**

减少单个分片需要处理的请求数,提高集群的存储容量和吞吐量 比如,当插入一条数据时,应用只需要访问存储这条数据的分片 减少单分片存储的数据,提高数据可用性,提高大型数据库查询服务的性能。 当MongoDB单点数据库服务器存储和性能成为瓶颈,或者需要部署大型应用以充分利用内存时,可以使用分片技术

分片集群架构

在这里插入图片描述
组件说明:

  • **Config Server:配置服务器,**存储了整个 分片群集的配置信息,其中包括 chunk信息。
  • **Shard:分片服务器,**用于存储实际的数据块,每一个shard都负责存储集群中的一部分数据。例如一个集群有3个分片,假设定义分片的规则为hash,那么整个集群的数据会按照相应规划分割到3个分片当中。任意一个分片挂掉,则整个集群数据不可用。所以在实际生产环境中一个shard server角色一般由一个3节点的replicaSet承担,防止分片的单点故障。
  • **mongos:前端路由,**整个集群的入口。客户端应用通过mongos连接到整个集群,mongos让整个集群看上去像单一数据库,客户端应用可以透明使用

整个mongo分片集群的功能:

  • 请求分流:通过路由节点将请求分发到对应的分片和块中
  • 数据分流:内部提供平衡器保证数据的均匀分布,这是数据平均分布式、请求平均分布的前提
  • 块的拆分:mongodb的单个chunk的最大容量为64M或者10w的数据,当到达这个阈值,触发块的拆分,一分为二
  • 块的迁移:为保证数据在分片节点服务器分片节点服务器均匀分布,块会在节点之间迁移。一般相差8个分块的时候触发

分片集群部署

部署规划

shard 3 个副本集
config server 3 个副本集
mongos 3 个副本集

主机准备

shard

IP role port shardname
192.168.142.157 shard1 27181 shard1
192.168.142.157 shard2 27182 shard1
192.168.142.157 shard3 27183 shard1
192.168.142.155 shard1 27181 shard2
192.168.142.155 shard2 27182 shard2
192.168.142.155 shard3 27183 shard2
192.168.142.156 shard1 27181 shard3
192.168.142.156 shard2 27182 shard3
192.168.142.156 shard3 27183 shard3

config server

IP role port config name
192.168.142.157 config server1 27281 config1
192.168.142.157 config server2 27282 config1
192.168.142.157 config server3 27283 config1
192.168.142.155 config server1 27281 config2
192.168.142.155 config server2 27282 config2
192.168.142.155 config server3 27283 config2
192.168.142.156 config server1 27281 config3
192.168.142.156 config server2 27282 config3
192.168.142.156 config server3 27283 config3

mongos

IP role port
192.168.142.155 mongos 27381
192.168.142.155 mongos 27382
192.168.142.155 mongos 27383

开始部署

mongodb 副本集详解

sharetype=blogdetail&sharerId=142671701&sharerefer=PC&sharesource=qq_62866151&spm=1011.2480.3001.8118)
创建搭建分片集群的文件夹

mkdir /docker/mongo-zone/{configsvr,shard,mongos} -p

进入 /docker/mongo-zone/ 文件夹

configsvr 副本集文件夹准备

mkdir configsvr/{configsvr1,configsvr2,configsvr3}/{data,logs} -p

shard 副本集文件夹准备

mkdir shard/{shard1,shard2,shard3}/{data,logs} -p

mongos 副本集文件夹准备

mkdir mongos/{mongos1,mongos2,mongos3}/{data,logs} -p

生成密钥

openssl rand -base64 756 > mongo.key

发放给其他主机

scp mongo.key [email protected]:/home/slave
scp mongo.key [email protected]:/home/slave02
mv /home/slave02/mongo.key .
mv /home/slave/mongo.key .
chown root:root mongo.key

所有的节点都用的是同一密钥,并且都处于同一网络中

搭建 shard 副本集

cd /docker/mongo-zone/shard/shard1

docker-compose.yml

services:
  mongo-shard1:
    image: mongo:7.0
    container_name: mongo-shard1
    restart: always
    volumes:
      - /docker/mongo-zone/shard/shard1/data:/data/db
      - /docker/mongo-zone/shard/shard1/logs:/var/log/mongodb
      - /docker/mongo-zone/mongo.key:/etc/mongo.key
    ports:
      - "27181:27181"
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: 123456
      MONGO_INITDB_REPLICA_SET_NAME: shard1
      MONGO_INITDB_DATABASE: admin
    command:
      - /bin/sh
      - -c
      - |
        chmod 400 /etc/mongo.key
        chown 999:999 /etc/mongo.key
        mongod --shardsvr --directoryperdb --replSet shard1 --bind_ip_all --auth --keyFile /etc/mongo.key --wiredTigerCacheSizeGB 1 --oplogSize 5000 --port 27181
  mongo-shard2:
    image: mongo:7.0
    container_name: mongo-shard2
    restart: always
    volumes:
      - /docker/mongo-zone/shard/shard2/data:/data/db
      - /docker/mongo-zone/shard/shard2/logs:/var/log/mongodb
      - /docker/mongo-zone/mongo.key:/etc/mongo.key
    ports:
      - "27182:27182"
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: 123456
      MONGO_INITDB_REPLICA_SET_NAME: shard1
      MONGO_INITDB_DATABASE: admin
    command:
      - /bin/sh
      - -c
      - |
        chmod 400 /etc/mongo.key
        chown 999:999 /etc/mongo.key
        mongod --shardsvr --directoryperdb --r
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值