Deploy A MongoDB 4.0 Sharded Cluster

來源:互聯網
上載者:User

標籤:router   min   erro   commit   mkdir   admin   type   status   RoCE   

本文基於MongoDB 4.0介紹如何搭建shard叢集服務,環境如下表所示:

1、建立相關目錄

在三個幾點分別建立以下目錄:

[[email protected] ~]# mkdir -p /data/mongo/{config,router,shard}[[email protected] ~]# mkdir -p /data/mongo/config/{data,logs}[[email protected] ~]# mkdir -p /data/mongo/router/logs[[email protected] ~]# mkdir -p /data/mongo/shard/{data,logs}[[email protected] ~]# mkdir -p /data/mongo/shard/data/{shard1,shard2,shard3}[[email protected] ~]# chown -R mongod:mongod /data
2、配置Configsvr服務2.1 建立設定檔
[[email protected] ~]# vi /data/mongo/config/mongodb.config net:  bindIp: 0.0.0.0  port: 27017processManagement:  fork: "true"replication:  replSetName: configRSsharding:  clusterRole: configsvrstorage:  dbPath: /data/mongo/config/datasystemLog:  destination: file  path: /data/mongo/config/logs/mongodb.log
2.2 同步設定檔
[[email protected] ~]# scp /data/mongo/config/mongodb.config hdp07:/data/mongo/config[[email protected] ~]# scp /data/mongo/config/mongodb.config hdp08:/data/mongo/config
2.3 啟動configsvr服務
[[email protected] ~]# mongod -f /data/mongo/config/mongodb.config [[email protected] ~]# mongod -f /data/mongo/config/mongodb.config [[email protected] ~]# mongod -f /data/mongo/config/mongodb.config 
2.4 初始化叢集

在一個節點上執行叢集初始化操作:

[[email protected] ~]# mongo>rs.initiate(  {    _id: "configRS",    configsvr: true,    members: [      { _id : 0, host : "hdp06.thinkjoy.tt:27017" },      { _id : 1, host : "hdp07.thinkjoy.tt:27017" },      { _id : 2, host : "hdp08.thinkjoy.tt:27017" }    ]  })--輸出結果如下{        "ok" : 1,        "operationTime" : Timestamp(1534816254, 1),        "$gleStats" : {                "lastOpTime" : Timestamp(1534816254, 1),                "electionId" : ObjectId("000000000000000000000000")        },        "lastCommittedOpTime" : Timestamp(0, 0),        "$clusterTime" : {                "clusterTime" : Timestamp(1534816254, 1),                "signature" : {                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),                        "keyId" : NumberLong(0)                }        }}--其他節點驗證[[email protected] ~]# mongo......configRS:SECONDARY> rs.status(){        "set" : "configRS",        "date" : ISODate("2018-08-21T01:52:59.734Z"),        "myState" : 2,        "term" : NumberLong(1),        "syncingTo" : "hdp06.thinkjoy.tt:27017",        "syncSourceHost" : "hdp06.thinkjoy.tt:27017",        "syncSourceId" : 0,        "configsvr" : true,        "heartbeatIntervalMillis" : NumberLong(2000),        "optimes" : {                "lastCommittedOpTime" : {                        "ts" : Timestamp(1534816364, 1),                        "t" : NumberLong(1)                },                "readConcernMajorityOpTime" : {                        "ts" : Timestamp(1534816364, 1),                        "t" : NumberLong(1)                },                "appliedOpTime" : {                        "ts" : Timestamp(1534816364, 1),                        "t" : NumberLong(1)                },                "durableOpTime" : {                        "ts" : Timestamp(1534816364, 1),                        "t" : NumberLong(1)                }        },        "lastStableCheckpointTimestamp" : Timestamp(1534816327, 1),        "members" : [                {                        "_id" : 0,                        "name" : "hdp06.thinkjoy.tt:27017",                        "health" : 1,                        "state" : 1,                        "stateStr" : "PRIMARY",                        "uptime" : 115,                        "optime" : {                                "ts" : Timestamp(1534816364, 1),                                "t" : NumberLong(1)                        },                        "optimeDurable" : {                                "ts" : Timestamp(1534816364, 1),                                "t" : NumberLong(1)                        },                        "optimeDate" : ISODate("2018-08-21T01:52:44Z"),                        "optimeDurableDate" : ISODate("2018-08-21T01:52:44Z"),                        "lastHeartbeat" : ISODate("2018-08-21T01:52:57.945Z"),                        "lastHeartbeatRecv" : ISODate("2018-08-21T01:52:59.093Z"),                        "pingMs" : NumberLong(0),                        "lastHeartbeatMessage" : "",                        "syncingTo" : "",                        "syncSourceHost" : "",                        "syncSourceId" : -1,                        "infoMessage" : "",                        "electionTime" : Timestamp(1534816265, 1),                        "electionDate" : ISODate("2018-08-21T01:51:05Z"),                        "configVersion" : 1                },                {                        "_id" : 1,                        "name" : "hdp07.thinkjoy.tt:27017",                        "health" : 1,                        "state" : 2,                        "stateStr" : "SECONDARY",                        "uptime" : 320,                        "optime" : {                                "ts" : Timestamp(1534816364, 1),                                "t" : NumberLong(1)                        },                        "optimeDate" : ISODate("2018-08-21T01:52:44Z"),                        "syncingTo" : "hdp06.thinkjoy.tt:27017",                        "syncSourceHost" : "hdp06.thinkjoy.tt:27017",                        "syncSourceId" : 0,                        "infoMessage" : "",                        "configVersion" : 1,                        "self" : true,                        "lastHeartbeatMessage" : ""                },                {                        "_id" : 2,                        "name" : "hdp08.thinkjoy.tt:27017",                        "health" : 1,                        "state" : 2,                        "stateStr" : "SECONDARY",                        "uptime" : 115,                        "optime" : {                                "ts" : Timestamp(1534816364, 1),                                "t" : NumberLong(1)                        },                        "optimeDurable" : {                                "ts" : Timestamp(1534816364, 1),                                "t" : NumberLong(1)                        },                        "optimeDate" : ISODate("2018-08-21T01:52:44Z"),                        "optimeDurableDate" : ISODate("2018-08-21T01:52:44Z"),                        "lastHeartbeat" : ISODate("2018-08-21T01:52:57.945Z"),                        "lastHeartbeatRecv" : ISODate("2018-08-21T01:52:57.944Z"),                        "pingMs" : NumberLong(0),                        "lastHeartbeatMessage" : "",                        "syncingTo" : "hdp06.thinkjoy.tt:27017",                        "syncSourceHost" : "hdp06.thinkjoy.tt:27017",                        "syncSourceId" : 0,                        "infoMessage" : "",                        "configVersion" : 1                }        ],        "ok" : 1,        "operationTime" : Timestamp(1534816364, 1),        "$gleStats" : {                "lastOpTime" : Timestamp(0, 0),                "electionId" : ObjectId("000000000000000000000000")        },        "lastCommittedOpTime" : Timestamp(1534816364, 1),        "$clusterTime" : {                "clusterTime" : Timestamp(1534816364, 1),                "signature" : {                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),                        "keyId" : NumberLong(0)                }        }}
3、配置Sharded服務3.1 建立設定檔
[email protected] ~]# vi /data/mongo/shard/data/shard1/mongod.shard1net:  bindIp: 0.0.0.0  port: 27019processManagement:  fork: "true"replication:  replSetName: myShard_1sharding:  clusterRole: shardsvrstorage:  dbPath: /data/mongo/shard/data/shard1systemLog:  destination: file  path: /data/mongo/shard/logs/shard1/mongodbs1.log[[email protected] ~]# vi /data/mongo/shard/data/shard2/mongod.shard2net:  bindIp: 0.0.0.0  port: 27020processManagement:  fork: "true"replication:  replSetName: myShard_2sharding:  clusterRole: shardsvrstorage:  dbPath: /data/mongo/shard/data/shard2systemLog:  destination: file  path: /data/mongo/shard/logs/shard2/mongodbs2.log[[email protected] ~]# vi /data/mongo/shard/data/shard3/mongod.shard3net:  bindIp: 0.0.0.0  port: 27021processManagement:  fork: "true"replication:  replSetName: myShard_3sharding:  clusterRole: shardsvrstorage:  dbPath: /data/mongo/shard/data/shard3systemLog:  destination: file  path: /data/mongo/shard/logs/shard3/mongodbs3.log
3.2 同步設定檔
[[email protected] ~]# scp -r /data/mongo/shard/data/* hdp07:/data/mongo/shard/data/[[email protected] ~]# scp -r /data/mongo/shard/data/* hdp08:/data/mongo/shard/data/
3.3 啟動sharded服務
[[email protected] ~]# mongod -f /data/mongo/shard/data/shard1/mongod.shard1[[email protected] ~]# mongod -f /data/mongo/shard/data/shard2/mongod.shard2[[email protected] ~]# mongod -f /data/mongo/shard/data/shard3/mongod.shard3[[email protected] ~]# mongod -f /data/mongo/shard/data/shard1/mongod.shard1[[email protected] ~]# mongod -f /data/mongo/shard/data/shard2/mongod.shard2[[email protected] ~]# mongod -f /data/mongo/shard/data/shard3/mongod.shard3[[email protected] ~]# mongod -f /data/mongo/shard/data/shard1/mongod.shard1[[email protected] ~]# mongod -f /data/mongo/shard/data/shard2/mongod.shard2[[email protected] ~]# mongod -f /data/mongo/shard/data/shard3/mongod.shard3
3.4 初始化sharded服務

在任意一個節點執行初始化服務。

[[email protected] ~]# mongod --port 27019> rs.initiate({_id:"myShard_1",members:[{_id:1,host:"hdp06.thinkjoy.tt:27019",priority:2},{_id:2,host:"hdp07.thinkjoy.tt:27019"},{_id:3,host:"hdp08.thinkjoy.tt:27019"}]}){        "ok" : 1,        "operationTime" : Timestamp(1534818896, 1),        "$clusterTime" : {                "clusterTime" : Timestamp(1534818896, 1),                "signature" : {                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),                        "keyId" : NumberLong(0)                }        }}[[email protected] ~]# mongod --port 27020> rs.initiate({_id:"myShard_2",members:[{_id:1,host:"hdp06.thinkjoy.tt:27020",priority:2},{_id:2,host:"hdp07.thinkjoy.tt:27020"},{_id:3,host:"hdp08.thinkjoy.tt:27020"}]}){        "operationTime" : Timestamp(1534818908, 2),        "ok" : 0,        "errmsg" : "already initialized",        "code" : 23,        "codeName" : "AlreadyInitialized",        "$clusterTime" : {                "clusterTime" : Timestamp(1534818908, 2),                "signature" : {                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),                        "keyId" : NumberLong(0)                }        }}[[email protected] ~]# mongod --port 27021> rs.initiate({_id:"myShard_3",members:[{_id:1,host:"hdp06.thinkjoy.tt:27021",priority:2},{_id:2,host:"hdp07.thinkjoy.tt:27021"},{_id:3,host:"hdp08.thinkjoy.tt:27021"}]}){        "operationTime" : Timestamp(1534818928, 1),        "ok" : 0,        "errmsg" : "already initialized",        "code" : 23,        "codeName" : "AlreadyInitialized",        "$clusterTime" : {                "clusterTime" : Timestamp(1534818928, 1),                "signature" : {                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),                        "keyId" : NumberLong(0)                }        }}
4、配置Mongos服務
[[email protected] ~]# vi /data/mongo/router/mongod.routernet:  bindIp: 0.0.0.0  port: 27018processManagement:  fork: "true"sharding:  configDB: configRS/hdp06.thinkjoy.tt:27017,hdp07.thinkjoy.tt:27017,hdp08.thinkjoy.tt:27017systemLog:  destination: file  path: /data/mongo/router/logs/mongo_router.log[[email protected] ~]# scp /data/mongo/router/mongod.router hdp07:/data/mongo/router[[email protected] ~]# scp /data/mongo/router/mongod.router hdp08:/data/mongo/router[[email protected] ~]# mongos -f /data/mongo/router/mongod.router[[email protected] ~]# mongos -f /data/mongo/router/mongod.router[[email protected] ~]# mongos -f /data/mongo/router/mongod.router

配置分區,將主片添加至叢集,如下:

[[email protected] ~]# mongo --port 27018mongos> show dbsadmin   0.000GBconfig  0.000GBmongos> use adminswitched to db adminmongos> db.runCommand({"addShard":"myShard_1/hdp06.thinkjoy.tt:27019" ,"maxsize":1024}){        "shardAdded" : "myShard_1",        "ok" : 1,        "operationTime" : Timestamp(1534819816, 6),        "$clusterTime" : {                "clusterTime" : Timestamp(1534819816, 6),                "signature" : {                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),                        "keyId" : NumberLong(0)                }        }}mongos> db.runCommand({"addShard":"myShard_2/hdp06.thinkjoy.tt:27020" ,"maxsize":1024}){        "shardAdded" : "myShard_2",        "ok" : 1,        "operationTime" : Timestamp(1534819823, 5),        "$clusterTime" : {                "clusterTime" : Timestamp(1534819823, 5),                "signature" : {                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),                        "keyId" : NumberLong(0)                }        }}mongos> db.runCommand({"addShard":"myShard_3/hdp06.thinkjoy.tt:27021" ,"maxsize":1024}){        "shardAdded" : "myShard_3",        "ok" : 1,        "operationTime" : Timestamp(1534819830, 5),        "$clusterTime" : {                "clusterTime" : Timestamp(1534819830, 5),                "signature" : {                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),                        "keyId" : NumberLong(0)                }        }

Shard cluster狀態查詢:

mongos> sh.status()--- Sharding Status ---   sharding version: {        "_id" : 1,        "minCompatibleVersion" : 5,        "currentVersion" : 6,        "clusterId" : ObjectId("5b7b700b1cfaf6f26d2d0284")  }  shards:        {  "_id" : "myShard_1",  "host" : "myShard_1/hdp06.thinkjoy.tt:27019,hdp07.thinkjoy.tt:27019,hdp08.thinkjoy.tt:27019",  "state" : 1 }        {  "_id" : "myShard_2",  "host" : "myShard_2/hdp06.thinkjoy.tt:27020,hdp07.thinkjoy.tt:27020,hdp08.thinkjoy.tt:27020",  "state" : 1 }        {  "_id" : "myShard_3",  "host" : "myShard_3/hdp06.thinkjoy.tt:27021,hdp07.thinkjoy.tt:27021,hdp08.thinkjoy.tt:27021",  "state" : 1 }  active mongoses:        "4.0.1" : 3  autosplit:        Currently enabled: yes  balancer:        Currently enabled:  yes        Currently running:  no        Failed balancer rounds in last 5 attempts:  0        Migration Results for the last 24 hours:                 No recent migrations  databases:        {  "_id" : "MyDB",  "primary" : "myShard_2",  "partitioned" : true,  "version" : {  "uuid" : UUID("202a1d72-aa92-403d-a2a6-c7c3aa273323"),  "lastMod" : 1 } }                MyDB.chapter                        shard key: { "id" : 1, "subjectId" : 1 }                        unique: false                        balancing: true                        chunks:                                myShard_2     1                        { "id" : { "$minKey" : 1 }, "subjectId" : { "$minKey" : 1 } } -->> { "id" : { "$maxKey" : 1 }, "subjectId" : { "$maxKey" : 1 } } on : myShard_2 Timestamp(1, 0)                 MyDB.question_knowledge_basic_id                        shard key: { "knowledge_basic_id" : 1, "question_id" : 1 }                        unique: false                        balancing: true                        chunks:                                myShard_2     1                        {                                "knowledge_basic_id" : { "$minKey" : 1 },                                "question_id" : { "$minKey" : 1 }                        } -->> {                                "knowledge_basic_id" : { "$maxKey" : 1 },                                "question_id" : { "$maxKey" : 1 }                        } on : myShard_2 Timestamp(1, 0)         {  "_id" : "config",  "primary" : "config",  "partitioned" : true }                config.system.sessions                        shard key: { "_id" : 1 }                        unique: false                        balancing: true                        chunks:                                myShard_1     1                        { "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : myShard_1 Timestamp(1, 0) 
5、對庫啟用分區

這裡建立了一個mydb庫,使用以下命令對其啟用分區功能。

mongos>sh.enableSharding("MyDB"){        "ok" : 1,        "operationTime" : Timestamp(1534837173, 2214),        "$clusterTime" : {                "clusterTime" : Timestamp(1534837173, 2408),                "signature" : {                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),                        "keyId" : NumberLong(0)                }        }}

下面對mydb的chapter啟用分區技術:

--建立一個索引mongos> use MyDBswitched to db MyDBmongos> db.chapter.createIndex({"id" : 1,"subjectId" : 1},{"name" : "new_idx"})--對錶進行分區mongos> sh.shardCollection(‘MyDB.chapter‘,{id:1,subjectId:1}){        "collectionsharded" : "MyDB.chapter",        "collectionUUID" : UUID("a5f3b95c-ced6-4ae5-82d8-06d36176cbef"),        "ok" : 1,        "operationTime" : Timestamp(1535077873, 13),        "$clusterTime" : {                "clusterTime" : Timestamp(1535077873, 13),                "signature" : {                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),                        "keyId" : NumberLong(0)                }        }}

Deploy A MongoDB 4.0 Sharded Cluster

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.