mongo復(fù)制集+分片實現(xiàn)海量數(shù)據(jù)存儲-創(chuàng)新互聯(lián)

   MongoDB Auto-Sharding 解決了海量存儲和動態(tài)擴容的問題,但離實際生產(chǎn)環(huán)境所需的高可

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),連江企業(yè)網(wǎng)站建設(shè),連江品牌網(wǎng)站建設(shè),網(wǎng)站定制,連江網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,連江網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

靠、高可用還有些距離,所以有了” Replica Sets + Sharding”的解決方案:

     Shard:

     使用 Replica Sets,確保每個數(shù)據(jù)節(jié)點都具有備份、自動容錯轉(zhuǎn)移、自動恢復(fù)能力。

     Config:

     使用3 個配置服務(wù)器,確保元數(shù)據(jù)完整性

     Route:

     使用3 個路由進程,實現(xiàn)負載平衡,提高客戶端接入性能

基本結(jié)構(gòu)如下:

 主機   IP     服務(wù)及端口

ServerA

192.168.10.150

  mongod shard1_1:27017

  mongod shard2_1:27018

  mongod config1:20000

  mongs1:30000

ServerB

192.168.10.151

  mongod shard1_2:27017

  mongod shard2_2:27018

  mongod config2:20000

  mongs2:30000

ServerC

192.168.10.154

  mongod shard1_3:27017

  mongod shard2_3:27018

  mongod config3:20000

  mongs3:30000

創(chuàng)建數(shù)據(jù)目錄

serverA:

mkdir -p /data/shardset/{shard1_1,shard2_1,config}/

serverB:

mkdir -p /data/shardset/{shard1_2,shard2_2,config}/

serverC

mkdir -p /data/shardset/{shard1_3,shard2_3,config}/

配置復(fù)制集

配置shard1所用到的Replica Sets

serverA:

mongod --shardsvr --replSet shard1 --port 27017 --dbpath /data/shardset/shard1_1 --logpath /data/shardset/shard1_1/shard1_1.log --logappend --fork

serverB:

mongod --shardsvr --replSet shard1 --port 27017 --dbpath /data/shardset/shard1_2 --logpath /data/shardset/shard1_2/shard1_2.log --logappend --fork

serverC:

mongod --shardsvr --replSet shard1 --port 27017 --dbpath /data/shardset/shard1_3 --logpath /data/shardset/shard1_3/shard1_3.log --logappend --fork

用mongo 連接其中一臺機器的27017 端口的mongod,初始化Replica Sets“shard1”,執(zhí)行:

[root@template ~]# mongo --port 27017

MongoDB shell version: 2.6.0

connecting to: 127.0.0.1:27017/test

>config = {_id: 'shard1', members: [ {_id: 0, host: '192.168.10.150:27017'},{_id: 1, host: '192.168.10.151:27017'},{_id: 2, host: '192.168.10.154:27017'}]}

{

    "_id" : "shard1",

    "members" : [

        {

            "_id" : 0,

            "host" : "192.168.10.150:27017"

        },

        {

            "_id" : 1,

            "host" : "192.168.10.151:27017"

        },

        {

            "_id" : 2,

            "host" : "192.168.10.154:27017"

        }

    ]

}

> rs.initiate(config)

{

    "info" : "Config now saved locally. Should come online in about a minute.",

    "ok" : 1

}

配置shard2所用到的Replica Sets

ServerA:

mongod --shardsvr --replSet shard2 --port 27018 --dbpath /data/shardset/shard2_1 --logpath /data/shardset/shard2_1/shard2_1.log --logappend --fork

ServerB:

mongod --shardsvr --replSet shard2 --port 27018 --dbpath /data/shardset/shard2_2 --logpath /data/shardset/shard2_2/shard2_2.log --logappend --fork

ServerC:

mongod --shardsvr --replSet shard2 --port 27018 --dbpath /data/shardset/shard2_3 --logpath /data/shardset/shard2_3/shard2_3.log --logappend --fork

用mongo 連接其中一臺機器的27018 端口的mongod,初始化Replica Sets “shard2”,執(zhí)行:

[root@template ~]# mongo --port 27018

MongoDB shell version: 2.6.0

connecting to: 127.0.0.1:27018/test

>config = {_id: 'shard2', members: [ {_id: 0, host: '192.168.10.150:27018'},{_id: 1, host: '192.168.10.151:27018'},{_id: 2, host: '192.168.10.154:27018'}]}

{

    "_id" : "shard2",

    "members" : [

        {

            "_id" : 0,

            "host" : "192.168.10.150:27018"

        },

        {

            "_id" : 1,

            "host" : "192.168.10.151:27018"

        },

        {

            "_id" : 2,

            "host" : "192.168.10.154:27018"

        }

    ]

}

>  rs.initiate(config)

{

    "info" : "Config now saved locally. Should come online in about a minute.",

    "ok" : 1

}

配置3Config Server

Server A、B、C上執(zhí)行:

mongod --configsvr --dbpath /data/shardset/config --port 20000 --logpath/data/shardset/config/config.log --logappend --fork

配置3Route Process

Server A、B、C上執(zhí)行:

mongos --configdb 192.168.10.150:20000,192.168.10.151:20000,192.168.10.154:20000 --port 30000 --chunkSize 1 --logpath /data/shardset/mongos.log --logappend --fork

配置Shard Cluster

連接到其中一臺機器的端口30000 的mongos 進程,并切換到admin 數(shù)據(jù)庫做以下配置:

[root@template ~]# mongo --port 30000

MongoDB shell version: 2.6.0

connecting to: 127.0.0.1:30000/test

Welcome to the MongoDB shell.

For interactive help, type "help".

For more comprehensive documentation, see

    http://docs.mongodb.org/

Questions? Try the support group

    http://groups.google.com/group/mongodb-user

mongos>

mongos> use admin

switched to db admin

mongos> db.runCommand({addshard:"shard1/192.168.10.150:27017,192.168.10.151:27017,192.168.10.154:27017"});

{ "shardAdded" : "shard1", "ok" : 1 }

mongos> db.runCommand({addshard:"shard2/192.168.10.150:27018,192.168.10.151:27018,192.168.10.154:27018"});

{ "shardAdded" : "shard2", "ok" : 1 }

mongos>

激活數(shù)據(jù)庫及集合的分片

mongos> db.runCommand({ enablesharding:"test" })

{ "ok" : 1 }

mongos> db.runCommand({ shardcollection: "test.users", key: { _id:1 }})

{ "collectionsharded" : "test.users", "ok" : 1 }

mongos>

查看配置

mongos> use admin

switched to db admin

mongos> db.runCommand({listshards: 1})

{

    "shards" : [

        {

            "_id" : "shard1",

            "host" : "shard1/192.168.10.150:27017,192.168.10.151:27017,192.168.10.154:27017"

        },

        {

            "_id" : "shard2",

            "host" : "shard2/192.168.10.150:27018,192.168.10.151:27018,192.168.10.154:27018"

        }

    ],

    "ok" : 1

}

驗證Sharding正常工作

mongos> use test

switched to db test

mongos> for(var i=1;i<=200000;i++) db.users.insert({id:i,addr_1:"Beijing",addr_2:"Shanghai"});

WriteResult({ "nInserted" : 1 })

mongos> db.users.stats()

{

    "sharded" : true,

    "systemFlags" : 1,

    "userFlags" : 1,

    "ns" : "test.users",

    "count" : 200000,

    "numExtents" : 13,

    "size" : 22400000,

    "storageSize" : 33689600,

    "totalIndexSize" : 6908720,

    "indexSizes" : {

        "_id_" : 6908720

    },

    "avgObjSize" : 112,

    "nindexes" : 1,

    "nchunks" : 13,

    "shards" : {

        "shard1" : {

            "ns" : "test.users",

            "count" : 147600,

            "size" : 16531200,

            "avgObjSize" : 112,

            "storageSize" : 22507520,

            "numExtents" : 7,

            "nindexes" : 1,

            "lastExtentSize" : 11325440,

            "paddingFactor" : 1,

            "systemFlags" : 1,

            "userFlags" : 1,

            "totalIndexSize" : 4807488,

            "indexSizes" : {

                "_id_" : 4807488

            },

            "ok" : 1

        },

        "shard2" : {

            "ns" : "test.users",

            "count" : 52400,

            "size" : 5868800,

            "avgObjSize" : 112,

            "storageSize" : 11182080,

            "numExtents" : 6,

            "nindexes" : 1,

            "lastExtentSize" : 8388608,

            "paddingFactor" : 1,

            "systemFlags" : 1,

            "userFlags" : 1,

            "totalIndexSize" : 2101232,

            "indexSizes" : {

                "_id_" : 2101232

            },

            "ok" : 1

        }

    },

    "ok" : 1

}

ServerA:

[root@template ~]# mongo --port 27017

MongoDB shell version: 2.6.0

connecting to: 127.0.0.1:27017/test

shard1:PRIMARY> show dbs

admin (empty)

local 4.076GB

test  0.078GB

shard1:PRIMARY>

ServerB:

[root@template ~]# mongo --port 27017

MongoDB shell version: 2.6.0

connecting to: 127.0.0.1:27017/test

shard1:SECONDARY>

shard1:SECONDARY> show dbs

admin (empty)

local 4.076GB

test  0.078GB

shard1:SECONDARY>

默認從庫是不可查詢的,但是執(zhí)行如下語句則可以查詢。

rs.slaveOk();

或者

db.getMongo().setSlaveOk()

做讀寫分離時上述語句必不可少

ServerC:

[root@template ~]# mongo --port 27017

MongoDB shell version: 2.6.0

connecting to: 127.0.0.1:27017/test

shard1:SECONDARY> show dbs

admin (empty)

local 4.076GB

test  0.078GB

shard1:SECONDARY>

如果想在線切換主從庫,需要更改優(yōu)先級:

[root@template ~]# mongo --port 27017

需要在主庫中設(shè)置

conf=rs.conf()

conf.members[0].priority=2

conf.members[1].priority=5

conf.members[2].priority=1

rs.reconfig(conf)

查看節(jié)點

db.status()

或者

db.isMaster()

查看數(shù)據(jù)是否開啟分片

use config

db.databases.find()

增加節(jié)點

db.remove("192.168.10.155:27017")

刪除節(jié)點

db.add("192.168.10.154:27017")

增加仲裁節(jié)點

rs.addArb("192.168.10.155:27017")

rs.isMaster()

"arbiters" : [

        "192.168.10.155:27017"

    ],

創(chuàng)建用戶

use admin
db.createUser(
 {
   user: "adminUserName",
   pwd: "userPassword",
   roles:
   [
     {
       roles: "userAdminAnyDatabase",
       db: "admin"
     }
   ]
 }

)

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

新聞標(biāo)題:mongo復(fù)制集+分片實現(xiàn)海量數(shù)據(jù)存儲-創(chuàng)新互聯(lián)
URL標(biāo)題:http://muchs.cn/article36/dcjgsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、動態(tài)網(wǎng)站用戶體驗、網(wǎng)站導(dǎo)航、網(wǎng)頁設(shè)計公司響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)