mongodb主从复制和副本集

本文介绍了MongoDB的主从复制和副本集。主从复制在启动时通过指定主从角色实现,但存在单点故障问题。副本集在1.6版本引入,能自动切换主节点并保持数据一致性,解决了主从复制的缺点,需要设置包括密钥在内的多个文件。
摘要由CSDN通过智能技术生成

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

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

主:

./bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/dblogs --master --port 20001 --fork
[root@localhost mongodb]# forked process: 3398
all output going to: /usr/local/mongodb/dblogs

[root@localhost mongodb]# netstat -tpnl|grep 20001
tcp        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:20001
DATABASE: 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
总用量 104
drwxr-xr-x. 3 root root  4096 8月   7 01:46 bin
drwxr-xr-x. 3 root root  4096 8月   7 05:46 data
drwxr-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 dblogs1
drwxr-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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值