Mongodb 复制集Replica Set搭建与测试
环境准备:
服务器:
192.168.0.33 CentOS release 5.5 (Final)
192.168.0.99 CentOS release 5.5 (Final)
Mongodb版本:
mongodb-linux-x86_64-rhel55-3.0.5.tgz
Replica Set
其实简单来说就是集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据需要和主节点一致
Replica Set使用的是n个mongod节点,构建具备自动的容错功能(auto-failover),自动恢复的(auto-recovery)的高可用方案。
默认设置下,主节点提供所有增删查改服务,备节点不提供任何服务。但是可以通过设置使备节点提供查询服务,这样就可以减少主节点的压力
Mongodb Replica Set环境搭建:
1.规划:
两台机器上构建一个集群分片:
规划对应的端口号:
192.168.0.33 Shard Server 1:28010
192.168.0.99 Shard Server 2:28011
192.168.0.99 Shard Server 3:28012
2.在服务器上创建目录:
192.168.0.33:
mkdir -p /appl/mongodb/data/r0
mkdir -p /appl/mongodb/data/log
mkdir -p /appl/mongodb/data/key
echo "this is rs1 super secret key" > /appl/mongodb/data/key/r0
chmod 600 /appl/mongodb/data/key/r*
192.168.0.99:
mkdir -p /appl/mongodb/data/r1
mkdir -p /appl/mongodb/data/r2
mkdir -p /data/log
mkdir -p /appl/mongodb/data/key
echo "this is rs1 super secret key" > /appl/mongodb/data/key/r1
echo "this is rs1 super secret key" > /appl/mongodb/data/key/r2
chmod 600 /appl/mongodb/data/key/r*
上传mongdb安装文件到两台服务器的/appl/mongodb和/appl/mongodb目录解压
tar -zxvf mongodb-linux-x86_64-rhel55-3.0.5.tgz
然后把解压的bin目录下的所有文件移动/appl/mongodb和/appl/mongodb目录下
3.启动Shard Server实例
启动Shard Server实例1(192.168.0.33)
/appl/mongodb/mongod --replSet rs1 --keyFile /appl/mongodb/data/key/r0 --fork --port 28010 --dbpath /appl/mongodb/data/r0 --logpath=/appl/mongodb/data/log/r0.log --logappend
启动Shard Server实例2(192.168.0.99)
/appl/mongodb/mongod --replSet rs1 --keyFile /appl/mongodb/data/key/r1 --fork --port 28011 --dbpath /appl/mongodb/data/r1 --logpath=/appl/mongodb/data/log/r1.log –logappend
启动Shard Server实例3(192.168.0.99)
/appl/mongodb/mongod --replSet rs1 --keyFile /appl/mongodb/data/key/r2 --fork --port 28012 --dbpath /appl/mongodb/data/r2 --logpath=/appl/mongodb/data/log/r2.log --logappend
4. 配置及初始化 Replica Sets创建数据目录:
config_rs1 = {_id: 'rs1', members: [
{_id: 0, host: '192.168.0.33:28010', priority:1},
{_id: 1, host: '192.168.0.99:28011'},
{_id: 2, host: '192.168.0.99:28012'}]}
rs.initiate(config_rs1);
[root@tts mongodb]# ./mongo --port 28010
MongoDB shell version: 3.0.5
connecting to: 127.0.0.1:28010/test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
>
> use adminuse admin
switched to db admin
>
>
> dbdb
admin
> config_rs1 = {_id: 'rs1', members: [ config_rs1 = {_id: 'rs1', members: [
... {_id: 0, host: '192.168.0.33:28010', priority:1}, {_id: 0, host: '192.168.0.33:28010', priority:1},
... {_id: 1, host: '192.168.0.99:28011'}, {_id: 1, host: '192.168.0.99:28011'},
... {_id: 2, host: '192.168.0.99:28012'}]} {_id: 2, host: '192.168.0.99:28012'}]}
{
"_id" : "rs1",
"members" : [
{
"_id" : 0,
"host" : "192.168.0.33:28010",
"priority" : 1
},
{
"_id" : 1,
"host" : "192.168.0.99:28011"
},
{
"_id" : 2,
"host" : "192.168.0.99:28012"
}
]
}
> rs.initiate(config_rs1);rs.initiate(config_rs1);
{ "ok" : 1 }
rs1:OTHER>
rs1:SECONDARY>
rs1:PRIMARY>
rs1:PRIMARY>
rs1:PRIMARY>
rs1:PRIMARY>
rs1:PRIMARY> rs.status() rs.status()
{
"set" : "rs1",
"date" : ISODate("2015-08-12T01:58:49.221Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "192.168.0.33:28010",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 575,
"optime" : Timestamp(1439344688, 1),
"optimeDate" : ISODate("2015-08-12T01:58:08Z"),
"electionTime" : Timestamp(1439344692, 1),
"electionDate" : ISODate("2015-08-12T01:58:12Z"),
"configVersion" : 1,
"self" : true
},
{
"_id" : 1,
"name" : "192.168.0.99:28011",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 62,
"optime" : Timestamp(1439344688, 1),
"optimeDate" : ISODate("2015-08-12T01:58:08Z"),
"lastHeartbeat" : ISODate("2015-08-12T01:58:48.769Z"),
"lastHeartbeatRecv" : ISODate("2015-08-12T01:58:48.649Z"),
"pingMs" : 3,
"configVersion" : 1
},
{
"_id" : 2,
"name" : "192.168.0.99:28012",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 62,
"optime" : Timestamp(1439344688, 1),
"optimeDate" : ISODate("2015-08-12T01:58:08Z"),
"lastHeartbeat" : ISODate("2015-08-12T01:58:48.769Z"),
"lastHeartbeatRecv" : ISODate("2015-08-12T01:58:48.793Z"),
"pingMs" : 3,
"configVersion" : 1
}
],
"ok" : 1
}
rs1:PRIMARY>
5. 查看复制集状态
rs1:PRIMARY> rs.status()rs.status()
{
"set" : "rs1",
"date" : ISODate("2015-08-12T04:54:45.515Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "192.168.0.33:28010",
"health" : 1, --1 表明正常; 0 表明异常
"state" : 1, -- 1 表明是 Primary; 2 表明是 Secondary;
"stateStr" : "PRIMARY",
"uptime" : 8950,
"optime" : Timestamp(1439346099, 2),
"optimeDate" : ISODate("2015-08-12T02:21:39Z"),
"electionTime" : Timestamp(1439346601, 1),
"electionDate" : ISODate("2015-08-12T02:30:01Z"),
"configVersion" : 1,
"self" : true
},
{
"_id" : 1,
"name" : "192.168.0.99:28011",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 8715,
"optime" : Timestamp(1439346099, 2),
"optimeDate" : ISODate("2015-08-12T02:21:39Z"),
"lastHeartbeat" : ISODate("2015-08-12T04:54:45Z"),
"lastHeartbeatRecv" : ISODate("2015-08-12T04:54:43.878Z"),
"pingMs" : 4,
"configVersion" : 1
},
{
"_id" : 2,
"name" : "192.168.0.99:28012",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 8387,
"optime" : Timestamp(1439346099, 2),
"optimeDate" : ISODate("2015-08-12T02:21:39Z"),
"lastHeartbeat" : ISODate("2015-08-12T04:54:45.002Z"),
"lastHeartbeatRecv" : ISODate("2015-08-12T04:54:45.359Z"),
"pingMs" : 2,
"configVersion" : 1
}
],
"ok" : 1
}
rs1:PRIMARY>
注:
Mongodb启动
在192.168.0.33启动主节点
/appl/mongodb/mongod --replSet rs1 --keyFile /appl/mongodb/data/key/r0 --fork --port 28010 --dbpath /appl/mongodb/data/r0 --logpath=/appl/mongodb/data/log/r0.log --logappend
在192.168.0.99启动两个备节点:
/appl/mongodb/mongod --replSet rs1 --keyFile /appl/mongodb/data/key/r1 --fork --port 28011 --dbpath /appl/mongodb/data/r1 --logpath=/appl/mongodb/data/log/r1.log --logappend
/appl/mongodb/mongod --replSet rs1 --keyFile /appl/mongodb/data/key/r2 --fork --port 28012 --dbpath /appl/mongodb/data/r2 --logpath=/appl/mongodb/data/log/r2.log --logappend
Mongodb连接
连接主节点:
./mongo -u root -p root 192.168.0.33:28010/admin
连接2个备节点:
./mongo -u root -p root 192.168.0.99:28011/admin
./mongo -u root -p root 192.168.0.99:28012/admin
环境准备:
服务器:
192.168.0.33 CentOS release 5.5 (Final)
192.168.0.99 CentOS release 5.5 (Final)
Mongodb版本:
mongodb-linux-x86_64-rhel55-3.0.5.tgz
Replica Set
其实简单来说就是集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据需要和主节点一致
Replica Set使用的是n个mongod节点,构建具备自动的容错功能(auto-failover),自动恢复的(auto-recovery)的高可用方案。
默认设置下,主节点提供所有增删查改服务,备节点不提供任何服务。但是可以通过设置使备节点提供查询服务,这样就可以减少主节点的压力
Mongodb Replica Set环境搭建:
1.规划:
两台机器上构建一个集群分片:
规划对应的端口号:
192.168.0.33 Shard Server 1:28010
192.168.0.99 Shard Server 2:28011
192.168.0.99 Shard Server 3:28012
2.在服务器上创建目录:
192.168.0.33:
mkdir -p /appl/mongodb/data/r0
mkdir -p /appl/mongodb/data/log
mkdir -p /appl/mongodb/data/key
echo "this is rs1 super secret key" > /appl/mongodb/data/key/r0
chmod 600 /appl/mongodb/data/key/r*
192.168.0.99:
mkdir -p /appl/mongodb/data/r1
mkdir -p /appl/mongodb/data/r2
mkdir -p /data/log
mkdir -p /appl/mongodb/data/key
echo "this is rs1 super secret key" > /appl/mongodb/data/key/r1
echo "this is rs1 super secret key" > /appl/mongodb/data/key/r2
chmod 600 /appl/mongodb/data/key/r*
上传mongdb安装文件到两台服务器的/appl/mongodb和/appl/mongodb目录解压
tar -zxvf mongodb-linux-x86_64-rhel55-3.0.5.tgz
然后把解压的bin目录下的所有文件移动/appl/mongodb和/appl/mongodb目录下
3.启动Shard Server实例
启动Shard Server实例1(192.168.0.33)
/appl/mongodb/mongod --replSet rs1 --keyFile /appl/mongodb/data/key/r0 --fork --port 28010 --dbpath /appl/mongodb/data/r0 --logpath=/appl/mongodb/data/log/r0.log --logappend
启动Shard Server实例2(192.168.0.99)
/appl/mongodb/mongod --replSet rs1 --keyFile /appl/mongodb/data/key/r1 --fork --port 28011 --dbpath /appl/mongodb/data/r1 --logpath=/appl/mongodb/data/log/r1.log –logappend
启动Shard Server实例3(192.168.0.99)
/appl/mongodb/mongod --replSet rs1 --keyFile /appl/mongodb/data/key/r2 --fork --port 28012 --dbpath /appl/mongodb/data/r2 --logpath=/appl/mongodb/data/log/r2.log --logappend
4. 配置及初始化 Replica Sets创建数据目录:
config_rs1 = {_id: 'rs1', members: [
{_id: 0, host: '192.168.0.33:28010', priority:1},
{_id: 1, host: '192.168.0.99:28011'},
{_id: 2, host: '192.168.0.99:28012'}]}
rs.initiate(config_rs1);
[root@tts mongodb]# ./mongo --port 28010
MongoDB shell version: 3.0.5
connecting to: 127.0.0.1:28010/test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
>
> use adminuse admin
switched to db admin
>
>
> dbdb
admin
> config_rs1 = {_id: 'rs1', members: [ config_rs1 = {_id: 'rs1', members: [
... {_id: 0, host: '192.168.0.33:28010', priority:1}, {_id: 0, host: '192.168.0.33:28010', priority:1},
... {_id: 1, host: '192.168.0.99:28011'}, {_id: 1, host: '192.168.0.99:28011'},
... {_id: 2, host: '192.168.0.99:28012'}]} {_id: 2, host: '192.168.0.99:28012'}]}
{
"_id" : "rs1",
"members" : [
{
"_id" : 0,
"host" : "192.168.0.33:28010",
"priority" : 1
},
{
"_id" : 1,
"host" : "192.168.0.99:28011"
},
{
"_id" : 2,
"host" : "192.168.0.99:28012"
}
]
}
> rs.initiate(config_rs1);rs.initiate(config_rs1);
{ "ok" : 1 }
rs1:OTHER>
rs1:SECONDARY>
rs1:PRIMARY>
rs1:PRIMARY>
rs1:PRIMARY>
rs1:PRIMARY>
rs1:PRIMARY> rs.status() rs.status()
{
"set" : "rs1",
"date" : ISODate("2015-08-12T01:58:49.221Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "192.168.0.33:28010",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 575,
"optime" : Timestamp(1439344688, 1),
"optimeDate" : ISODate("2015-08-12T01:58:08Z"),
"electionTime" : Timestamp(1439344692, 1),
"electionDate" : ISODate("2015-08-12T01:58:12Z"),
"configVersion" : 1,
"self" : true
},
{
"_id" : 1,
"name" : "192.168.0.99:28011",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 62,
"optime" : Timestamp(1439344688, 1),
"optimeDate" : ISODate("2015-08-12T01:58:08Z"),
"lastHeartbeat" : ISODate("2015-08-12T01:58:48.769Z"),
"lastHeartbeatRecv" : ISODate("2015-08-12T01:58:48.649Z"),
"pingMs" : 3,
"configVersion" : 1
},
{
"_id" : 2,
"name" : "192.168.0.99:28012",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 62,
"optime" : Timestamp(1439344688, 1),
"optimeDate" : ISODate("2015-08-12T01:58:08Z"),
"lastHeartbeat" : ISODate("2015-08-12T01:58:48.769Z"),
"lastHeartbeatRecv" : ISODate("2015-08-12T01:58:48.793Z"),
"pingMs" : 3,
"configVersion" : 1
}
],
"ok" : 1
}
rs1:PRIMARY>
5. 查看复制集状态
rs1:PRIMARY> rs.status()rs.status()
{
"set" : "rs1",
"date" : ISODate("2015-08-12T04:54:45.515Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "192.168.0.33:28010",
"health" : 1, --1 表明正常; 0 表明异常
"state" : 1, -- 1 表明是 Primary; 2 表明是 Secondary;
"stateStr" : "PRIMARY",
"uptime" : 8950,
"optime" : Timestamp(1439346099, 2),
"optimeDate" : ISODate("2015-08-12T02:21:39Z"),
"electionTime" : Timestamp(1439346601, 1),
"electionDate" : ISODate("2015-08-12T02:30:01Z"),
"configVersion" : 1,
"self" : true
},
{
"_id" : 1,
"name" : "192.168.0.99:28011",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 8715,
"optime" : Timestamp(1439346099, 2),
"optimeDate" : ISODate("2015-08-12T02:21:39Z"),
"lastHeartbeat" : ISODate("2015-08-12T04:54:45Z"),
"lastHeartbeatRecv" : ISODate("2015-08-12T04:54:43.878Z"),
"pingMs" : 4,
"configVersion" : 1
},
{
"_id" : 2,
"name" : "192.168.0.99:28012",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 8387,
"optime" : Timestamp(1439346099, 2),
"optimeDate" : ISODate("2015-08-12T02:21:39Z"),
"lastHeartbeat" : ISODate("2015-08-12T04:54:45.002Z"),
"lastHeartbeatRecv" : ISODate("2015-08-12T04:54:45.359Z"),
"pingMs" : 2,
"configVersion" : 1
}
],
"ok" : 1
}
rs1:PRIMARY>
注:
Mongodb启动
在192.168.0.33启动主节点
/appl/mongodb/mongod --replSet rs1 --keyFile /appl/mongodb/data/key/r0 --fork --port 28010 --dbpath /appl/mongodb/data/r0 --logpath=/appl/mongodb/data/log/r0.log --logappend
在192.168.0.99启动两个备节点:
/appl/mongodb/mongod --replSet rs1 --keyFile /appl/mongodb/data/key/r1 --fork --port 28011 --dbpath /appl/mongodb/data/r1 --logpath=/appl/mongodb/data/log/r1.log --logappend
/appl/mongodb/mongod --replSet rs1 --keyFile /appl/mongodb/data/key/r2 --fork --port 28012 --dbpath /appl/mongodb/data/r2 --logpath=/appl/mongodb/data/log/r2.log --logappend
Mongodb连接
连接主节点:
./mongo -u root -p root 192.168.0.33:28010/admin
连接2个备节点:
./mongo -u root -p root 192.168.0.99:28011/admin
./mongo -u root -p root 192.168.0.99:28012/admin