Replica sets架构复制集(一)
2014-07-25 16:15
253 查看
Replica sets架构,是高可用性(High
Availability)通常描述一个系统经过专门的设计,从而减少停工时间,保持其服务的高度连续可用性。Mongodb提高的主从复制机制保证了多个数据库的数据同步,这对实现数据库的容灾,备份,恢复,负载均衡等都是有极大的帮助。
主从复制的优点如下:
1,从服务器可用执行查询工作,降低住服务器的访问压力
2,从服务器上执行备份,避免备份期间锁定主服务器的数据
3,当主服务器出现故障的时候,可用快速切换到从服务器,减少宕机时间。
mongodb支持在多个机器中通过异步复制实现故障转移和数据hang余。
mongodb的复制机制分为两种,
Master-slave(主从复制):实现数据同步只需要在其中的一台服务启动时添加“--master”参数,指明服务器的角色是primary ,另一台服务器上加上“--slave”
和“--source”参数,指明服务器角色是slave。
下面正式开始搭建:
mongodb服务部署简介:
确定mongodb正确搭建成功,如下:
在linux下搭建mongodb环境
检查linux版本,找到相应的mongodb安装版本,建议关闭防火墙
我的是64位linux系统,下载下面的版本:
第一步:
[root@localhost ~]#wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.4.tgz
第二步:解压:
[root@localhost ~]#tar zxvf mongodb-linux-x86_64-2.0.4.tgz
第三步:修改解压后的文件名字
[root@localhost ~]#mv mongodb-linux-x86_64-2.0.4 mongodb
第四步:移动根目录下的mongodb文件夹到我们所需要的文件路径下。
[root@localhost ~]#mv mongodb /usr/local/
第五步:进入到我们移动后的文件目录
[root@localhost ~]# cd /usr/local/mongodb
第六步:建立两个目录,一个放数据,一个放日志。此处已经进入到mongodb目录下建立的
[root@localhost mongodb]# mkdir data
[root@localhost mongodb]# mkdir logs
第七步:设置启动mongodb服务
/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data
--logpath=/usr/local/mongodb/logs/logs
--logappend --port=27017 --fork
第八步:启动mongodb数据库
[root@localhost ~]# /usr/local/mongodb/bin/mongo --port 27017
MongoDB shell version: 2.0.4
connecting to: 127.0.0.1:27017/test
> show dbs
local (empty)
>
恭喜,安装成功。你也可以设置开机启动,只需要加入这行脚本
设置开机自启动
将mongodb启动项目追加入rc.local保证mongodb在服务器开机时启动
echo "/usr/local/mongodb/bin/mongod
--dbpath=/usr/local/mongodb/data –logpath=/usr/local/mongodb/logs
–logappend --auth –port=27017" >>
/etc/rc.local
上面是基本环境搭建,下面才是正儿八经的Replica Sets
架构实战!
演示在同一台服务器上部署三节点的Replica Sets.
第一步:在服务器上分别创建3个节点各自的数据文件存储路径,如下
[root@dota ~]# mkdir -p /data/data/r0
[root@dota ~]# mkdir -p /data/data/r1
[root@dota ~]# mkdir -p /data/data/r2
第二部:在服务器上创建日志存储路径,代码如下
[root@dota ~]# mkdir -p /data/log
第三步:在服务器上创建复制集key文件(用于标示同一个复制集的私钥)存储路径,如果3个节点的key文件内容不一致,复制集将不能正常使用。代码如下:
[root@dota ~]# echo "this is re1 super secret key" >
/data/key/r0
[root@dota ~]# echo "this is re1 super secret key" >
/data/key/r1
[root@dota ~]# echo "this is re1 super secret key" >
/data/key/r2
[root@dota ~]# chmod 600 /data/key/r*
第四部:在服务器上启动三个mongodb实例来模拟三个节点,如下文代码所示:
[root@dota ~]# /usr/local/mongodb/bin/mongod --replSet rs1
--keyFile /data/key/r0 --fork --port 28010 --dbpath /data/data/r0
--logpath=/data/log/r0.log --logappend
[root@dota ~]# forked process: 27933
all output going to: /data/log/r0.log
[root@dota ~]# /usr/local/mongodb/bin/mongod --replSet rs1
--keyFile /data/key/r1 --fork --port 28011 --dbpath /data/data/r1
--logpath=/data/log/r1.log --logappend
forked process: 27950
[root@dota ~]# all output going to: /data/log/r1.log
[root@dota ~]# /usr/local/mongodb/bin/mongod --replSet rs1
--keyFile /data/key/r2 --fork --port 28012 --dbpath /data/data/r2
--logpath=/data/log/r2.log --logappend
[root@dota ~]# forked process: 27967
all output going to: /data/log/r2.log
第五步:进一步配置节点信息, 并初始化replica sets环境,如下代码
[root@dota ~]# /usr/local/mongodb/bin/mongo --port 28010
MongoDB shell version: 2.0.4
connecting to: 127.0.0.1:28010/test
>
config_rs1={_id:'rs1',members:[{_id:0,host:'localhost:28010'},{_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)
-----这个地方报错,是因为我的config_rs1写错了,注意这点。
Fri Jul 25 10:02:38 ReferenceError: config is not defined
(shell):1
>
rs.initiate(config_rs1)
---初始化环境
{
"info" : "Config now saved
locally. Should come online in about a
minute.",
"ok" : 1
}
第六步:复制集启动后,可以通过查看复制集状态,分析复制集的各项运行指标,代码如下:
> rs.status()
{
"set" : "rs1",
"date" : ISODate("2014-07-25T02:09:34Z"),
"myState" : 1,
"members" : [
{
"_id" :
0,
"name" :
"localhost:28010",
"health" :
1,
-----------------1表明状态正常,0表示状态异常
"state" :
1,
-----------------1表明primary,2表示slave
"stateStr" :
"PRIMARY",
-----------------表明此机器是主库
"optime" :
{
"t"
: 1406253797000,
"i"
: 1
},
"optimeDate"
: ISODate("2014-07-25T02:03:17Z"),
"self" :
true
},
{
"_id" :
1,
"name" :
"localhost:28011",
"health" :
1,
"state" :
2,
"stateStr" :
"SECONDARY",
"uptime" :
376,
"optime" :
{
"t"
: 1406253797000,
"i"
: 1
},
"optimeDate"
: ISODate("2014-07-25T02:03:17Z"),
"lastHeartbeat"
: ISODate("2014-07-25T02:09:32Z"),
"pingMs" :
0
},
{
"_id" :
2,
"name" :
"localhost:28012",
"health" :
1,
"state" :
2,
"stateStr" :
"SECONDARY",
"uptime" :
376,
"optime" :
{
"t"
: 1406253797000,
"i"
: 1
},
"optimeDate"
: ISODate("2014-07-25T02:03:17Z"),
"lastHeartbeat"
: ISODate("2014-07-25T02:09:32Z"),
"pingMs" :
0
}
],
"ok" : 1
}
除了用“rs.status”命令查看复制集中各成员点的状态之外,还可以用“isMaster“命令查看Replica Sets
状态,代码如下:
PRIMARY> rs.isMaster()
{
"setName" : "rs1",
"ismaster" : true,
"secondary" : false,
"hosts" : [
"localhost:28010",
"localhost:28012",
"localhost:28011"
],
"primary" : "localhost:28010",
"me" : "localhost:28010",
"maxBsonObjectSize" : 16777216,
"ok" : 1
}
----------------------------------------------------------------------这里表明我们的搭建已经成功了!
下面是主从操作日志
PRIMARY> use local
switched to db local
PRIMARY> show collections
oplog.rs
system.replset
PRIMARY> db.oplog.rs.find()
{ "ts" : { "t" : 1406253797000, "i" : 1 }, "h" : NumberLong(0),
"op" : "n", "ns" : "", "o" : { "msg" : "initiating set" } }
PRIMARY>
Availability)通常描述一个系统经过专门的设计,从而减少停工时间,保持其服务的高度连续可用性。Mongodb提高的主从复制机制保证了多个数据库的数据同步,这对实现数据库的容灾,备份,恢复,负载均衡等都是有极大的帮助。
主从复制的优点如下:
1,从服务器可用执行查询工作,降低住服务器的访问压力
2,从服务器上执行备份,避免备份期间锁定主服务器的数据
3,当主服务器出现故障的时候,可用快速切换到从服务器,减少宕机时间。
mongodb支持在多个机器中通过异步复制实现故障转移和数据hang余。
mongodb的复制机制分为两种,
Master-slave(主从复制):实现数据同步只需要在其中的一台服务启动时添加“--master”参数,指明服务器的角色是primary ,另一台服务器上加上“--slave”
和“--source”参数,指明服务器角色是slave。
下面正式开始搭建:
mongodb服务部署简介:
确定mongodb正确搭建成功,如下:
在linux下搭建mongodb环境
检查linux版本,找到相应的mongodb安装版本,建议关闭防火墙
我的是64位linux系统,下载下面的版本:
第一步:
[root@localhost ~]#wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.4.tgz
第二步:解压:
[root@localhost ~]#tar zxvf mongodb-linux-x86_64-2.0.4.tgz
第三步:修改解压后的文件名字
[root@localhost ~]#mv mongodb-linux-x86_64-2.0.4 mongodb
第四步:移动根目录下的mongodb文件夹到我们所需要的文件路径下。
[root@localhost ~]#mv mongodb /usr/local/
第五步:进入到我们移动后的文件目录
[root@localhost ~]# cd /usr/local/mongodb
第六步:建立两个目录,一个放数据,一个放日志。此处已经进入到mongodb目录下建立的
[root@localhost mongodb]# mkdir data
[root@localhost mongodb]# mkdir logs
第七步:设置启动mongodb服务
/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data
--logpath=/usr/local/mongodb/logs/logs
--logappend --port=27017 --fork
第八步:启动mongodb数据库
[root@localhost ~]# /usr/local/mongodb/bin/mongo --port 27017
MongoDB shell version: 2.0.4
connecting to: 127.0.0.1:27017/test
> show dbs
local (empty)
>
恭喜,安装成功。你也可以设置开机启动,只需要加入这行脚本
设置开机自启动
将mongodb启动项目追加入rc.local保证mongodb在服务器开机时启动
echo "/usr/local/mongodb/bin/mongod
--dbpath=/usr/local/mongodb/data –logpath=/usr/local/mongodb/logs
–logappend --auth –port=27017" >>
/etc/rc.local
上面是基本环境搭建,下面才是正儿八经的Replica Sets
架构实战!
演示在同一台服务器上部署三节点的Replica Sets.
第一步:在服务器上分别创建3个节点各自的数据文件存储路径,如下
[root@dota ~]# mkdir -p /data/data/r0
[root@dota ~]# mkdir -p /data/data/r1
[root@dota ~]# mkdir -p /data/data/r2
第二部:在服务器上创建日志存储路径,代码如下
[root@dota ~]# mkdir -p /data/log
第三步:在服务器上创建复制集key文件(用于标示同一个复制集的私钥)存储路径,如果3个节点的key文件内容不一致,复制集将不能正常使用。代码如下:
[root@dota ~]# echo "this is re1 super secret key" >
/data/key/r0
[root@dota ~]# echo "this is re1 super secret key" >
/data/key/r1
[root@dota ~]# echo "this is re1 super secret key" >
/data/key/r2
[root@dota ~]# chmod 600 /data/key/r*
第四部:在服务器上启动三个mongodb实例来模拟三个节点,如下文代码所示:
[root@dota ~]# /usr/local/mongodb/bin/mongod --replSet rs1
--keyFile /data/key/r0 --fork --port 28010 --dbpath /data/data/r0
--logpath=/data/log/r0.log --logappend
[root@dota ~]# forked process: 27933
all output going to: /data/log/r0.log
[root@dota ~]# /usr/local/mongodb/bin/mongod --replSet rs1
--keyFile /data/key/r1 --fork --port 28011 --dbpath /data/data/r1
--logpath=/data/log/r1.log --logappend
forked process: 27950
[root@dota ~]# all output going to: /data/log/r1.log
[root@dota ~]# /usr/local/mongodb/bin/mongod --replSet rs1
--keyFile /data/key/r2 --fork --port 28012 --dbpath /data/data/r2
--logpath=/data/log/r2.log --logappend
[root@dota ~]# forked process: 27967
all output going to: /data/log/r2.log
第五步:进一步配置节点信息, 并初始化replica sets环境,如下代码
[root@dota ~]# /usr/local/mongodb/bin/mongo --port 28010
MongoDB shell version: 2.0.4
connecting to: 127.0.0.1:28010/test
>
config_rs1={_id:'rs1',members:[{_id:0,host:'localhost:28010'},{_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)
-----这个地方报错,是因为我的config_rs1写错了,注意这点。
Fri Jul 25 10:02:38 ReferenceError: config is not defined
(shell):1
>
rs.initiate(config_rs1)
---初始化环境
{
"info" : "Config now saved
locally. Should come online in about a
minute.",
"ok" : 1
}
第六步:复制集启动后,可以通过查看复制集状态,分析复制集的各项运行指标,代码如下:
> rs.status()
{
"set" : "rs1",
"date" : ISODate("2014-07-25T02:09:34Z"),
"myState" : 1,
"members" : [
{
"_id" :
0,
"name" :
"localhost:28010",
"health" :
1,
-----------------1表明状态正常,0表示状态异常
"state" :
1,
-----------------1表明primary,2表示slave
"stateStr" :
"PRIMARY",
-----------------表明此机器是主库
"optime" :
{
"t"
: 1406253797000,
"i"
: 1
},
"optimeDate"
: ISODate("2014-07-25T02:03:17Z"),
"self" :
true
},
{
"_id" :
1,
"name" :
"localhost:28011",
"health" :
1,
"state" :
2,
"stateStr" :
"SECONDARY",
"uptime" :
376,
"optime" :
{
"t"
: 1406253797000,
"i"
: 1
},
"optimeDate"
: ISODate("2014-07-25T02:03:17Z"),
"lastHeartbeat"
: ISODate("2014-07-25T02:09:32Z"),
"pingMs" :
0
},
{
"_id" :
2,
"name" :
"localhost:28012",
"health" :
1,
"state" :
2,
"stateStr" :
"SECONDARY",
"uptime" :
376,
"optime" :
{
"t"
: 1406253797000,
"i"
: 1
},
"optimeDate"
: ISODate("2014-07-25T02:03:17Z"),
"lastHeartbeat"
: ISODate("2014-07-25T02:09:32Z"),
"pingMs" :
0
}
],
"ok" : 1
}
除了用“rs.status”命令查看复制集中各成员点的状态之外,还可以用“isMaster“命令查看Replica Sets
状态,代码如下:
PRIMARY> rs.isMaster()
{
"setName" : "rs1",
"ismaster" : true,
"secondary" : false,
"hosts" : [
"localhost:28010",
"localhost:28012",
"localhost:28011"
],
"primary" : "localhost:28010",
"me" : "localhost:28010",
"maxBsonObjectSize" : 16777216,
"ok" : 1
}
----------------------------------------------------------------------这里表明我们的搭建已经成功了!
下面是主从操作日志
PRIMARY> use local
switched to db local
PRIMARY> show collections
oplog.rs
system.replset
PRIMARY> db.oplog.rs.find()
{ "ts" : { "t" : 1406253797000, "i" : 1 }, "h" : NumberLong(0),
"op" : "n", "ns" : "", "o" : { "msg" : "initiating set" } }
PRIMARY>
相关文章推荐
- Replica sets架构复制集(2)详解
- Replica sets架构复制集(2)详解
- Replica sets架构复制集(3)详…
- Replica sets架构复制集(一)一台机器演示
- Replica sets架构复制集(一)一台机器演示
- Replica sets架构复制集(3)详解--增减节点
- MongoDB Replica Sets (复制集)
- Mongo之架构部署(Replica Sets+Sharding)
- 利用Mongodb的复制集搭建高可用分片,Replica Sets + Sharding的搭建过程
- Mongodb Replica Sets 副本集架构实战 --个人记录
- Mongodb Replica Sets 副本集架构实战(架设、扩充、容灾、修复、客户端代码连入)
- Mongo的Replica Sets (复制集)的配置全过程和心得体会
- 利用Mongodb的复制集搭建高可用分片,Replica Sets + Sharding的搭建过程
- 第五部分 架构篇 第十四章 MongoDB Replica Sets 架构(自动故障转移/读写分离实践)
- Mongo的Replica Sets (复制集)的配置全过程和心得体会
- Mongdb replica sets 复制集高可用方案
- Replica Sets (复制集)
- 使用MongoDB Replica Sets的三种架构(转)
- MongoDB高可用架构:Replica Sets+Sharding
- 第五部分 架构篇 第十二章 MongoDB Replica Sets 架构(简介)