单机环境下MongoDB复制集测试步骤

在自己的虚拟机环境中,对MongoDB复制集进行了测试,整个过程如下:


MongoDB复制集简介


MongoDB支持在多个机器中通过异步复制到达故障转移和实现冗余。多个机器中同一时刻只有一台用于写操作。正是由于这个情况,为MongoDB提供了数据一致性的保障。担当primary角色的机器能把读操作分发给slave。
MongoDB高可用分两种:
Master-Slave主从复制:只需要在某一个服务启动时加上 -master参数,而另一个服务加上-slave和 -source参数,即可实现同步。这种方式与MySQL数据库的 master-slave复制方式非常类似,但MongoDB新版本已经不推荐此方案。
Replica Sets复制集:MongoDB在1.6版本的基础上开发了新功能replica set,这个功能更强大一些,增加了故障自动切换和自动修复成员节点,各个DB之间数据完全一致,大大降低了维护成本。auto shared已经明确说明不支持replication Paris,建议使用replica set故障切换完全自动。
replica sets的结构非常类似一个集群,和集群实现的作用是一样的,其中一个节点出现故障,其他节点马上回将业务接过来而无需停机操作。

复制集的架构如下:




MongoDB复制集规划

对于MongoDB的replica Sets复制集,也需要有一个规划:
replSet 复制集名称: rs1
MongoDB数据库安装安装路径为:/usr/local/mongodb/
复制集成员IP与端口:
节点1: localhost:28010   (默认的primary节点)
节点2: localhost:20811
节点3: localhost:28012
复制集各节点的数据文件,日志文件,私钥文件路径:
节点1: /data/data/r0  , /data/log/r0.log , /data/key/r0
节点2: /data/data/r1  , /data/log/r1.log , /data/key/r1
节点3: /data/data/r2  , /data/log/r2.log , /data/key/r2



场景一:部署ReplicaSets
MongoDB的复制集配置步骤还是比较简单的,整体上说,就是准备好各个节点的数据文件、日志文件、私钥文件,然后带参数启动实例,配置replica set内容并初始化就可以了。

1) 创建数据文件存储路径
mkdir -p /data02/mongors/data/r0
mkdir -p /data02/mongors/data/r1
mkdir -p /data02/mongors/data/r2


2)创建日志文件路径
mkdir -p /data02/mongors/log


3)创建主从key文件
用于标识集群的私钥的完整路径,如果各个实例的key file内容不一致,程序将不能正常使用
mkdir -p /data02/mongors/key
echo "this is rs1 super secret key" > /data02/mongors/key/r0
echo "this is rs1 super secret key" > /data02/mongors/key/r1
echo "this is rs1 super secret key" > /data02/mongors/key/r2
chmod 600 /data02/mongors/key/r*


4)启动3个实例
依次添加启动参数,其中三个MongoDB实例:
/usr/local/mongodb/bin/mongod --replSet rs1 --keyFile /data02/mongors/key/r0 --fork --port 28010 --dbpath /data02/mongors/data/r0 --logpath=/data02/mongors/log/r0.log --logappend
/usr/local/mongodb/bin/mongod --replSet rs1 --keyFile /data02/mongors/key/r1 --fork --port 28011 --dbpath /data02/mongors/data/r1 --logpath=/data02/mongors/log/r1.log --logappend
/usr/local/mongodb/bin/mongod --replSet rs1 --keyFile /data02/mongors/key/r2 --fork --port 28012 --dbpath /data02/mongors/data/r2 --logpath=/data02/mongors/log/r2.log --logappend
注:启动命令的参数分别为,mongod为主启动命令, replSet指定复制集名称为rs1,keyfile指定公钥文件 ,fork指定启动方式为deamo后台启动;port指定端口号,dbpath指定数据文件目录,logpath指定日志文件,logappend指定错误日志为日志追加模式;
实例启动过程如下:
#
#/usr/local/mongodb/bin/mongod --replSet rs1 --keyFile /data02/mongors/key/r0 --fork --port 28010 --dbpath /data02/mongors/data/r0 --logpath=/data02/mongors/log/r0.log --logappend
about to fork child process, waiting until server is ready for connections.
forked process: 10984
child process started successfully, parent exiting
#
#/usr/local/mongodb/bin/mongod --replSet rs1 --keyFile /data02/mongors/key/r1 --fork --port 28011 --dbpath /data02/mongors/data/r1 --logpath=/data02/mongors/log/r1.log --logappend
about to fork child process, waiting until server is ready for connections.
forked process: 11030
child process started successfully, parent exiting
#
#/usr/local/mongodb/bin/mongod --replSet rs1 --keyFile /data02/mongors/key/r2 --fork --port 28012 --dbpath /data02/mongors/data/r2 --logpath=/data02/mongors/log/r2.log --logappend
about to fork child process, waiting until server is ready for connections.
forked process: 11076
child process started successfully, parent exiting
#



通过进程和端口,验证启动状态:
ps -ef|grep mongo
netstat -tunlp | grep 28010
netstat -tunlp | grep 28011
netstat -tunlp | grep 28012
验证结果如下:
#ps -ef |grep mongo
root      5715     1  0 Apr09 ?        00:11:50 mongod --dbpath=/data02/mongodb/db/ --logpath=/data02/mongodb/logs/mongodb.log --fork
root     10984     1  0 14:23 ?        00:00:00 /usr/local/mongodb/bin/mongod --replSet rs1 --keyFile /data02/mongors/key/r0 --fork --port 28010 --dbpath /data02/mongors/data/r0 --logpath=/data02/mongors/log/r0.log --logappend
root     11030     1  0 14:23 ?        00:00:00 /usr/local/mongodb/bin/mongod --replSet rs1 --keyFile /data02/mongors/key/r1 --fork --port 28011 --dbpath /data02/mongors/data/r1 --logpath=/data02/mongors/log/r1.log --logappend
root     11076     1  0 14:23 ?        00:00:00 /usr/local/mongodb/bin/mongod --replSet rs1 --keyFile /data02/mongors/key/r2 --fork --port 28012 --dbpath /data02/mongors/data/r2 --logpath=/data02/mongors/log/r2.log --logappend
root     11121 10769  0 14:23 pts/1    00:00:00 grep mongo
#
#
#netstat -tunlp |grep 28010
tcp        0      0 0.0.0.0:28010               0.0.0.0:*                   LISTEN      10984/mongod        
#
#netstat -tunlp | grep 28011
tcp        0      0 0.0.0.0:28011               0.0.0.0:*                   LISTEN      11030/mongod        
#
#netstat -tunlp | grep 28012
tcp        0      0 0.0.0.0:28012               0.0.0.0:*                   LISTEN      11076/mongod        
#




5)配置及初始化 Replica Sets
登录到primary服务器上:
# /usr/local/mongo/bin/mongo -port 28010
配置复制集:
> config = {_id: 'rs1', members: [
                           {_id: 0, host: 'localhost:28010',priority:1},
                           {_id: 1, host: 'localhost:28011'},
                           {_id: 2, host: 'localhost:28012'}]
            }
{
    "_id" : "rs1",
    "members": [
        {
            "_id": 0,
            "host" : "localhost:28010"
        },
        {
            "_id": 1,
            "host" : "localhost:28011"
        },
        {
            "_id": 2,
            "host" : "localhost:28012"
        }
    ]
}





初始化配置,使上面的配置生效:
>  rs.initiate(config);

实际操作过程如下:
#/usr/local/mongodb/bin/mongo -port 28010
MongoDB shell version: 2.6.5
connecting to: 127.0.0.1:28010/test
> 
> show databases;
admin  (empty)
local  0.078GB
> 
> show collections;
2015-04-13T14:26:59.980+0800 error: { "$err" : "not master and slaveOk=false", "code" : 13435 } at src/mongo/shell/query.js:131
> 
> config = {_id: 'rs1', members: [
...                            {_id: 0, host: 'localhost:28010',priority:1},
...                            {_id: 1, host: 'localhost:28011'},
...                            {_id: 2, host: 'localhost:28012'}]
...             }
{
        "_id" : "rs1",
        "members" : [
                {
                        "_id" : 0,
                        "host" : "localhost:28010",
                        "priority" : 1
                },
                {
                        "_id" : 1,
                        "host" : "localhost:28011"
                },
                {
                        "_id" : 2,
                        "host" : "localhost:28012"
                }
        ]
}
> 
> rs.initiate(config);
{
        "info" : "Config now saved locally.  Should come online in about a minute.",
        "ok" : 1
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值