Mongodb副本集(复制集)

来源:互联网 发布:c语言流程图例题 编辑:程序博客网 时间:2024/05/17 22:15

下面搭建的副本集是三个节点,一个主节点,一个副节点,一个选举节点,因为有三个节点,所以我们创建三个data目录,然后创建三个日志目录,还有三个配置文件。

1.创建data目录

[root@redis /]# cd /usr/local/mongodb/[root@redis mongodb]# mkdir data[root@redis mongodb]# lsbin  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=20001bind_ip=192.168.56.44logpath=/usr/local/mongodb/logs/20001.logdbpath=/usr/local/mongodb/data/20001/logappend=truepidfilepath=/usr/local/mongodb/data/20001/20001.pidfork=trueoplogSize=1024replSet=Csong

20002.conf

port=20002bind_ip=192.168.56.44logpath=/usr/local/mongodb/logs/20002.logdbpath=/usr/local/mongodb/data/20002/logappend=truepidfilepath=/usr/local/mongodb/data/20002/20002.pidfork=trueoplogSize=1024replSet=Csong

20003.conf

port=20003bind_ip=192.168.56.44logpath=/usr/local/mongodb/logs/20003.logdbpath=/usr/local/mongodb/data/20003/logappend=truepidfilepath=/usr/local/mongodb/data/20003/20003.pidfork=trueoplogSize=1024replSet=Csong

4.开启这三个副本集

20001

[root@redis bin]# lsbsondump  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: 1119child process started successfully, parent exiting
20002

[root@redis bin]# ./mongod -f /usr/local/mongodb/conf/20002.confabout to fork child process, waiting until server is ready for connections.forked process: 1143child 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: 1166child process started successfully, parent exiting

5.登入20001节点进行编辑

<pre name="code" class="sql">[root@redis bin]# ./mongo 192.168.56.44:20001/adminMongoDB shell version: 3.2.4connecting to: 192.168.56.44:20001/adminServer 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] > dbadmin> 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/adminMongoDB shell version: 3.2.4connecting to: 192.168.56.44:20002/adminServer 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/adminMongoDB shell version: 3.2.4connecting to: 192.168.56.44:20003/adminServer 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> 
简单的副本集实验就做完了,具体的参数可以查看文档解释。


1 0
原创粉丝点击