MongoDB高可用及索引

MongoDB高可用

  1. 主从模式(弃用)
  2. 使用复制集(replicaSet)
    在复制集中,有且只有一个主节点(primary),可以包含一个或多个从节点(secondary),主从节点直接会通过心跳检测来确定节点是否健康或存活。所有的读写操作都是在主节点上进行的,如果要实现读写分离,需要进行相应的处理,这个最后会说。从节点会根据oplog(也就是操作日志)来复制主节点的数据。

MongoDB复制集

除了主从节点外,MongoDB的复制集中还存在着一种叫仲裁者(Arbiter)的角色。一个仲裁者节点是比较轻量级的,因为它不会去复制主库的数据,因此也就不会成为主节点;但是,它的作用是在投票选举阶段——当主节点故障时,仲裁者可以进行投票。一般来说,不建议一个复制集中包含超过一个仲裁者。

当主节点突然故障后,MongoDB有自己的机制,会自动切换,通过选举,在从节点中选出一个节点作为新的主节点。

使用复制集

比如现在有三个节点(一个primary,两个secondery,且分别部署到三台机器上)

  1. 首先在三台机器上分别创建对应目录(/data/mongo_replset)切启动mongodb:
mongod --port 8015 --dpath=/data/mongo_repliset --replSet test_rs

注意,复制集的名称是一样的

  1. 在primary的机器上把其他两个节点添加到复制集中
cnf = {_id:"test_rs", members:[
        {_id:1, host:"192.168.1.186:8015"},
        {_id:2, host:"192.168.1.187:8015"},
        {_id:3, host:"192.168.1.188:8015"},
        ]
    }

并初始化配置:rs.initiate(cnf)

  1. 连接复制集并自动切换(mongoengine用法)
mongoengine.connect(db={database}, host='mongodb://{username}:{password}@192.168.1.186:8015,192.168.1.187:8015,192.168.1.188:8015/{database}/?authSource={authSource}&replicaSet={replicaSet}', alias={alias})

Mnogo索引的种类及属性

1. 创建索引

基于python,pymongo和mongoengine创建索引的方式不一样

# 假设在集合的book_name建立index
db.collection.create_index({'book_name': 1})  # pymongo
# 而mongoengine一般则是在各个field定义完之后定义一下meta
meta = {
    'index_background': True,
    'indexes': [
        {
            'fields': ['book_name'],
            'sparse': True,  # 稀疏属性
        },
    ],
}

2. 索引的种类

单字段索引,复合索引, 多键索引,地理索引,文本索引,哈希索引

3. 索引属性

唯一索引,部分索引,稀疏索引, TTL索引
索引的稀疏属性确保索引仅包含实际包含索引字段的文档的条目。稀疏索引完全跳过没有索引字段的文档。

你可能感兴趣的:(MongoDB高可用及索引)