MongoDB replSet配置

副本集就是有自動故障恢復功能的主從集羣。主從集羣和副本集最爲明顯的區別就是副本集沒有固定的主節點:整個集羣會選舉出一個主節點,當其不能工做時,則變動到其它節點。副本集總會有一個活躍節點和一個或多個備份節點。
副本集最好的優勢就是全自動化的。
standard:常規節點,存儲一份完整的數據副本,參與選舉投票,可能稱爲活躍節點。
passive:存儲完整的數據副本,參與投票,不能成爲活躍節點。
arbiter:仲裁者只負責投票,不接受複製數據,也不能成爲活躍節點。
用於replica set的參數有兩個:
--replSet <setname>,複製集的名稱。
--oplogSize <MB>,操做日誌的大小,單位爲MB。

一. MongoDB:建立Replica Set
1. 分別啓動兩臺mongodb數據庫
mongod --fork --dbpath /data/node2 --logpath /data/mongodb.log --port 10001 --logappend --replSet myrepl/test03:10002
mongod --fork --dbpath /data/node3 --logpath /data/mongodb.log --port 10002 --logappend --replSet myrepl/test02:10001
2. 初始化副本集
config = {"_id" : "myrepl", 
            "members" : [
            {"_id" : 0, "host" : "test02:10001"},
            {"_id" : 1, "host" : "test03:10002"}
        ]}
rs.initiate(config);
rs.status();
myrepl:SECONDARY> rs.status();
{
        "set" : "myrepl",
        "date" : ISODate("2014-02-25T02:17:39Z"),
        "myState" : 2,
        "syncingTo" : "test03:10002",
        "members" : [
                {
                 "_id" : 0,
                 "name" : "test02:10001",
                 "health" : 1,
                 "state" : 2,
                 "stateStr" : "SECONDARY",
                 "uptime" : 968,
                 "optime" : Timestamp(1393294457, 1),
                 "optimeDate" : ISODate("2014-02-25T02:14:17Z"),
                 "errmsg" : "syncing to: test03:10002",
                 "self" : true
                },
                {
                 "_id" : 1,
                 "name" : "test03:10002",
                 "health" : 1,
                 "state" : 1,
                 "stateStr" : "PRIMARY",
                 "uptime" : 48,
                 "optime" : Timestamp(1393294457, 1),
                 "optimeDate" : ISODate("2014-02-25T02:14:17Z"),
                 "lastHeartbeat" : ISODate("2014-02-25T02:17:38Z"),
                 "lastHeartbeatRecv" : ISODate("2014-02-25T02:17:39Z"),
                 "pingMs" : 1,
                 "syncingTo" : "test02:10001"
                }
        ],
        "ok" : 1
}
3. 增長一個仲裁節點,只負責仲裁,不作數據存儲。
mongod --fork --dbpath /data/node1 --logpath /data/mongodb.log --port 10003 --logappend --replSet myrepl/test02:10001,test03:10002
myrepl:PRIMARY> rs.addArb("test01:10003");
{ "ok" : 1 }

二. MongoDB:Replica Set 增長節點 
1. 現有環境:
myrepl:PRIMARY> rs.conf();
{
        "_id" : "myrepl",
        "version" : 2,
        "members" : [
                {
                        "_id" : 0,
                        "host" : "test02:10001"
                },
                {
                        "_id" : 1,
                        "host" : "test03:10002"
                },
                {
                        "_id" : 2,
                        "host" : "test01:10003",
                        "arbiterOnly" : true
                }
        ]
}
現有三個節點,兩臺standard節點,一臺arbiter節點。
2. 增長節點
2.1 建立數據目錄和日誌文件:
mkdir -p /data/node/
touch /data/mongodb.log
2.2 安裝mongodb:
tar zxf mongodb-linux-x86_64-2.4.9.tgz 
mv mongodb-linux-x86_64-2.4.9 /opt/mongodb
echo "export PATH=$PATH:/opt/mongodb/bin" >>/etc/profile
source /etc/profile
mongod --config ~/.mongodb.conf
2.3 建立新從節點配置文件:
cat >> ~/.mongodb.conf <<EOF
fork = ture
port = 10005
dbpath = /data/node
logpath = /data/mongodb.log
logappend = true
replSet = myrepl
EOF
2.4 更改節點信息
cat /etc/sysconfig/network
cat >> /etc/hosts << EOF 
192.168.27.214    test01  
192.168.27.212    test02 
192.168.27.213    test03
192.168.27.215    test04
192.168.27.216    test05
EOF
2.5 判斷節點是不是主節點
myrepl:PRIMARY> rs.isMaster();
{
        "setName" : "myrepl",
        "ismaster" : true,
        "secondary" : false,
        "hosts" : [
                "test02:10001",
                "test03:10002"
        ],
        "arbiters" : [
                "test01:10003"
        ],
        "primary" : "test02:10001",
        "me" : "test02:10001",
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "localTime" : ISODate("2014-02-25T19:23:22.286Z"),
        "ok" : 1
}
2.6 增長新從節點到replSet
myrepl:PRIMARY> rs.add("192.168.27.215:10004");
# 增長arbiter節點的方法:myrepl:PRIMARY> rs.addArb("test01:10003");
2.7 再次查看Replica Set狀態信息
myrepl:PRIMARY> rs.conf();
{
        "_id" : "myrepl",
        "version" : 3,
        "members" : [
                {
                        "_id" : 0,
                        "host" : "test02:10001"
                },
                {
                        "_id" : 1,
                        "host" : "test03:10002"
                },
                {
                        "_id" : 2,
                        "host" : "test01:10003",
                        "arbiterOnly" : true
                },
                {
                        "_id" : 3,
                        "host" : "192.168.27.215:10004"
                }
        ]
}
3. 測試
3.1 主節點插入數據
myrepl:PRIMARY> db.test.insert({"name" : "xiaohuan", "age" : 30});
3.2 從節點查詢數據
myrepl:SECONDARY> rs.slaveOk();
myrepl:SECONDARY> db.test.find();
{ "_id" : ObjectId("530bfc79eee2c2ce39f9cd95"), "name" : "caoqing" }
{ "_id" : ObjectId("530bfd8f3627cb16c15dcb32"), "name" : "xiaobao" }
{ "_id" : ObjectId("530ceed64770e9f00a279900"), "name" : "xiaohuan", "age" : 30 }

4. 把standard節點變爲passive節點
myrepl:PRIMARY> cfg = rs.conf()
{
        "_id" : "myrepl",
        "version" : 3,
        "members" : [
                {
                        "_id" : 0,
                        "host" : "test02:10001"
                },
                {
                        "_id" : 1,
                        "host" : "test03:10002"
                },
                {
                        "_id" : 2,
                        "host" : "test01:10003",
                        "arbiterOnly" : true
                },
                {
                        "_id" : 3,
                        "host" : "192.168.27.215:10004"
                }
        ]
}
myrepl:PRIMARY> cfg.members[3].priority = 0;
0
myrepl:PRIMARY> rs.reconfig(cfg);
myrepl:PRIMARY> rs.conf();
{
        "_id" : "myrepl",
        "version" : 4,
        "members" : [
                {
                        "_id" : 0,
                        "host" : "test02:10001"
                },
                {
                        "_id" : 1,
                        "host" : "test03:10002"
                },
                {
                        "_id" : 2,
                        "host" : "test01:10003",
                        "arbiterOnly" : true
                },
                {
                        "_id" : 3,
                        "host" : "192.168.27.215:10004",
                        "priority" : 0
                }
        ]
}
相關文章
相關標籤/搜索