Replica set简单部署
来源:互联网 发布:地域详细数据 编辑:程序博客网 时间:2024/05/22 03:37
演示部署3个节点的Replica sets,每个节点部署在不同的服务器上。
1.三台服务器IP地址:
ServerA,IP:192.168.2.251
ServerB,IP:192.168.2.252
ServerC,IP:192.168.2.253
2.配置信息
- 数据文件存储路径:/data/data/organization
- 日志文件存储路径:/data/log/organization.log
- replica set key文件:/data/key/organization.key
- 实例监听端口:27017
3.说明:
- ServerA作为Primary,对外提供写和读操作,其复制集mongod实例的优先级(priority)为3。
- ServerB作为Secondary,对外开发读操作,其复制集mongod实例的优先级(priority)为2。
- ServerC作为Secondary,不对外提供任何操作,其复制集mongod实例的优先级(priority)为0。(priority为0说明该mongod实例永远不能成为Priamry)。
4.部署步骤
4.1分别在三个服务器上创建节点所需的存储路径
[root@localhost ~]# mkdir -p /data/data/organization
[root@localhost ~]# mkdir -p /data/log
[root@localhost ~]# mkdir -p /data/key
4.2分别在三个服务器上创建Replica set 所需的key文件(用于标识同一Replica set的私钥)
[root@localhost ~]# echo "this is org replica set super secret key” > /data/key/organization.key
[root@localhost ~]# chmod 600 /data/key/organization.key
4.3分别在三个服务器上启动一个mongod实例
[root@localhost ~]# mongod --replSet org_rs --keyFile /data/key/organization.key --fork --port 27017 --dbpath /data/data/organization --logpath /data/log/organization.log --logappend
各参数说明:
replSet:指明明replica set的名字,本例取值org_rs。
keyFile:指明replica set的key路径,能保证各节点间的连通性。
fork:将命令放在后台运行。
port:指定监听端口。
dbpath:数据文件存储路径。
logpath:系统日志文件存放位置。
logappend:明确指定日志的写入模式是追加的。
4.4在ServerA上配置各节点信息。
[root@localhost data]# mongo --port 27017
MongoDB shell version: 2.4.4
connecting to: 127.0.0.1:27017/test
> config_rs = {_id:'org_rs',members:[{_id:0,host:'192.168.2.251:27017'}]}
{
"_id" : "org_rs",
"members" : [
{
"_id" : 0,
"host" : "192.168.2.251:27017"
}
]
}
> rs.initiate(config_rs);
{
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1
}
添加其他两个节点
org_rs:PRIMARY> rs.add('192.168.2.252:27017');
{ "ok" : 1 }
org_rs:PRIMARY> rs.add('192.168.2.253:27017');
{ "ok" : 1 }
查看replica set的状态
org_rs:PRIMARY> rs.status();
{
"set" : "org_rs",
"date" : ISODate("2013-06-28T15:26:46Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "192.168.2.251:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 1335,
"optime" : {
"t" : 1372433115,
"i" : 1
},
"optimeDate" : ISODate("2013-06-28T15:25:15Z"),
"self" : true
},
{
"_id" : 1,
"name" : "192.168.2.252:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 100,
"optime" : {
"t" : 1372433115,
"i" : 1
},
"optimeDate" : ISODate("2013-06-28T15:25:15Z"),
"lastHeartbeat" : ISODate("2013-06-28T15:26:46Z"),
"lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),
"pingMs" : 0,
"syncingTo" : "192.168.2.251:27017"
},
{
"_id" : 2,
"name" : "192.168.2.253:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 91,
"optime" : {
"t" : 1372433115,
"i" : 1
},
"optimeDate" : ISODate("2013-06-28T15:25:15Z"),
"lastHeartbeat" : ISODate("2013-06-28T15:26:45Z"),
"lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),
"pingMs" : 0,
"syncingTo" : "192.168.2.251:27017"
}
],
"ok" : 1
}
至此各节点配置成功。
4.5在Priamry上设置节点的priority属性。
获取配置信息
org_rs:PRIMARY> cfg = rs.conf();
{
"_id" : "org_rs",
"version" : 3,
"members" : [
{
"_id" : 0,
"host" : "192.168.2.251:27017"
},
{
"_id" : 1,
"host" : "192.168.2.252:27017"
},
{
"_id" : 2,
"host" : "192.168.2.253:27017"
}
]
}
设置0号节点的priority为3
org_rs:PRIMARY> cfg.members[0].priority = 3
3
设置1号节点的priority为
org_rs:PRIMARY> cfg.members[0].priority = 2
2
设置2号节点的priority为0
org_rs:PRIMARY> cfg.members[0].priority = 0
0
更新replica set的配置
org_rs:PRIMARY> rs.reconfig(cfg);
4.6设置各节点的读写操作。
Replica set中只允许Primary拥有写操作,故所有写操作都是在Primary执行的。Primary还拥有读的权限。
Secondary默认是不能进行查询操作的,必须得设置。如在ServerB上执行如下命令
[root@localhost ~]# mongo -port 27017
MongoDB shell version: 2.4.4
connecting to: 127.0.0.1:27017/test
org_rs:SECONDARY> show dbs
admin (empty)
local 2.0771484375GB
test 0.203125GB
org_rs:SECONDARY> show collections
Sat Jun 29 02:35:15.208 JavaScript execution failed: error: { "$err" : "not master and slaveOk=false", "code" : 13435 } at src/mongo/shell/query.js:L128
org_rs:SECONDARY>
show collections 报"not master and slaveOk=false”错误说明这个库暂时不能执行查询操作。
为满足我的配置要求,我需将其设为可查询的,以分担主库的压力,执行如下命令即可
org_rs:SECONDARY> db.getMongo().setSlaveOk()
现在再执行show collections看看。
5.验证一下。
在Primary(ServerA)上插入一条数据。
org_rs:PRIMARY> db.c1.insert({age:30})
org_rs:PRIMARY> db.c1.find()
{ "_id" : ObjectId("51cdbf00a540cd543e5cb316"), "age" : 30 }
在Secondary(ServerB)上进行查询
org_rs:SECONDARY> db.c1.find()
{ "_id" : ObjectId("51cdbf00a540cd543e5cb316"), "age" : 30 }
OK,部署工作已经完成。
另外,可以在Primary执行db.printSlaveReplicationInfo()命令,查看replica set的同步状态。
org_rs:PRIMARY> db.printSlaveReplicationInfo()
source: 192.168.2.252:27017
syncedTo: Sat Jun 29 2013 00:51:12 GMT+0800 (CST)
= 7055 secs ago (1.96hrs)
source: 192.168.2.253:27017
syncedTo: Sat Jun 29 2013 00:51:12 GMT+0800 (CST)
= 7055 secs ago (1.96hrs)
org_rs:PRIMARY>
source是secondary的ip及端口,syncedTo是同步的情况和最后一次的同步时间。
本人是新手,还望各位多多指教。
- Replica set简单部署
- 部署replica set
- MongoDB Replica Set集群部署
- MongoDB-部署之-Replica Set Windows
- Mongodb集群部署---Replica Set+Sharding
- replica set
- 部署MongoDB Replica Set同时给数据库设置用户名密码
- MongoDB+shard+replica set
- mongodb replica set
- MongoDB Replica-set 设置
- Replica Set 副本集
- mongodb sharding replica set
- MongoDB之Replica Set
- MongoDB Replica Set配置
- mongo replica set维护
- MongoDB Replica set + sharding
- mongodb replica set介绍
- mongo 搭建 replica set
- Cocos2d-x 实例源码分析之二 小实例的主框架
- 敏捷软件开发揭秘
- MFC下的FTP VC++
- Linux Epoll编程
- ubuntu修改默认启动级别
- Replica set简单部署
- ORACLE体系结构学习
- Android - AutoCompleteTextView
- Maven利用Archetype自动生成项目目录结构
- 【图论05】并查集 1005 More is better
- java.lang.IllegalArgumentException: Wrong FS ...异常的解决
- Jquery 图片轮播实现原理总结
- 生活、学习纠结
- 国内二手车市场分析