MongoDB 主从配置笔记

MongoDB 自带功能强大的主从,配置也很简单,从零开始花了30分钟搞定

MongoDB主从集合

MongoDB的出从是一个集合概念,包含2个以上的实例。mongo按集合名(replSetName)来区分不同的集合。集合里的每一个成员根据配置的权重(priority)及其他配置项来选举主机(PRIMARY),其他成员自动成为从机(SECONDARY)。mongo默认只能对主机可写,从机只读。
设置主从集的方法
如果直接通过命令启动实例,加上 --replSet "xxx"

mongod [options] --replSet "rs0"

如果是yum安装,mongod 通过读取/etc/mongod.conf自启动,写入配置文件:

replication:
  replSetName: xxx

更多配置项参考: https://docs.mongodb.com/manual/reference/configuration-options/index.html#replication-options

MongoDB 初始化主从实例

mongodb 通过 rs.initiate()方法初始化实例,可传入一个json的配置参数对象进行初始化,参考:https://docs.mongodb.com/manual/reference/replica-configuration/#replsetgetconfig-output
通常只需要配置 _id 和 members :

conf = {
    _id: "xxx", // 集合名称
    members: [
        {_id: 1, host: "127.0.0.1:27017"}
    ]
}
rs.initiate(conf)

以上也可以通过 rs.add("127.0.0.1:27017")来扩展成员。注意当设置多个member成员时,mongodb 应允许其他IP访问,并检查防火墙设置。
mongodb会自动选举主机(通常是第一个成员)
通过rs.conf()查看主从状态

rs.conf()
{
    "_id" : "rs0",
    "version" : 1,
    "protocolVersion" : NumberLong(1),
    "members" : [
        {
            "_id" : 0,
            "host" : "192.168.1.24:27017",
            "arbiterOnly" : false,
            "buildIndexes" : true,
            "hidden" : false,
            "priority" : 1,
            "tags" : {
                
            },
            "slaveDelay" : NumberLong(0),
            "votes" : 1
        },
        {
            "_id" : 1,
            "host" : "192.168.1.25:27017",
            "arbiterOnly" : false,
            "buildIndexes" : true,
            "hidden" : false,
            "priority" : 1,
            "tags" : {
                
            },
            "slaveDelay" : NumberLong(0),
            "votes" : 1
        },
        {
            "_id" : 2,
            "host" : "192.168.1.27:27017",
            "arbiterOnly" : false,
            "buildIndexes" : true,
            "hidden" : false,
            "priority" : 1,
            "tags" : {
                
            },
            "slaveDelay" : NumberLong(0),
            "votes" : 1
        }
    ],
    "settings" : {
        "chainingAllowed" : true,
        "heartbeatIntervalMillis" : 2000,
        "heartbeatTimeoutSecs" : 10,
        "electionTimeoutMillis" : 10000,
        "catchUpTimeoutMillis" : -1,
        "catchUpTakeoverDelayMillis" : 30000,
        "getLastErrorModes" : {
            
        },
        "getLastErrorDefaults" : {
            "w" : 1,
            "wtimeout" : 0
        },
        "replicaSetId" : ObjectId("5b2f079a3c46b120a9c1adad")
    }
}

此时停止 192.168.1.24的mongodb 服务,则 192.168.1.25 的mongodb自动从 SECONDARY 变成了 PRIMARY

主从读写

主从的延迟默认是0,通过配置项自行设置。
从机需要开启 SlaveOk 才可以读取,一般的读取流程为:

use mydb
mydb.setSlaveOk()
mydb.col.find() // ...

水平扩展

添加从机的操作很简单,只需配置从机的 ReplSetName 为相同的集合名称,然后在PRIMARY主机中执行 rs.add("newHost:PORT") ,然后数据就自动同步过去了。

猜你喜欢

转载自www.cnblogs.com/dapianzi/p/9220395.html