[笔记]mongo单实例安装以及配置。

参考文献

MongoDB是一个使用C++编写的、开源的、面向文档的NoSQL(Not Only SQL)数据库,也是当前最热门的NoSql数据库之一。

NoSQL简介

NoSQL的意思是“不仅仅是SQL”,是目前流行的“非关系型数据库”的统称。常见的NoSQL数据库如:Redis、CouchDB、MongoDB、HBase、Cassandra等。

背景

出现NoSQL的原因:为解决在Web2.0时代出现的三高要求:

  1. 对数据库高并发读写的需求
  2. 对海量数据的高效率存储和访问的需求
  3. 对数据库的高可扩展性和高可用性的需求
  4. 而RDB里面的一些特性,在web2.0里面往往变得不那么重要,比如:
    1. 数据库事务一致性
    2. 数据库的实时读写
    3. 复杂的SQL查询,特别是多表关联查询

CAP定理

又被称作布鲁尔定理(Eric Brewer)它指出对于一个分布式计算系统来说,不可能同时满足以下三点:

  1. 强一致性(Consistency):系统在执行某项操作后数据状态仍然处于一致,例如在分布式系统中,更新操作执行成功后所有的用户都应该读取到最新的值,这样的系统被认为具有强一致性。
  2. 可用性(Availability):每一个操作总是能够在一定的时间内返回结果
  3. 分区容错性(Partition tolerance):单个节点故障不应导致整个系统崩溃,也就是说尽管网络在节点之间丢弃(或延迟)任意数量的消息,但是系统继续操作。

根据CAP原理将数据库分成了满足CA原则、满足CP原则和满足AP原则三大类

  1. CA:单点集群,满足一致性,可用性,通常在可扩展性上不太强大,比如RDB。
  2. CP:满足一致性和分区容错性,通常性能不是特别高,如分布式数据库。
  3. AP:满足可用性和分区容错性,通常可能对一致性要求低一些,如大多数的NoSQL。

BASE(Basically Available,Soft-state,Eventual consistency)

eBay的架构师Dan Pritchett源于对大规模分布式系统的实践总结,在ACM上发表文章提出BASE理论,BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency,CAP的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。

  1. 基本可用(Basically Available):系统能够基本运行并一直提供服务。
  2. 软状态(Soft-state):系统不要求一直保持强一致状态。
  3. 最终一致性(Eventual consistency):系统需要在某一时刻后达到一致性要求。

NoSQL的特点

优点

  1. 扩展简单方便,尤其是水平横向扩展(纵向扩展是指用更强的机器;横向扩展是指把数据分散到多个机器)。
  2. 读写快速高效,多数都会映射到内存操作。
  3. 成本低廉,用普通机器,分布式集群即可。
  4. 数据模型灵活,没有固定的数据模型。

缺点

  1. 不提供对SQL的支持
  2. 对事务操作的支持较弱

MongoDB使用场景

下列举例出业界经常使用的场景

  • 游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新
  • 物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。
  • 社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能
  • 物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析
  • 视频直播,使用 MongoDB 存储用户信息、礼物信息等

并没有某个业务场景必须要使用 MongoDB才能解决,但使用 MongoDB 通常能让你以更低的成本解决问题(包括学习、开发、运维等成本),下面是 MongoDB 的主要特性,大家可以对照自己的业务需求看看,匹配的越多,用 MongoDB 就越合适。

MongoDB 特性优势
事务支持MongoDB 目前只支持单文档事务,需要复杂事务支持的场景暂时不适合
灵活的文档模型JSON 格式存储最接近真实对象模型,对开发者友好,方便快速开发迭代
高可用复制集满足数据高可靠、服务高可用的需求,运维简单,故障自动切换
可扩展分片集群海量数据存储,服务能力水平扩展
高性能mmapv1、wiredtiger、mongorocks(rocksdb)、in-memory 等多引擎支持满足各种场景需求
强大的索引支持地理位置索引可用于构建 各种 O2O 应用、文本索引解决搜索的需求、TTL索引解决历史数据自动过期的需求
Gridfs解决文件存储的需求
aggregation & mapreduce解决数据分析场景需求,用户可以自己写查询语句或脚本,将请求都分发到 MongoDB 上完成

安装

mongodb的安装方式比较简单,下面演示在CentOS7上用yum方式安装。

使用yum方式安装

在实际生产环境中服务器上的软件通常都由运维人员安装,我们通过此种傻瓜式安装是为了方便现在学习。

  • 整个mongodb(社区版)包含如下软件

    软件名称描述
    mongodb-org-server包含mongod守护程序和关 联的配置和init脚本
    mongodb-org-mongos包含mongos守护程序
    mongodb-org-shell包含mongo shell,它是一个连接mongodb的命令行客户端,允许用户直接输入nosql语法管理数据库。
    mongodb-org-tools包含以下工具的MongoDB:数据导入、导出、备份、恢复等等
  • 创建yum源文件

vim /etc/yum.repos.d/mongodb-org-3.4.repo1
  • 把下面的内容复制到上面的文件中
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc123456
  • 启动yum命令开始安装
yum install -y mongodb-org1
  • 如果使用SELinux,则必须配置SELinux,以允许在基于Red Hat Linux的系统(Red Hat Enterprise Linux或CentOS Linux)上启动MongoDB。
vim /etc/selinux/config
#在打开的文件中将值设置为disabled
SELINUX=disabled

关闭THP

自CentOS6版本开始引入了Transparent Huge Pages(THP),从CentOS7版本开始,该特性默认就会启用。尽管THP的本意是为提升内存的性能,不过某些数据库厂商还是建议直接关闭THP(比如说Oracle、MariaDB、MongoDB等),否则可能会导致性能出现下降。

首先检查THP的启用状态:不关闭mongo启动的时候会警告。

  • // 检查THP状态
    cat /sys/kernel/mm/transparent_hugepage/defrag
    [always] madvise never
    cat /sys/kernel/mm/transparent_hugepage/enabled
    [always] madvise never
    这个状态就说明都是启用的。
    
  • //禁用THP,编辑rc.local文件
    vim /etc/rc.d/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
    

    编辑完了需要重启服务器才能生效。

配置信息

mongo配置文件操作

  • 安装完后寻找相关配置信息

  • whereis mongd

  • mongod: /usr/bin/mongod /etc/mongod.conf /usr/share/man/man1/mongod.1
    
  • mongd.conf 就是配置文件。

  • 打开就可以看到相关配置信息。

mongdb权限操作配置信息

Built-In Roles(内置角色):
  • 数据库用户角色:
    • read、readWrite;
  • 数据库管理角色:
    • dbAdmin、dbOwner、userAdmin;
  • 集群管理角色:
    • clusterAdmin、clusterManager、clusterMonitor、hostManager;
  • 备份恢复角色:
    • backup、restore;
  • 所有数据库角色:
    • readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  • 超级用户角色:
    • root
      • 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
  • 内部角色:
    • __system
具体角色:
  • Read:
    • 允许用户读取指定数据库。
  • readWrite:
    • 允许用户读写指定数据库。
  • dbAdmin:
    • 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile。
  • userAdmin:
    • 允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户。
  • clusterAdmin:
    • 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
  • readAnyDatabase:
    • 只在admin数据库中可用,赋予用户所有数据库的读权限。
  • readWriteAnyDatabase:
    • 只在admin数据库中可用,赋予用户所有数据库的读写权限。
  • userAdminAnyDatabase:
    • 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限。
  • dbAdminAnyDatabase:
    • 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
  • root:
    • 只在admin数据库中可用。超级账号,超级权限。

开启用户权限

提示:即便设置了账号密码依然可以不通过密码链接,需要在mongo 启动的时候开启认证。

  • 创建用户
    • 注意读写用户的权限请使用readWrite。
show dbs; 
//显示数据库列表

use admin; 
 //进入admin collections

db.createUser({"user":"root","pwd":"z201.com","roles":[{"role":"root","db":"admin"}]}) 
//创建超级管理员root库管理账号

db.auth("root","z201.com")
//校验账号是否匹配
1 
//显示1表示匹配成功

  • 修改密码
db.changeUserPassword('root','z201.com');
  • 数据库开启认证,注意请进入数据库中在执行。
security:
    authorization:true

基础操作

启动

  • systemctl start mongod

重启

  • systemctl restart mongod
  • 如果无效
    • use admin
    • db.shutdownServer();

停止

  • systemctl stop mongod

认证模式启动

  • nohup mongod --auth --port 27017 --dbpath /var/lib/mongo/ &
    • /var/bin/mongd 可以在mongod.conf中查看。

CURD

  • 插入
db.ops_dev.insert({title: 'MongoDB ', 
    description: 'MongoDB 是一个 Nosql 数据库',
    tags: ['mongodb', 'database', 'NoSQL']
})

转载于:https://my.oschina.net/z201/blog/1593906

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值