zoukankan      html  css  js  c++  java
  • Mongo --01 介绍、安装、优化报警

    一 、 NoSQL 介绍

    NoSQL,指的是非关系型的数据库。
    NoSQL有时也称作Not Only SQL的缩写
    是对不同于传统的关系型数据库的数据库管理系统的统称。
    对NoSQL最普遍的解释是”非关联型的”,强调Key-Value Stores和文档数据库的优点,而不是单纯的RDBMS。
    NoSQL用于超大规模数据的存储。
    这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

    为什么使用NoSQL?

    今天我们可以通过第三方平台可以很容易的访问和抓取数据。
    用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。
    我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了
    NoSQL数据库的发展也却能很好的处理这些大的数据。

    二、MongoDB简介

    Mongodb由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

    是专为可扩展性,高性能和高可用性而设计的数据库, 是非关系型数据库中功能最丰富,最像关系型数据库的,它支持的数据结构非常散,是类似 json 的 bjson 格式,因此可以存储比较复杂的数据类型。

    MongoDB的(来自于英文单词“Humongous”,中文含义为“庞大”)是可以应用于各种规模的企业,各个行业以及各类应用程序的开源数据库。作为一个适用于敏捷开发的数据库,MongoDB的的数据模式可以随着应用程序的发展而灵活地更新。

    MongoDB 以一种叫做 BSON(二进制 JSON)的存储形式将数据作为文档存储。

    具有相似结构的文档通常被整理成集合。可以把这些集合看成类似于关系数据库中的表: 文档和行相似, 字段和列相似。

    mongo和mysql数据对比

    mysql mongo
    集合
    字段 key:value
    文档

    三、MongoDB特点

    **1.高性能: **
    Mongodb提供高性能的数据持久性
    尤其是支持嵌入式数据模型减少数据库系统上的I/O操作
    索引支持能快的查询,并且可以包括来嵌入式文档和数组中的键

    2.丰富的语言查询:
    Mongodb支持丰富的查询语言来支持读写操作(CRUD)以及数据汇总,文本搜索和地理空间索引

    3.高可用性:
    Mongodb的复制工具,成为副本集,提供自动故障转移和数据冗余,

    4.水平可扩展性:
    Mongodb提供了可扩展性,作为其核心功能的一部分,分片是将数据分,在一组计算机上。

    5.支持多种存储引擎:
    WiredTiger存储引擎和、MMAPv1存储引擎和InMemory存储引擎

    四、 mongo应用场景

    游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新

    物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。

    社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能

    物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析

    视频直播,使用 MongoDB 存储用户信息、礼物信息等

    电商场景,使用 MongoDB
    商城上衣和裤子两种商品,除了有共同属性,如产地、价格、材质、颜色等外,还有各自有不同的属性集,如上衣的独有属性是肩宽、胸围、袖长等,裤子的独有属性是臀围、脚口和裤长等

    五、 安装配置mongodb

    规划目录(根据公司情况)

    例如:
    #软件所在目录
    /opt/mongodb 
    #单节点目录
    /opt/mongo_27017/{conf,log,pid}
    #数据目录
    /data/mongo_27017
    

    1.下载并解压

    yum install libcurl openssl -y
    cd /opt/
    wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.13.tgz
    tar zxvf mongodb-linux-x86_64-3.6.13.tgz
    ln -s mongodb-linux-x86_64-3.6.13 mongodb
    

    2.创建文件目录以及数据目录

    mkdir /opt/mongo_27017/{conf,logs,pid} -p
    mkdir /data/mongo_27017 -p
    

    3.配置启动mongo

    1.创建配置文件
    cat > /opt/mongo_27017/conf/mongodb.conf  << EOF
    systemLog:
      destination: file   
      logAppend: true  
      path: /opt/mongo_27017/logs/mongodb.log
    
    storage:
      journal:
        enabled: true
      dbPath: /data/mongo_27017
      directoryPerDB: true
      wiredTiger:
         engineConfig:
            cacheSizeGB: 1
            directoryForIndexes: true
         collectionConfig:
            blockCompressor: zlib
         indexConfig:
            prefixCompression: true
    
    processManagement:
      fork: true
      pidFilePath: /opt/mongo_27017/pid/mongod.pid
    
    net:
      port: 27017
      bindIp: 127.0.0.1,10.0.0.51
    EOF
    
    

    4.启动mongo

    /opt/mongodb/bin/mongod -f /opt/mongo_27017/conf/mongodb.conf
    

    5.检查是否启动

    ps -ef|grep mongo
    netstat -lntup|grep 27017
    

    6.配置登录mongo

    #写入环境变量
    echo 'PATH=$PATH:/opt/mongodb/bin' >> /etc/profile
    source /etc/profile
    
    

    7.登录和关闭

    #1.登录
    mongo db01:27017
    
    #2.关闭
    方法1:
    使用localhost登录
    mongo localhost:27017
    use admin
    db.shutdownServer()
    方法2:
    mongod -f /opt/mongo_27017/conf/mongodb.conf --shutdown
    

    六、优化报警

    启动后,会有几个报警内容如下:

    报警内容1:内存不足

    2019-11-05T00:24:56.345+0800 I STORAGE  [initandlisten] ** WARNING: The configured WiredTiger cache size is more than 80% of available RAM.
    
    

    解决方法:

    1.添加内存
    2.调整配置文件里的cache大小

    报警内容2:配置访问控制参数

    2019-11-05T00:24:56.345+0800 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/faq-memory-diagnostics-wt
    2019-11-05T00:24:57.129+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
    2019-11-05T00:24:57.129+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
    
    

    解决方法:

    ==============

    报警内容3:不是以普通用户启动

    2019-11-05T00:24:57.129+0800 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
    
    

    解决方法:

    mongod -f /opt/mongo_27017/conf/mongodb.conf --shutdown
    useradd mongo
    echo "123456"|passwd --stdin mongo
    chown -R mongo:mongo /opt/
    chown -R mongo:mongo /data/
    su - mongo
    mongod -f /opt/mongo_27017/conf/mongodb.conf
    mongo db01:27017
    
    

    报警内容4:

    2019-11-05T00:24:57.129+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
    2019-11-05T00:24:57.129+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
    
    2019-11-05T00:24:57.129+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
    2019-11-05T00:24:57.129+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
    
    

    解决方法:

    1.临时解决
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
    echo never > /sys/kernel/mm/transparent_hugepage/defrag
    
    2.官方脚本
    [root@db01 ~]# cat /etc/init.d/disable-transparent-hugepages
    #!/bin/bash
    ### BEGIN INIT INFO
    # Provides:          disable-transparent-hugepages
    # Required-Start:    $local_fs
    # Required-Stop:
    # X-Start-Before:    mongod mongodb-mms-automation-agent
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: Disable Linux transparent huge pages
    # Description:       Disable Linux transparent huge pages, to improve
    #                    database performance.
    ### END INIT INFO
    
    case $1 in
      start)
        if [ -d /sys/kernel/mm/transparent_hugepage ]; then
          thp_path=/sys/kernel/mm/transparent_hugepage
        elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then
          thp_path=/sys/kernel/mm/redhat_transparent_hugepage
        else
          return 0
        fi
    
        echo 'never' > ${thp_path}/enabled
        echo 'never' > ${thp_path}/defrag
    
        re='^[0-1]+$'
        if [[ $(cat ${thp_path}/khugepaged/defrag) =~ $re ]]
        then
          # RHEL 7
          echo 0  > ${thp_path}/khugepaged/defrag
        else
          # RHEL 6
          echo 'no' > ${thp_path}/khugepaged/defrag
        fi
    
        unset re
        unset thp_path
        ;;
    esac
    =================================================================
    
    [root@db01 ~]# chkconfig --add disable-transparent-hugepages
    [root@db01 ~]# chkconfig --list|grep disable
    
    
    
    
  • 相关阅读:
    Ocelot网关
    .Net Configuration配置优先级问题
    FilterContext/HttpContext 获取请求参数
    关于.Net的文件上传问题
    Notion+Zetero文献同步配置
    PyTorch训练模版
    marked ASP.NET 页面对象模型
    转:jQuery设计思想
    tryParse, try/catch(Parse), Convert比较
    CSS3 :nthchild()伪类选择器
  • 原文地址:https://www.cnblogs.com/gongjingyun123--/p/12088283.html
Copyright © 2011-2022 走看看