您的位置:首页 > 数据库 > Mongodb

Mongodb副本集(复制集)

2016-04-30 22:20 573 查看
下面搭建的副本集是三个节点,一个主节点,一个副节点,一个选举节点,因为有三个节点,所以我们创建三个data目录,然后创建三个日志目录,还有三个配置文件。

1.创建data目录

[root@redis /]# cd /usr/local/mongodb/
[root@redis mongodb]# mkdir data
[root@redis mongodb]# ls
bin  data  GNU-AGPL-3.0  MPL-2  README  THIRD-PARTY-NOTICES
[root@redis mongodb]# mkdir data/20001 data/20002/ data/20003


2.创建log目录

[root@redis mongodb]# mkdir logs
[root@redis mongodb]# mkdir logs/20001 logs/20002 logs/20003


3.创建三个配置文件

一般我们把启动的配置写成配置文件,这样方便管理

具体三个配置文件内容如下:

[root@redis mongodb]# mkdir conf
[root@redis mongodb]#
在这个目录下创建三个configure文件,

20001.conf

port=20001
bind_ip=192.168.56.44
logpath=/usr/local/mongodb/logs/20001.log
dbpath=/usr/local/mongodb/data/20001/
logappend=true
pidfilepath=/usr/local/mongodb/data/20001/20001.pid
fork=true
oplogSize=1024
replSet=Csong


20002.conf

port=20002
bind_ip=192.168.56.44
logpath=/usr/local/mongodb/logs/20002.log
dbpath=/usr/local/mongodb/data/20002/
logappend=true
pidfilepath=/usr/local/mongodb/data/20002/20002.pid
fork=true
oplogSize=1024
replSet=Csong

20003.conf

port=20003
bind_ip=192.168.56.44
logpath=/usr/local/mongodb/logs/20003.log
dbpath=/usr/local/mongodb/data/20003/
logappend=true
pidfilepath=/usr/local/mongodb/data/20003/20003.pid
fork=true
oplogSize=1024
replSet=Csong


4.开启这三个副本集

20001

[root@redis bin]# ls
bsondump  mongo  mongod  mongodump  mongoexport  mongofiles  mongoimport  mongooplog  mongoperf  mongorestore  mongos  mongostat  mongotop
[root@redis bin]# ./mongod -f /usr/local/mongodb/conf/20001.conf
about to fork child process, waiting until server is ready for connections.
forked process: 1119
child process started successfully, parent exiting
20002

[root@redis bin]# ./mongod -f /usr/local/mongodb/conf/20002.conf
about to fork child process, waiting until server is ready for connections.
forked process: 1143
child process started successfully, parent exiting
[root@redis bin]#


20003

[root@redis bin]# ./mongod -f /usr/local/mongodb/conf/20003.conf
about to fork child process, waiting until server is ready for connections.
forked process: 1166
child process started successfully, parent exiting


5.登入20001节点进行编辑

<pre name="code" class="sql">[root@redis bin]# ./mongo 192.168.56.44:20001/admin
MongoDB shell version: 3.2.4
connecting to: 192.168.56.44:20001/admin
Server has startup warnings:
2016-04-30T13:49:19.127+0800 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2016-04-30T13:49:19.127+0800 I CONTROL  [initandlisten]
> db
admin
> config = { _id:"Csong", members:[ {"_id":0,"host":"192.168.56.44:20001"}, {"_id":1,"host":"192.168.56.44:20002"}, {"_id":2,"host":"192.168.56.44:20003","arbiterOnly":"true"} ] }
{
"_id" : "Csong",
"members" : [
{
"_id" : 0,
"host" : "192.168.56.44:20001"
},
{
"_id" : 1,
"host" : "192.168.56.44:20002"
},
{
"_id" : 2,
"host" : "192.168.56.44:20003",
"arbiterOnly" : true
}
]
}
> rs.initiate(config);
{ "ok" : 1 }
Csong:OTHER> db.users.insert({"username":"Csong"});
WriteResult({ "nInserted" : 1 })




6.从节点验证集合的同步

如果不执行rs.slaveOk()说明从节点的角色是从节点的话,就不会接收到数据。这个时候还能发现提示符变成了secondary,说明是从节点。

[root@redis bin]# ./mongo 192.168.56.44:20002/admin
MongoDB shell version: 3.2.4
connecting to: 192.168.56.44:20002/admin
Server has startup warnings:
2016-04-30T13:52:16.013+0800 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2016-04-30T13:52:16.013+0800 I CONTROL  [initandlisten]
> db.user.find();
Error: error: { "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 }
Csong:SECONDARY> rs.slaveOk();
Csong:SECONDARY> db.users.find();
{ "_id" : ObjectId("57244cc6c528bbeacdf82cee"), "username" : "Csong" }
这个时候登入选举节点是不会发现数据的。

[root@redis bin]# ./mongo 192.168.56.44:20003/admin
MongoDB shell version: 3.2.4
connecting to: 192.168.56.44:20003/admin
Server has startup warnings:
2016-04-30T13:52:38.230+0800 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2016-04-30T13:52:38.230+0800 I CONTROL  [initandlisten]
Csong:ARBITER> db.users.find();
Error: error: { "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 }
Csong:ARBITER> rs.slaveOk();
Csong:ARBITER> db.users.find();
Error: error: { "ok" : 0, "errmsg" : "node is recovering", "code" : 13436 }
Csong:ARBITER>
简单的副本集实验就做完了,具体的参数可以查看文档解释。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: