创建三个数据库目录

$ cd /data
$ mkdir db27017 db27018 db27019

启动三个实例

$ mongod --replSet replset --dbpath /data/db27017 --port 27017 --oplogSize 200 --smallfiles
$ mongod --replSet replset --dbpath /data/db27018 --port 27018 --oplogSize 200 --smallfiles
$ mongod --replSet replset --dbpath /data/db27019 --port 27019 --oplogSize 200 --smallfiles

开启命令行

$ mongo

初始化

$ rs.initiate()

查看 name

$ rs.status()

添加一个从节点, 这里的 'lai-2.local' 是 rs.status() 查出来的 name 属性

$ rs.add('lai-2.local:27018')

添加一个 arbiter

$ rs.addArb('lai-2.local:27019')

再查看状态, 可以看到 members 变成了三个

$ rs.status()

自动恢复

$ mongo  —nodb

执行下面的代码, 模拟插入操作

var conn = new Mongo("replset/localhost:27017,localhost:27018,localhost:27019");
var db =conn.getDB("test");
var count=0; while(count++<1000) {
    try{
        sleep(1000);  
        db.col.insert({n: count});  
        print("插入成功 #" + count);  
    }
    catch(exception){
        print("插入失败 #"+count+",  正在重试...");
        count--;
    }
}

执行上述脚本后, 关掉 27017 的 shell 看看发生了什么?

数据库连接 27017 失败, 会尝试连接 27018.

这时候 27018 变成主节点了.

重启 27017 的话, 27017 变成非主节点了.

这时候再次关掉 27018 的shell, 27017 则会变成主节点.


赖小赖小赖
1.1k 声望40 粉丝

笨鸟。