美文网首页
MongoDB 3.X笔记(面向运维)

MongoDB 3.X笔记(面向运维)

作者: 这货不是王马勺 | 来源:发表于2021-09-08 17:47 被阅读0次

    参考https://www.jianshu.com/p/cf7416f4a036

    第一章:逻辑结构

    Mongodb 逻辑结构 MySQL逻辑结构
    库database 库
    集合(collection) 表
    文档(document) 数据行
    mongodb中列行都是文档层次的属性,JSON格式
    类似:

    {id:101,name:"zhangsan"}
    

    比mysql数据表的压缩比要高
    像流水系统数据量级大,数据有一些没有规则,这种就适合mongodb
    像360 2017年的大数据平台存储集群(病毒库),是2700个节点的mongodb
    还有像外卖系统、地图系统、物流

    开源,存储结构非常灵活,自带高可用、分布式架构,扩展性灵活,平滑扩容缩容

    选择之所以称之为选择,肯定是痛苦的!
    ------->oldguo

    第二章:安装部署

    1、系统准备

    (1)redhat或centos6.2以上系统
    (2)系统开发包完整
    (3)ip地址和hosts文件解析正常
    (4)iptables防火墙&SElinux关闭
    (5)关闭大页内存机制
    centOS系统关闭方法如下
    ########################################################################
    root用户下
    在vi /etc/rc.local最后添加如下代码

    if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
      echo never > /sys/kernel/mm/transparent_hugepage/enabled
    fi
    if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
       echo never > /sys/kernel/mm/transparent_hugepage/defrag
    fi
            
    cat  /sys/kernel/mm/transparent_hugepage/enabled        
    cat /sys/kernel/mm/transparent_hugepage/defrag  
    

    其他系统关闭参照官方文档:

    https://docs.mongodb.com/manual/tutorial/transparent-huge-pages/

    为什么要关闭?
    Transparent Huge Pages (THP) is a Linux memory management system
    that reduces the overhead of Translation Lookaside Buffer (TLB)
    lookups on machines with large amounts of memory by using larger memory pages.
    However, database workloads often perform poorly with THP,
    because they tend to have sparse rather than contiguous memory access patterns.
    You should disable THP on Linux machines to ensure best performance with MongoDB.
    ############################################################################
    目的提高性能(redis也可以关闭大页内存)

    2、mongodb安装

    官网:www.mongodb.com
    进入后点download或try free进入下载中心(www.mongodb.com/download-center
    选择locally,下载社区版(community server)
    4.0目前尚不稳定,可以先选择3.6,OS选RHEL7.0,包选择二进制包

    二进制包
    2022界面更新

    创建所需用户和组(官方建议非root用户进行管理):

    useradd mongod
    passwd mongod
    

    创建mongodb所需目录结构

    mkdir -p /mongodb/conf
    mkdir -p /mongodb/log
    mkdir -p /mongodb/data
    

    上传并解压软件到指定位置

    [root@db01 data]# cd   /data
    [root@db01 data]# tar xf mongodb-linux-x86_64-rhel70-3.6.12.tgz 
    [root@db01 data]#  cp -r /data/mongodb-linux-x86_64-rhel70-3.6.12/bin/ /mongodb
    

    设置目录结构权限

    chown -R mongod:mongod /mongodb
    

    设置用户环境变量

    su - mongod
    vi .bash_profile
    export PATH=/mongodb/bin:$PATH
    source .bash_profile
    

    手动启动mongodb,在mongod用户下执行

    mongod --dbpath=/mongodb/data --logpath=/mongodb/log/mongodb.log --port=27017 --logappend --fork 
    

    登录mongodb

    [mongod@server2 ~]$ mongo
    

    使用配置文件:
    当前版本有两种一种是类似mysql的配置文件,另一种是YAML,未来4版本只有YAML一种(当前一般使用3.4 3.6版本)
    YAML模式:
    NOTE:
    YAML does not support tab characters for indentation: use spaces instead.
    大小写敏感 通过缩进表示层级关系 禁止使用tab缩进,只能使用空格键 使用#表示注释 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

    --系统日志有关
    systemLog:
    destination: file
    path: "/mongodb/log/mongodb.log" --日志位置
    logAppend: true --日志以追加模式记录

    --数据存储有关
    storage:
    journal:
    enabled: true --类似mysql中的redo
    dbPath: "/mongodb/data" --数据路径的位置

    -- 进程控制
    processManagement:
    fork: true --后台守护进程
    pidFilePath: <string> --pid文件的位置,一般不用配置,可以去掉这行,自动生成到data中

    --网络配置有关
    net:
    bindIp: <ip> -- 监听地址
    port: <port> -- 端口号,默认不配置端口号,是27017

    -- 安全验证有关配置
    security:
    authorization: enabled --是否打开用户名密码验证

    ------------------以下是复制集与分片集群有关----------------------

    replication:
    oplogSizeMB: <NUM>
    replSetName: "<REPSETNAME>"
    secondaryIndexPrefetch: "all"

    sharding:
    clusterRole: <string>
    archiveMovedChunks: <boolean>

    ---for mongos only
    replication:
    localPingThresholdMs: <int>

    sharding:
    configDB: <string>


    ++++++++++++++++++++++
    YAML例子

    cat >  /mongodb/conf/mongo.conf <<EOF
    systemLog:
       destination: file
       path: "/mongodb/log/mongodb.log"
       logAppend: true
    storage:
       journal:
          enabled: true
       dbPath: "/mongodb/data/"
    processManagement:
       fork: true
    net:
       port: 27017
       bindIp: 10.0.0.51,127.0.0.1
    EOF
    mongod -f /mongodb/conf/mongo.conf --shutdown
    mongod -f /mongodb/conf/mongo.conf   
    

    mongodb的关闭方式:

    mongod -f mongo.conf  --shutdown
    

    mongodb 使用systemd管理

    [root@db01 ~]# cat > /etc/systemd/system/mongod.service <<EOF
    [Unit]
    Description=mongodb 
    After=network.target remote-fs.target nss-lookup.target
    [Service]
    User=mongod
    Type=forking
    ExecStart=/mongodb/bin/mongod --config /mongodb/conf/mongo.conf
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/mongodb/bin/mongod --config /mongodb/conf/mongo.conf --shutdown
    PrivateTmp=true  
    [Install]
    WantedBy=multi-user.target
    EOF
    
    [root@db01 ~]# systemctl restart mongod
    [root@db01 ~]# systemctl stop mongod
    [root@db01 ~]# systemctl start mongod
    
    

    在root下用systemctl也可以启动mongod

    3、mongodb常用基本操作

    3.0 mongodb 默认存在的库

    test:登录时默认存在的库(隐藏库,mongodb连接进来默认的库)
    管理MongoDB有关的系统库
    admin库:系统预留库,MongoDB系统管理库
    local库:本地预留库,存储关键日志
    config库:MongoDB配置信息库

    show databases/show dbs
    show tables/show collections
    use admin
    db/select database()
    在mongodb中只要use一下,这个库就算不存在也会自动创建(如果啥都没干则不会保存)

    3.1 命令种类

    (mongodb所有命令都是函数形式)
    db 对象相关命令

    db.[TAB][TAB]
    db.help()
    db.oldboy.[TAB][TAB]
    db.oldboy.help()
    

    rs 复制集有关(replication set):

    rs.[TAB][TAB]
    rs.help()
    

    sh 分片集群(sharding cluster)

    sh.[TAB][TAB]
    sh.help()
    

    4. mongodb对象操作

    mongo mysql
    库 -----> 库
    集合 -----> 表
    文档 -----> 数据行

    4.1 库的操作

    > use test
    >db.dropDatabase()   
    { "dropped" : "test", "ok" : 1 }
    

    4.2 集合的操作

    app> db.createCollection('a')
    { "ok" : 1 }
    app> db.createCollection('b')
    

    方法2:当插入一个文档的时候,一个集合就会自动创建。

    use oldboy
    db.test.insert({name:"zhangsan"})
    db.stu.insert({id:101,name:"zhangsan",age:20,gender:"m"})
    show tables;
    db.stu.insert({id:102,name:"lisi"})
    db.stu.insert({a:"b",c:"d"})
    db.stu.insert({a:1,c:2})
    

    4.3 文档操作

    数据录入:

    for(i=0;i<10000;i++){db.log.insert({"uid":i,"name":"mongodb","age":6,"date":new
    Date()})}
    

    查询数据行数:

    > db.log.count()
    

    全表查询:

    > db.log.find()
    

    每页显示50条记录:

    > DBQuery.shellBatchSize=50; 
    

    按照条件查询

    > db.log.find({uid:999})
    

    以标准的json格式显示数据

    > db.log.find({uid:999}).pretty()
    {
        "_id" : ObjectId("5cc516e60d13144c89dead33"),
        "uid" : 999,
        "name" : "mongodb",
        "age" : 6,
        "date" : ISODate("2019-04-28T02:58:46.109Z")
    }
    

    删除集合中所有记录

    app> db.log.remove({})
    

    查看集合存储信息

    app> db.log.totalSize() //集合中索引+数据压缩存储之后的大小    
    

    4.X版本学习视频:
    https://www.bilibili.com/video/BV1QF411W7u3?spm_id_from=333.337.search-card.all.click

    相关文章

      网友评论

          本文标题:MongoDB 3.X笔记(面向运维)

          本文链接:https://www.haomeiwen.com/subject/eovzmltx.html