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
-
仲裁节点
-
至少三个节点
-
初始化同步
- clone 所有的 db
- 应用 dataset 的所有改变, copy oplog 并应用到本地
- 为所有的 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)