mongodb主从复制和副本集

来源:互联网 发布:京东数据罗盘多少钱 编辑:程序博客网 时间:2024/06/05 10:26

mongodb 主从复制很简单 只需要在启动的时候指定主从即可

首先我们需要建立两个 dbpath  dblogs 目录

主:

./bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/dblogs --master --port 20001 --fork[root@localhost mongodb]# forked process: 3398all output going to: /usr/local/mongodb/dblogs[root@localhost mongodb]# netstat -tpnl|grep 20001tcp        0      0 0.0.0.0:20001               0.0.0.0:*                   LISTEN      3398/./bin/mongod   

从:

./bin/mongod --slave --source 127.0.0.1:20001 --dbpath=/usr/local/mongodb/data1 --logpath=/usr/local/mongodb/dblogs1 --port 20002 &[1] 3468[root@localhost mongodb]# all output going to: /usr/local/mongodb/dblogs1[root@localhost mongodb]# pstree | grep mongod     |-mongod---9*[{mongod}]     |                    |-mongod---7*[{mongod}]

可以在主服务器上 插入几条数据 再在从服务器上查看

另外    为了减轻压力 可以在从服务器上备份  

[root@localhost mongodb]# ./bin/mongodump --port 20002 -d test connected to: 127.0.0.1:20001DATABASE: test   to     dump/test        test.c1 to dump/test/c1.bson                 2 objects        test.system.indexes to dump/test/system.indexes.bson                 5 objects        test.fs.files to dump/test/fs.files.bson                 0 objects        test.fs.chunks to dump/test/fs.chunks.bson                 0 objects[root@localhost mongodb]# ll总用量 104drwxr-xr-x. 3 root root  4096 8月   7 01:46 bindrwxr-xr-x. 3 root root  4096 8月   7 05:46 datadrwxr-xr-x. 2 root root  4096 8月   7 05:49 data1-rw-r--r--. 1 root root 52343 8月   7 06:09 dblogs-rw-r--r--. 1 root root 27160 8月   7 06:09 dblogs1drwxr-xr-x. 3 root root  4096 8月   7 06:09 dump

缺点:主master挂了之后  不能自动切换到从slave  存在单点故障



副本集

mongodb 在1.6版本开发了replica set ,   主要增加了故障自动切换和自动修复成员节点,各个db之间数据完全一致,最为显著的区别在于,副本集没有固定的主节点,它是整个集群选举出的一个主节点,当其不工作时变更其他节点


首先需要先建立文件 data/data1   data/data2     log/log1(文件)  log/log2(文件)   key/key1(文件)  key/key2(文件)  密钥

echo '123456' > key1 导入密钥

echo '123456' > key1  

chmod  600 *   两把密钥一定要给到600权限

[root@localhost mongodb]# ./bin/mongod --replSet rs1 --keyFile=/usr/local/mongodb/key/key1 --port 20001 --dbpath=/usr/local/mongodb/data/data1/ --logpath=/usr/local/mongodb/log/log1 &[1] 3656[root@localhost mongodb]# ./bin/mongod --replSet rs1 --keyFile=/usr/local/mongodb/key/key2 --port 20002 --dbpath=/usr/local/mongodb/data/data2/ --logpath=/usr/local/mongodb/log/log2 &


//登录一台服务器进行配置
//随便在一个终端进行,这个终端会被当成primary节点,因此连接的这个终端priority优先级要设置高,如果设置成 priority:0  ,primary节点会报错:(我一开始配置就出
现了这个问题
{
        "errmsg" : "couldn't initiate : initiation and reconfiguration of a replica set must be sent to a node that can become primary",
        "ok" : 0
}

//备注:Priority为0的节点永远不能成为主节点,所以设置Secondary-only节点只需要将其priority设置为0.



[root@localhost mongodb]# ./bin/mongo --port 20001
connecting to: 127.0.0.1:20001/test
> config_rs1={
... _id:"rs1",
... members:[
... {_id:0,host:"localhost:20002",priority:0},
... {_id:1,host:"localhost:20001",priority:1}
... ]}

> rs.initiate(config_rs1);//初始化
{
        "info" : "Config now saved locally.  Should come online in about a minute.",
        "ok" : 1
}
> rs.stats();
Fri Aug  7 09:12:54 TypeError: rs.stats is not a function (shell):1
rs1:PRIMARY> rs.status();
{
        "set" : "rs1",
        "date" : ISODate("2015-08-07T01:13:14Z"),
        "myState" : 1,
        "members" : [
                {
                        "_id" : 0,
                        "name" : "localhost:20002",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 26,
                        "optime" : {
                                "t" : 1438909949000,
                                "i" : 1
                        },
                        "optimeDate" : ISODate("2015-08-07T01:12:29Z"),
                        "lastHeartbeat" : ISODate("2015-08-07T01:13:13Z")
                },
                {
                        "_id" : 1,
                        "name" : "localhost:20001",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "optime" : {
                                "t" : 1438909949000,
                                "i" : 1
                        },
                        "optimeDate" : ISODate("2015-08-07T01:12:29Z"),
                        "self" : true
                }
        ],
        "ok" : 1
}


主服务器坏掉后  会从服务器中再次选举出一个主服务器

0 0
原创粉丝点击