• mongodb 集群分片


    分片

    • 在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求
    • 当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量,这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据

    为什么使用分片

    • 本地磁盘不够大
    • 当请求量巨大时会出现内存不足。
    • 垂直扩展价格昂贵(内存、磁盘、cpu)

    实现分片

    • 分片结构图如下:

    分片

    • 实现分片需要3部分:
      • 路由服务器mongos:客户端由此接入,根据分片依据,将数据写入到不同的数据服务器
      • 配置服务器mongod:将数据进行分片的依据
      • 数据服务器mongod:可以有多台物理机,用于存储实际的数据块
    • 设计端口如下:
      • 路由服务器:60001
      • 配置服务器:60002
      • 数据服务器1:60003
      • 数据服务器2:60004
    • step1:启动数据服务器,当前位于Desktop目录下
    sudo mkdir t1
    sudo mkdir t2
    sudo mongod --port 60003 --dbpath=~/Desktop/t1
    sudo mongod --port 60004 --dbpath=~/Desktop/t2
    
    • step2:启动配置服务器
    sudo mkdir conf
    sudo mongod --port 60002 --dbpath=~/Desktop/conf
    
    • step3:启动路由服务器
    sudo mongos --port 60001 --configdb 192.168.196.128:60002
    
    • step4:在路由服务器中添加数据服务器
    mongo --port 60001
    use admin
    db.runCommand({addshard:'192.168.196.128:60003'})
    db.runCommand({addshard:'192.168.196.128:60004'})
    
    • step5:对数据库test1启用分片
    db.runCommand({enablesharding:'test1'})
    
    • step6:指定片键,即集合中文档的分片依据
    db.runCommand({shardcollection:'test1.t1',key:{name:1}})
    
    • step7:测试数据,向集合中插入1W条数据
    for(i=0;i<10000;i++){
        db.t1.insert({name:'abc'+i})
    }
    
    • step8:查看数据存储情况
    db.printShardingStatus()
    
    • 可以查看到数据均匀存储在了数据服务器上
    • step9:查询数据
    db.t1.find({name:'abc1000'})
    db.t1.find({name:'abc9000'})
    
    • 分片的使用,对于客户端是透明的,对数据的读写没有变化
  • 相关阅读:
    MySQL库表设计小技巧
    教你用SQL实现统计排名
    Truncate用法详解
    utf8字符集下的比较规则
    关于Aborted connection告警日志的分析
    MySQL DDL详情揭露
    时间戳,这样用就对了
    在线修改主从复制选项
    20181211HW
    20181207hw
  • 原文地址:https://www.cnblogs.com/Erick-L/p/7245871.html
Copyright © 2020-2023  润新知