• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    MongoDB分片集群部署详解

     一、环境说明

    1、我们prod环境MongoDB的集群架构是做的分片集群的部署,但是目前我们没有分片,即所有数据都在一个分片上,后期如果数量大,需要分配,集群随时可以分片,对业务方透明

    2、各个角色的部署情况

    角色 IP 端口 复制集名称
    mongos 172.21.244.101,172.21.244.102,172.21.244.94 27000
    config server 172.21.244.101,172.21.244.102,172.21.244.94 27100 repl_configsvr
    存储节点(shard) 172.21.244.101,172.21.244.102,172.21.244.94 27101 shard1

    3、MongoDB版本

    mongos> db.version()
    4.0.4-62-g7e345a7

    二、基础信息准备

    0、系统优化

    echo "never" >/sys/kernel/mm/transparent_hugepage/enabled
    echo "never" >/sys/kernel/mm/transparent_hugepage/defrag
    

    1、下载MongoDB二进制文件

    cd /chj/app
    wget ops.chehejia.com:9090/pkg/chj_mongodb_4.0.4.tar.gz
    tar -zxvf chj_mongodb_4.0.4.tar.gz
    

    2、相关目录建立

    #建立base目录
    mkdir /chj/data/mongodb/chj_db
    #把MongoDB二进制文件移动到base目录下的bin文件夹
    mv chj_mongodb_4.0.4/bin /chj/data/mongodb/chj_db/bin
    #建立认证文件目录
    mkdir /chj/data/mongodb/chj_db/auth
    #建立配置文件目录
    mkdir /chj/data/mongodb/chj_db/conf
    #建立config server的data和日志目录
    mkdir /chj/data/mongodb/chj_db/config/data -p
    mkdir /chj/data/mongodb/chj_db/config/log
    #建立mongos的日志目录
    mkdir /chj/data/mongodb/chj_db/mongos/log -p
    #建立数据节点data和日志目录 
    mkdir /chj/data/mongodb/chj_db/shard1/data -p
    mkdir /chj/data/mongodb/chj_db/shard1/log
    

    3、相关配置文件编写

    A、mongos的配置文件编写

    vim /chj/data/mongodb/chj_db/conf/mongos.conf
    systemLog:
     destination: file
     logAppend: true
     path: /chj/data/mongodb/chj_db/mongos/log/mongos.log
    
    processManagement:
     fork: true # fork and run in background
     pidFilePath: /chj/data/mongodb/chj_db/mongos/log/mongos.pid # location of pidfile
     timeZoneInfo: /usr/share/zoneinfo
    
    net:
     port: 27000
     bindIpAll: true
     maxIncomingConnections: 1000
     unixDomainSocket:
      enabled: true
      pathPrefix: /chj/data/mongodb/chj_db/mongos/log
      filePermissions: 0700
    
    security:
     keyFile: /chj/data/mongodb/chj_db/auth/keyfile.key
    # authorization: enabled
    
    #replication:
    
    sharding:
     configDB: repl_configsvr/172.21.244.101:27100,172.21.244.102:27100,172.21.244.94:27100
    
    

    B、config server的配置文件编写

    vim /chj/data/mongodb/chj_db/conf/config.conf
    systemLog:
     destination: file
     logAppend: true
     path: /chj/data/mongodb/chj_db/config/log/congigsrv.log
    
    storage:
     dbPath: /chj/data/mongodb/chj_db/config/data
     journal:
      enabled: true
     wiredTiger:
      engineConfig:
       directoryForIndexes: true
    
    processManagement:
     fork: true # fork and run in background
     pidFilePath: /chj/data/mongodb/chj_db/config/log/configsrv.pid # location of pidfile
     timeZoneInfo: /usr/share/zoneinfo
    
    net:
     port: 27100
     bindIp: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
     #bindIpAll: true
     maxIncomingConnections: 1000
     unixDomainSocket:
      enabled: true
      pathPrefix: /chj/data/mongodb/chj_db/config/data
      filePermissions: 0700
    
    security:
     keyFile: /chj/data/mongodb/chj_db/auth/keyfile.key
     authorization: enabled
    
    replication:
     replSetName: repl_configsvr
    sharding:
     clusterRole: configsvr
    
    

    C、存储节点的配置文件编写

    vim /chj/data/mongodb/chj_db/conf/shard1.conf
    systemLog:
     destination: file
     logAppend: true
     path: /chj/data/mongodb/chj_db/shard1/log/shard1.log
    
    storage:
     dbPath: /chj/data/mongodb/chj_db/shard1/data
     journal:
      enabled: true
     wiredTiger:
      engineConfig:
       directoryForIndexes: true
    
    processManagement:
     fork: true # fork and run in background
     pidFilePath: /chj/data/mongodb/chj_db/shard1/log/shard1.pid # location of pidfile
     timeZoneInfo: /usr/share/zoneinfo
    
    net:
     port: 27101
     bindIp: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
     #bindIpAll: true
     maxIncomingConnections: 1000
     unixDomainSocket:
      enabled: true
      pathPrefix: /chj/data/mongodb/chj_db/shard1/data
      filePermissions: 0700
    
    security:
     keyFile: /chj/data/mongodb/chj_db/auth/keyfile.key
     authorization: enabled
    
    replication:
     replSetName: shard1
    sharding:
     clusterRole: shardsvr
    
    

    4、生产key认证文件

    echo "chj123456" >/chj/data/mongodb/chj_db/auth/keyfile.key
    #设置文件的权限为400,不然服务无法启动
    chmod 400 /chj/data/mongodb/chj_db/auth/keyfile.key
    
    

    三、集群初始化

    1、启动 config server 服务

    /chj/data/mongodb/chj_db/bin/mongod -f /chj/data/mongodb/chj_db/conf/config.conf
    

    2、初始化config server集群

    #登录其中一个config server节点
    /chj/data/mongodb/chj_db/bin/mongo --port 27100
    #配置集群
    config = { _id:"repl_configsvr",members:[ {_id:0,host:"172.21.244.101:27100"}, {_id:1,host:"172.21.244.102:27100"}, {_id:2,host:"172.21.244.94:27100"}] }
    #初始化集群
    rs.initiate(config)
    PS:
    结果输出如下,说明集群初始化成功,可以通过rs.status()命令查看集群状态
    {
        "ok" : 1,
        "$gleStats" : {
            "lastOpTime" : Timestamp(1557538260, 1),
            "electionId" : ObjectId("000000000000000000000000")
        },
        "lastCommittedOpTime" : Timestamp(0, 0)
    }
    

    3、启动存储节点服务

    /chj/data/mongodb/chj_db/bin/mongod -f /chj/data/mongodb/chj_db/conf/shard1.conf
    

    4、初始化存储集群

    #登录你希望是主节点的服务器
    /chj/data/mongodb/chj_db/bin/mongo --port 27101
    #配置集群
    config = { _id:"shard1",members:[ {_id:0,host:"172.21.244.101:27101"}, {_id:1,host:"172.21.244.102:27101"},{_id:2,host:"172.21.244.94:27101",arbiterOnly:true}] }
    #初始化集群
    rs.initiate(config)
    PS:
    结果输出如下,说明集群初始化成功,可以通过rs.status()命令查看集群状态
    { "ok" : 1 }
    

    5、添加存储集群的管理账号

    登录主节点

    /chj/data/mongodb/chj_db/bin/mongo --port 27101
    use admin
    db.createUser(
    {
    user: "root",
    pwd: "123456",
    roles: [ { role: "root", db: "admin" } ]
    }
    )
    

    6、启动mongos 服务

    /chj/data/mongodb/chj_db/bin/mongos -f /chj/data/mongodb/chj_db/conf/mongos.conf
    

    7、添加config server的管理账号

    登录任意一个mongos节点

    /chj/data/mongodb/chj_db/bin/mongo --port 27000
    use admin
    db.createUser(
    {
    user: "root",
    pwd: "123456",
    roles: [ { role: "root", db: "admin" } ]
    }
    )
    

    8、把存储节点添加到mongos

    登录任意一个mongos节点(如果是在上一步的窗口,需要退出重新登录)

    /chj/data/mongodb/chj_db/bin/mongo --port 27000
    use admin
    db.auth('root','123456')
    #添加分片
    sh.addShard('shard1/172.21.244.101:27101,172.21.244.102:27101,172.21.244.94:27101')
    #查看分片状态
    sh.status()

    四、交付业务方

    1、建立应用账号

    登录任意一个mongos节点
    /chj/data/mongodb/chj_db/bin/mongo --port 27000
    use admin
    db.auth('root','123456')
    #切到业务数据库
    use chj_db
    #建立读写账号
    db.createUser(
    {
      user: "chj_db_rw",
      pwd: "123456",
      roles: [
       { role: "readWrite", db: "chj_db" },
       { role: "dbOwner", db: "chj_db" }
      ]
    }
    )
    #建立只读账号(根据业务需求确认是否需要)
    db.createUser(
    {
    user: "chj_db_r",
    pwd: "123456",
    roles: [ { role: "read", db: "chj_db" } ]
    }
    )
    

    2、交付开发人员信息

    连接地址:172.21.244.101:27000,172.21.244.102:27000,172.21.244.94:27000
    库名:chj_db
    账号:chj_db_rw
    密码:123456
    

    五、数据库启用分片

    如果后期业务量大,需要开启分片,配置如下

    #指定需要分片的数据库
    mongos> sh.enableSharding("chj_db") 
    {
        "ok" : 1,
        "operationTime" : Timestamp(1557546835, 3),
        "$clusterTime" : {
            "clusterTime" : Timestamp(1557546835, 3),
            "signature" : {
                "hash" : BinData(0,"bkrrr8Kxrr9j9udrDc/hURHld38="),
                "keyId" : NumberLong("6689575940508352541")
            }
        }
    }
    #在chj_db数据库和users集合中创建了name和age为升序的片键
    mongos> sh.shardCollection("chj_db.users",{name:1,age:1}) 
    {
        "collectionsharded" : "chj_db.users",
        "collectionUUID" : UUID("59c0b99f-efff-4132-b489-f6c7e3d98f42"),
        "ok" : 1,
        "operationTime" : Timestamp(1557546861, 12),
        "$clusterTime" : {
            "clusterTime" : Timestamp(1557546861, 12),
            "signature" : {
                "hash" : BinData(0,"UBB1A/YODnmXwG5eAhgNLcKVzug="),
                "keyId" : NumberLong("6689575940508352541")
            }
        }
    }
    #查看分片情况
    mongos> sh.status() 
    --- Sharding Status ---
     sharding version: {
        "_id" : 1,
        "minCompatibleVersion" : 5,
        "currentVersion" : 6,
        "clusterId" : ObjectId("5cd625e0da695346d740f749")
     }
     shards:
        { "_id" : "shard1", "host" : "shard1/172.21.244.101:27101,172.21.244.102:27101", "state" : 1 }
     active mongoses:
        "4.0.4-62-g7e345a7" : 3
     autosplit:
        Currently enabled: yes
     balancer:
        Currently enabled: yes
        Currently running: no
        Failed balancer rounds in last 5 attempts: 0
        Migration Results for the last 24 hours:
            No recent migrations
     databases:
        { "_id" : "chj_db", "primary" : "shard1", "partitioned" : true, "version" : { "uuid" : UUID("82088bc7-7b98-4033-843d-7058d8d959f6"), "lastMod" : 1 } }
            chj_db.users
                shard key: { "name" : 1, "age" : 1 }
                unique: false
                balancing: true
                chunks:
                    shard1 1
                { "name" : { "$minKey" : 1 }, "age" : { "$minKey" : 1 } } -->> { "name" : { "$maxKey" : 1 }, "age" : { "$maxKey" : 1 } } on : shard1 Timestamp(1, 0)
        { "_id" : "config", "primary" : "config", "partitioned" : true }
            config.system.sessions
                shard key: { "_id" : 1 }
                unique: false
                balancing: true
                chunks:
                    shard1 1
                { "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : shard1 Timestamp(1, 0)
    

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • 如何为MongoDB添加分片副本集
    • 分布式文档存储数据库之MongoDB分片集群的问题
    • MongoDB搭建高可用集群的完整步骤(3个分片+3个副本)
    • Mongodb副本集和分片示例详解
    • MongoDB分片在部署与维护管理中常见的事项总结大全
    • 详解MongoDB4.0构建分布式分片群集
    • MongoDB分片键的选择和案例实例详解
    • MongoDB分片详解
    • mongodb分片技术_动力节点Java学院整理
    • mongodb3.4集群搭建实战之高可用的分片+副本集
    • 深入理解MongoDB分片的管理
    • Mongodb 删除添加分片与非分片表维护
    • MongoDB 主分片(primary shard)相关总结
    上一篇:MongoDB实现自动备份的全过程记录
    下一篇:大数据环境下mongoDB为何要加索引浅析
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    MongoDB分片集群部署详解 MongoDB,分片,集群,部署,详解,