mongodb

mongodb

installation

  • mongodb-org
  • mongodb-org-shell
  • mongodb-org-tools
  • mongodb-org-server

config mongodb.conf to connect mongodb

  • comment bind
  • uncomment httpinterface

connect to mongodb from localhost

  • export LC_ALL=C
  • mongodb

常用shell

  • use dbname 内置数据库: local, 使用use dbname是会自动创建一个数据库
  • db.help()
  • db.mycoll.help(), mycoll相当于表
  • cls clear screen
  • for(i = 0; i < 10000; i++) {
    db.mycollection.insert({"name": "demo" + i});
    }
  • show dbs
  • show collections

索引(b+tree, b-tree)

  • db.mycoll.ensureIndex
  • db.mycoll.dropIndex
  • db.mycoll.dropIndexes
  • db.mycoll.getIndexes

管理

  • fork=true | false 是否在后台
  • bind_ip=ip 监听地址
  • log_path
  • auth

mongo replication

  • oplog and heartbeat

  • 仲裁节点

  • 至少三个节点

  • 初始化同步

    1. clone 所有的 db
    2. 应用 dataset 的所有改变, copy oplog 并应用到本地
    3. 为所有的 collection 构建索引

复制指令

  • --replSet=rs0
  • rs.initialize()
  • rs.config()
  • rs.add("192.168.1.10"27012")
  • rs.status()
  • rs.isMaster()

配置

  • 配置好DNS主机名称解析
  • node1: 使用replSet=rs0启动作为主的
  • node2: 使用replSet=rs0启动作为从的
  • 主从如何分配的, 之后主的才会只用rs.add()添加从节点, 这里再node1中使用rs.add添加node2进来
  • 这样master节点中的数据就会被sync到slave上了
  • 但是mongodb默认master可读, slave不可以, 所以要在slave中执行db.setSlaveOk(), 这样就可以了
  • rs.addArb()添加仲裁节点, 用于选举的, 不会存放数据和同步数据

选举

  • 主节点down
  • 0优先级节点不能参与选举和被选举为master
  • 新副本集初始化
  • 从节点的优先级高时
  • 主节点联系不到多数的从节点

将master切换为从

使用rs.stepDown()模拟master节点down, 不提倡
修改master的优先级或者从节点的优先级
  • cnf = rs.config() # 使用cnf变量保存config()函数返回的对象
  • cnf.members[n].priority=10 # 修改需要节点的优先级
  • rs.reconfig(cnf)

mongodb sharding(build-in)

  • 方便CPU, IO
  • 将数据切割成多个数据片

分配的方式(写分散, 读集中)

  • 范围分片
  • 离散分片
  • hash分片

配置

  • config server: 存放元数据, /etc/mongod.conf --> configserver=true, 运行mongod实例的节点
  • mongos: 就是代理节点, 类似于mogilefs的tracker节点, 安装mongodb-org-mongos包即可, mongos --configdb=ip:port --fork --logpath=/path/to/logfile
  • shard1: 数据节点
  • shard2
  • shard3
  • 在other节点上使用mongo --host mongos_name 连接到mongos节点
  • 在shard中创建数据库, 注意, shard节点是不能replSet的, shard就是要节点上的数据不同的
  • sh.addShard()
  • sh.enableSharding(dbname)
posted @ 2018-09-19 20:16  gogogo11  阅读(268)  评论(0编辑  收藏  举报