MongoDB复制集――如何将单节点转换成复制集(一)

2014-11-24 11:41:15 · 作者: · 浏览: 0
MongoDB复制集——如何将单节点转换成复制集
具体步骤如下:
1. 停止单节点的mongod
我们可以从mongo shell里运行db.shutdownServer()命令来停止mongod
[java script] 
> use admin;  
switched to db admin  
> db.shutdownServer()  

2. 使用--replSet的选项加上新的复制集的名字来重新启动这个mongod
[java script] 
bash-3.2$ mongod --dbpath /data/db --logpath /data/mongod.log --logappend --fork --port 30000 --replSet rs0  
about to fork child process, waiting until server is ready for connections.  
forked process: 3092  
all output going to: /data/mongod.log  
child process started successfully, parent exiting  

3. 连接刚才启动的 数据库
[java script] 
bash-3.2$ mongo --port 30000  
MongoDB shell version: 2.4.5  
connecting to: 127.0.0.1:30000/test  
Server has startup warnings:   
Mon Jul 29 11:28:02.291 [initandlisten]   
Mon Jul 29 11:28:02.291 [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000  

4. 在mongo shell里创建一个包含复制集配置信息的对象
[java script] 
rsconf = {  
           _id: "rs0",  
           members: [  
                      {  
                       _id: 0,  
                       host: "localhost:30000"  
                      }  
                    ]  
         }  

5. 用rs.initiate()来初始化复制集
[java script] 
> rs.initiate( rsconf )  
{  
    "info" : "Config now saved locally.  Should come online in about a minute.",  
    "ok" : 1  
}  

6. 初始化完毕后,我们可以用rs.conf()来查看复制集的配置
[java script] 
> rs.conf()  
{  
    "_id" : "rs0",  
    "version" : 1,  
    "members" : [  
        {  
            "_id" : 0,  
            "host" : "localhost:30000"  
        }  
    ]  
}  

7. 我们还可以用rs.status()来查看复制集的运行状态
[java script] 
rs0:PRIMARY> rs.status()  
{  
    "set" : "rs0",  
    "date" : ISODate("2013-07-29T02:15:07Z"),  
    "myState" : 1,  
    "members" : [  
        {  
            "_id" : 0,  
            "name" : "localhost:30000",  
            "health" : 1,  
            "state" : 1,  
            "stateStr" : "PRIMARY",  
            "uptime" : 2185,  
            "optime" : Timestamp(1375062044, 1),  
            "optimeDate" : ISODate("2013-07-29T01:40:44Z"),  
            "self" : true  
        }  
    ],  
    "ok" : 1  
}  

8. 启动一个新的mongod服务
[java script] 
bash-3.2$ mkdir -p /data/db2  
bash-3.2$ mongod --dbpath /data/db2 --logpath /data/db2/mongod.log --logappend --fork --port 30001 --replSet rs0  
about to fork child process, waiting until server is ready for connections.  
forked process: 3118  
all output going to: /data/db2/mongod.log  
child process started successfully, parent exiting  

9. 将新的mongod添加到复制集里
[java script] 
rs0:PRIMARY> rs.add("localhost:30001")  
{ "ok" : 1 }  

10. 再启动一个新的mongod服务来作为仲裁节点
[java script] 
bash-3.2$ mkdir -p /data/arb  
bash-3.2$ mongod --dbpath /data/arb --logpath /data/arb/mongod.log --logappend --fork --port 30002 --replSet rs0  
about to fork child process, waiting until server is ready for connections.  
forked process: 3124  
all output going to: /data/arb/mongod.log  
child process started successfully, parent exiting 
11. 将新启动的mongod服务作为仲裁节点添加到复制集中
[java script] 
rs0:PRIMARY> rs.addArb("localhost:30002")  
{ "ok" : 1 }  

12. 查看复制集的状态
[java script] 
rs0:PRIMARY> rs.status()  
{  
    "set" : "rs0",  
    "date" : ISODate("2013-07-29T02:18:20Z"),  
    "myState" : 1,  
    "members" : [  
        {  
            "_id" : 0,  
            "name" : "localhost:30000",  
            "health" : 1,  
            "state" : 1,  
            "stateStr" : "PRIMARY",  
            "uptime" : 2378,  
            "optime" : Timestamp(1375064276, 1),  
            "optimeDate" : ISODate("2013-07-29T02:17:56Z"),  
            "self" : true  
        },  
        {  
            "_id" : 1,  
            "name" : "localhost:30001",  
            "health" : 1,  
            "state" : 2,  
            "stateStr" : "SECONDARY",  
            "uptime" : 34,  
            "opti