zoukankan      html  css  js  c++  java
  • [DataBase] MongoDB (8) 副本集

    MongoDB  创建副本集

    MongoDB复制是将数据同步在多个服务器的过程。

    复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。

    复制还允许您从硬件故障和服务中断中恢复数据。

    1. 建立配置文件

    mongodb.conf
    
      1 # Start MongoDB as a daemon on port 5568                                                                                                                   
      2 
      3 port = 5568
      4 fork = true
      5 replSet = test_replica_set
      6 dbpath = /datatest/db
      7 logpath = /datatest/db/test.log
      8 logappend = true
      9 
    
    mongodb2.conf
    
      2 
      3 port = 5569
      4 fork = true
      5 replSet = test_replica_set
      6 dbpath = /datatest/db2
      7 logpath = /datatest/db/test2.log
      8 logappend = true
      9 
    
    mongodb3.conf
    
      2 
      3 port = 5570
      4 fork = true
      5 replSet = test_replica_set
      6 dbpath = /datatest/db3
      7 logpath = /datatest/db/test.log
      8 logappend = true
      9 
    

     2. 启动数据库

    mac-abeen:bin abeen$ sudo ./mongod -f mongodb.conf 
    about to fork child process, waiting until server is ready for connections.
    forked process: 37181
    child process started successfully, parent exiting
    mac-abeen:bin abeen$ sudo ./mongod -f mongodb2.conf 
    about to fork child process, waiting until server is ready for connections.
    forked process: 37185
    child process started successfully, parent exiting
    mac-abeen:bin abeen$ sudo ./mongod -f mongodb3.conf 
    about to fork child process, waiting until server is ready for connections.
    forked process: 37189
    child process started successfully, parent exiting
    

     3. 初始化副本集

    mac-abeen:bin abeen$ ./mongo --nodb
    MongoDB shell version: 3.2.8
    > config = {}
    { }
    > config = {"_id": "test_replica_set", "members": [
    ... {"_id": 0, "host": "localhost:5568"}, {"_id": 1, "host": "localhost:5569"}, {"_id": 2, "host": "localhost:5570"}]}
    {
    	"_id" : "test_replica_set",
    	"members" : [
    		{
    			"_id" : 0,
    			"host" : "localhost:5568"
    		},
    		{
    			"_id" : 1,
    			"host" : "localhost:5569"
    		},
    		{
    			"_id" : 2,
    			"host" : "localhost:5570"
    		}
    	]
    }
    > db = (new Mongo("localhost:5568")).getDB("test")
    test
    > rs.initiate(config)
    { "ok" : 1 }
    test_replica_set:OTHER> 
    
    
    test_replica_set:PRIMARY> rs.config()
    {
    	"_id" : "test_replica_set",
    	"version" : 1,
    	"protocolVersion" : NumberLong(1),
    	"members" : [
    		{
    			"_id" : 0,
    			"host" : "localhost:5568",
    			"arbiterOnly" : false,
    			"buildIndexes" : true,
    			"hidden" : false,
    			"priority" : 1,
    			"tags" : {
    				
    			},
    			"slaveDelay" : NumberLong(0),
    			"votes" : 1
    		},
    		{
    			"_id" : 1,
    			"host" : "localhost:5569",
    			"arbiterOnly" : false,
    			"buildIndexes" : true,
    			"hidden" : false,
    			"priority" : 1,
    			"tags" : {
    				
    			},
    			"slaveDelay" : NumberLong(0),
    			"votes" : 1
    		},
    		{
    			"_id" : 2,
    			"host" : "localhost:5570",
    			"arbiterOnly" : false,
    			"buildIndexes" : true,
    			"hidden" : false,
    			"priority" : 1,
    			"tags" : {
    				
    			},
    			"slaveDelay" : NumberLong(0),
    			"votes" : 1
    		}
    	],
    	"settings" : {
    		"chainingAllowed" : true,
    		"heartbeatIntervalMillis" : 2000,
    		"heartbeatTimeoutSecs" : 10,
    		"electionTimeoutMillis" : 10000,
    		"getLastErrorModes" : {
    			
    		},
    		"getLastErrorDefaults" : {
    			"w" : 1,
    			"wtimeout" : 0
    		},
    		"replicaSetId" : ObjectId("5850f445c8cacd70496883b0")
    	}
    }
    

     4. 写入数据并查看副本集数据

    test_replica_set:PRIMARY> 
    test_replica_set:PRIMARY> for (i=0; i < 100; i++){db.coll.insert({"count": i})}
    WriteResult({ "nInserted" : 1 })
    test_replica_set:PRIMARY> db.coll.count()
    100
    test_replica_set:PRIMARY> db.coll.find().limit(5)
    { "_id" : ObjectId("5850f5f35f1a7d82c0b45b51"), "count" : 0 }
    { "_id" : ObjectId("5850f5f35f1a7d82c0b45b52"), "count" : 1 }
    { "_id" : ObjectId("5850f5f35f1a7d82c0b45b53"), "count" : 2 }
    { "_id" : ObjectId("5850f5f35f1a7d82c0b45b54"), "count" : 3 }
    { "_id" : ObjectId("5850f5f35f1a7d82c0b45b55"), "count" : 4 }
    
    
    查看副本集是否有数据
    mac-abeen:bin abeen$ ./mongo --port 5569 --host localhost
    MongoDB shell version: 3.2.8
    connecting to: localhost:5569/test
    
    test_replica_set:SECONDARY> db.coll.find().limit(5)
    Error: error: { "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 }
    设置连接可读取数据
    test_replica_set:SECONDARY> db.setSlaveOk()
    副本中已有数据 
    test_replica_set:SECONDARY> db.coll.find().limit(5)
    { "_id" : ObjectId("5850f5f35f1a7d82c0b45b53"), "count" : 2 }
    { "_id" : ObjectId("5850f5f35f1a7d82c0b45b55"), "count" : 4 }
    { "_id" : ObjectId("5850f5f35f1a7d82c0b45b52"), "count" : 1 }
    { "_id" : ObjectId("5850f5f35f1a7d82c0b45b54"), "count" : 3 }
    { "_id" : ObjectId("5850f5f35f1a7d82c0b45b51"), "count" : 0 }
    
  • 相关阅读:
    【RobotFramework自动化测试】数据库值验证
    【Python】列表各种操作
    python开发之路之线程、进程、协程
    python开发之路SocketServer
    python开发之路之I/O多路复用
    python开发之路1---多并发Ftp的开发
    python网络编程1
    python面向对象编程(扩展) && python中的反射操作
    python基础5-面向对象编程
    基于python实现的计算器
  • 原文地址:https://www.cnblogs.com/abeen/p/6179705.html
Copyright © 2011-2022 走看看