MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

उच्च उपलब्धता के लिए MongoDB के लिए Percona सर्वर कैसे परिनियोजित करें

जब आप अपने उत्पादन परिवेश में महत्वपूर्ण सेवाएं चलाते हैं तो उच्च उपलब्धता आवश्यक है। इसे डेटाबेस टियर सहित विफलताओं के सभी एकल बिंदुओं को समाप्त करके प्राप्त किया जा सकता है। तो आप हमारे आश्चर्य की कल्पना कर सकते हैं जब भी हम कई वेब सर्वर/एप्लिकेशन के साथ सेटअप में टकराते हैं जो सभी एक ही डेटाबेस इंस्टेंस को मारते हैं।

MongoDB में उच्च उपलब्धता सेवा प्रतिकृति के माध्यम से प्राप्त की जा सकती है। प्रतिकृति सेट शब्द एक सेटअप का वर्णन करता है जहां कई MongoDB प्रक्रियाएं एक ही डेटा को चलाती हैं और बनाए रखती हैं। इस ब्लॉग में, हम चर्चा करेंगे कि उच्च उपलब्धता प्राप्त करने के लिए मोंगोडीबी के लिए पेरकोना सर्वर को कैसे तैनात किया जाए।

MongoDB के लिए परिनियोजन Percona सर्वर

हमें उच्च उपलब्धता के लिए कम से कम 3 नोड्स की आवश्यकता है, एक प्रतिकृति सेट में 1 प्राथमिक नोड और 2 माध्यमिक नोड शामिल होंगे। आप 2 नोड्स, 1 प्राइमरी और 1 सेकेंडरी का उपयोग कर सकते हैं, लेकिन आपको अभी भी तीसरे नोड के रूप में एक आर्बिटर की आवश्यकता है। एक मध्यस्थ एक MongoDB नोड है जो डेटा को कॉपी और संग्रहीत नहीं करता है, लेकिन विफलता होने पर नए प्राथमिक की चुनाव प्रक्रिया में शामिल होता है।

इस उदाहरण में, हम ऑपरेटिंग सिस्टम के रूप में CentOS Linux 7.3 के साथ 3 वर्चुअल वातावरण चला रहे हैं और स्थापना के लिए MongoDB संस्करण 4.2 के लिए Percona सर्वर का उपयोग करेंगे। IP पता नीचे दिया गया है:

  • mongo-node8:10.10.10.17
  • मोंगो-नोड9:10.10.10.18
  • mongo-node10:10.10.10.19

इससे पहले कि हम संस्थापन में कूदें, कृपया सुनिश्चित करें कि सभी नोड पहले से ही प्रत्येक नोड पर /etc/hosts फ़ाइल में कॉन्फ़िगर किए गए हैं।

[[email protected] ~]# cat /etc/hosts

127.0.0.1 mongo-node9 mongo-node9

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.10.10.17 mongo-node8

10.10.10.18 mongo-node9

10.10.10.19 mongo-node10

फिर, हमें प्रत्येक नोड पर पेरकोना रिपोजिटरी को कॉन्फ़िगर करने की आवश्यकता है। उसके बाद, जैसा कि नीचे दिखाया गया है, psmdb42 के लिए रिपोजिटरी सक्षम करें:

[[email protected] ~]# percona-release setup psmdb42

* Disabling all Percona Repositories

* Enabling the Percona Server for MongoDB 4.2 repository

* Enabling the Percona Tools repository

<*> All done!

और फिर MongoDB पैकेज के लिए Percona सर्वर इंस्टाल करना जारी रखें:

[[email protected] ~]# yum install percona-server-mongodb*

Loaded plugins: fastestmirror

Loading mirror speeds from cached hostfile

 * base: centos.mirror.angkasa.id

 * extras: centos.mirror.angkasa.id

 * updates: centos.mirror.angkasa.id

Resolving Dependencies

--> Running transaction check

---> Package percona-server-mongodb.x86_64 0:4.2.9-10.el7 will be installed

--> Processing Dependency: cyrus-sasl-gssapi for package: percona-server-mongodb-4.2.9-10.el7.x86_64

--> Processing Dependency: numactl for package: percona-server-mongodb-4.2.9-10.el7.x86_64

---> Package percona-server-mongodb-debuginfo.x86_64 0:4.2.9-10.el7 will be installed

---> Package percona-server-mongodb-mongos.x86_64 0:4.2.9-10.el7 will be installed

--> Processing Dependency: libcrypto.so.10(OPENSSL_1.0.2)(64bit) for package: percona-server-mongodb-mongos-4.2.9-10.el7.x86_64

---> Package percona-server-mongodb-server.x86_64 0:4.2.9-10.el7 will be installed

---> Package percona-server-mongodb-shell.x86_64 0:4.2.9-10.el7 will be installed

---> Package percona-server-mongodb-tools.x86_64 0:4.2.9-10.el7 will be installed

--> Running transaction check

---> Package cyrus-sasl-gssapi.x86_64 0:2.1.26-23.el7 will be installed

--> Processing Dependency: cyrus-sasl-lib(x86-64) = 2.1.26-23.el7 for package: cyrus-sasl-gssapi-2.1.26-23.el7.x86_64

---> Package numactl.x86_64 0:2.0.12-5.el7 will be installed

---> Package openssl-libs.x86_64 1:1.0.1e-60.el7_3.1 will be updated

--> Processing Dependency: openssl-libs(x86-64) = 1:1.0.1e-60.el7_3.1 for package: 1:openssl-1.0.1e-60.el7_3.1.x86_64

---> Package openssl-libs.x86_64 1:1.0.2k-19.el7 will be an update

--> Running transaction check

---> Package cyrus-sasl-lib.x86_64 0:2.1.26-20.el7_2 will be updated

---> Package cyrus-sasl-lib.x86_64 0:2.1.26-23.el7 will be an update

---> Package openssl.x86_64 1:1.0.1e-60.el7_3.1 will be updated

---> Package openssl.x86_64 1:1.0.2k-19.el7 will be an update

--> Finished Dependency Resolution



Dependencies Resolved



================================================================

 Package                      Arch   Version         Repository

                                                           Size

================================================================

Installing:

 percona-server-mongodb       x86_64 4.2.9-10.el7    psmdb-42-release-x86_64

                                                          4.9 k

 percona-server-mongodb-debuginfo

                              x86_64 4.2.9-10.el7    psmdb-42-release-x86_64

                                                          885 M

 percona-server-mongodb-mongos

                              x86_64 4.2.9-10.el7    psmdb-42-release-x86_64

                                                           10 M

 percona-server-mongodb-server

                              x86_64 4.2.9-10.el7    psmdb-42-release-x86_64

                                                           22 M

 percona-server-mongodb-shell x86_64 4.2.9-10.el7    psmdb-42-release-x86_64

                                                           12 M

 percona-server-mongodb-tools x86_64 4.2.9-10.el7    psmdb-42-release-x86_64

                                                           30 M

Installing for dependencies:

 cyrus-sasl-gssapi            x86_64 2.1.26-23.el7   base  41 k

 numactl                      x86_64 2.0.12-5.el7    base  66 k

Updating for dependencies:

 cyrus-sasl-lib               x86_64 2.1.26-23.el7   base 155 k

 openssl                      x86_64 1:1.0.2k-19.el7 base 493 k

 openssl-libs                 x86_64 1:1.0.2k-19.el7 base 1.2 M



Transaction Summary

================================================================

Install  6 Packages (+2 Dependent packages)

Upgrade             ( 3 Dependent packages)



Total download size: 960 M

Is this ok [y/d/N]:

. . . .

Installed:

  percona-server-mongodb.x86_64 0:4.2.9-10.el7

  percona-server-mongodb-debuginfo.x86_64 0:4.2.9-10.el7

  percona-server-mongodb-mongos.x86_64 0:4.2.9-10.el7

  percona-server-mongodb-server.x86_64 0:4.2.9-10.el7

  percona-server-mongodb-shell.x86_64 0:4.2.9-10.el7

  percona-server-mongodb-tools.x86_64 0:4.2.9-10.el7



Dependency Installed:

  cyrus-sasl-gssapi.x86_64 0:2.1.26-23.el7

  numactl.x86_64 0:2.0.12-5.el7



Dependency Updated:

  cyrus-sasl-lib.x86_64 0:2.1.26-23.el7

  openssl.x86_64 1:1.0.2k-19.el7

  openssl-libs.x86_64 1:1.0.2k-19.el7

अन्य नोड्स पर इंस्टॉलेशन को दोहराएं। स्थापना पूर्ण होने के बाद, कृपया /etc/mongod.conf पर स्थानीयहोस्ट आईपी पते से बाइंडआईपी कॉन्फ़िगरेशन को सभी निजी आईपी पते में बदलें जैसा कि नीचे दिखाया गया है:

# network interfaces

net:

  port: 27017

  bindIp: 0.0.0.0

आप सुरक्षा कारणों से बाइंडआईपी पैरामीटर पर आईपी पते को प्रतिबंधित भी कर सकते हैं, बस एक विभाजक के रूप में अर्धविराम के साथ आईपी पता जोड़ें।

सुनिश्चित करें कि हम नीचे दिए गए उदाहरण के अनुसार तीन नोड्स के बीच MongoDB इंस्टेंस से जुड़ सकते हैं:

[[email protected] ~]# mongo --host 10.10.10.19 --port 27017

Percona Server for MongoDB shell version v4.2.9-10

connecting to: mongodb://10.10.10.19:27017/?compressors=disabled&gssapiServiceName=mongodb

Implicit session: session { "id" : UUID("99afee8f-a194-4d0a-963a-6dfdc17f5bee") }

Percona Server for MongoDB server version: v4.2.9-10

Server has startup warnings:

2020-10-30T04:38:46.244+0000 I  CONTROL  [initandlisten]

2020-10-30T04:38:46.244+0000 I  CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.

2020-10-30T04:38:46.244+0000 I  CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.

2020-10-30T04:38:46.244+0000 I  CONTROL  [initandlisten] **          You can use percona-server-mongodb-enable-auth.sh to fix it.

2020-10-30T04:38:46.244+0000 I  CONTROL  [initandlisten]

 अगला चरण MongoDB में रेप्लिकासेट को कॉन्फ़िगर करना है। हमें /etc/mongod.conf फ़ाइल को संपादित करने और प्रतिकृति अनुभाग को असम्बद्ध करने और नीचे दिखाए गए अनुसार पैरामीटर replSetName जोड़ने की आवश्यकता है:

replication:

  replSetName: "my-mongodb-rs"

हम इस स्थापना में प्रतिकृति सेट नाम my-mongodb-rs का उपयोग करते हैं। प्रतिकृति कॉन्फ़िगरेशन जोड़े जाने के बाद, मोंगोडब सेवा को पुनरारंभ करें।

$ service mongod restart

कॉन्फ़िगरेशन को अन्य नोड्स पर दोहराएं।

एक बार हो जाने के बाद, हमें किसी एक नोड में प्रतिकृति को इनिशियलाइज़ करना होगा। mongodb से कनेक्ट करें और rs.initiate() कमांड चलाएँ जैसा कि नीचे दिखाया गया है:

> rs.initiate()

{

"info2" : "no configuration specified. Using a default configuration for the set",

"me" : "mongo-node8:27017",

"ok" : 1,

"$clusterTime" : {

"clusterTime" : Timestamp(1604036305, 1),

"signature" : {

"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),

"keyId" : NumberLong(0)

}

},

"operationTime" : Timestamp(1604036305, 1)

}

my-mongodb-rs:OTHER>

my-mongodb-rs:PRIMARY>

जैसा कि हम नोड्स में देख सकते हैं, पहला नोड जहां हम प्रतिकृति शुरू करते हैं वह प्राथमिक नोड बन जाएगा। प्रतिकृति में शामिल होने के लिए हमें बाकी नोड्स को जोड़ने की जरूरत है।

प्राथमिक नोड्स पर rs.add() कमांड का उपयोग करके अन्य नोड्स को नीचे के रूप में जोड़ें:

my-mongodb-rs:PRIMARY> rs.add("mongo-node9:27017");

{

"ok" : 1,

"$clusterTime" : {

"clusterTime" : Timestamp(1604037158, 1),

"signature" : {

"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),

"keyId" : NumberLong(0)

}

},

"operationTime" : Timestamp(1604037158, 1)

}

my-mongodb-rs:PRIMARY> rs.add("mongo-node10:27017");

{

"ok" : 1,

"$clusterTime" : {

"clusterTime" : Timestamp(1604037170, 1),

"signature" : {

"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),

"keyId" : NumberLong(0)

}

},

"operationTime" : Timestamp(1604037170, 1)

}

आरंभ () कमांड का उपयोग करके प्रतिकृति सेट को आरंभ करने का एक अन्य विकल्प सभी नोड्स के लिए नोड के आईपी पते की जानकारी को पास करना है जैसा कि नीचे दिखाया गया है:

rs.initiate( {

       _id: "my-mongodb-rs",

       members: [

       { _id: 0, host: "mongo-node8:27017" },

       { _id: 1, host: "mongo-node9:27017" },

       { _id: 2, host: "mongo-node10:27017" }

       ] })

हम किसी भी क्लस्टर नोड पर rs.status() कमांड का उपयोग करके वर्तमान प्रतिकृति सेट क्लस्टर की जांच कर सकते हैं:

my-mongodb-rs:PRIMARY> rs.status()

{

"set" : "my-mongodb-rs",

"date" : ISODate("2020-10-30T06:27:41.693Z"),

"myState" : 1,

"term" : NumberLong(1),

"syncingTo" : "",

"syncSourceHost" : "",

"syncSourceId" : -1,

"heartbeatIntervalMillis" : NumberLong(2000),

"majorityVoteCount" : 2,

"writeMajorityCount" : 2,

"optimes" : {

"lastCommittedOpTime" : {

"ts" : Timestamp(1604039248, 1),

"t" : NumberLong(1)

},

"lastCommittedWallTime" : ISODate("2020-10-30T06:27:28.305Z"),

"readConcernMajorityOpTime" : {

"ts" : Timestamp(1604039248, 1),

"t" : NumberLong(1)

},

"readConcernMajorityWallTime" : ISODate("2020-10-30T06:27:28.305Z"),

"appliedOpTime" : {

"ts" : Timestamp(1604039248, 1),

"t" : NumberLong(1)

},

"durableOpTime" : {

"ts" : Timestamp(1604039248, 1),

"t" : NumberLong(1)

},

"lastAppliedWallTime" : ISODate("2020-10-30T06:27:28.305Z"),

"lastDurableWallTime" : ISODate("2020-10-30T06:27:28.305Z")

},

"lastStableRecoveryTimestamp" : Timestamp(1604039245, 1),

"lastStableCheckpointTimestamp" : Timestamp(1604039245, 1),

"electionCandidateMetrics" : {

"lastElectionReason" : "electionTimeout",

"lastElectionDate" : ISODate("2020-10-30T05:38:25.155Z"),

"electionTerm" : NumberLong(1),

"lastCommittedOpTimeAtElection" : {

"ts" : Timestamp(0, 0),

"t" : NumberLong(-1)

},

"lastSeenOpTimeAtElection" : {

"ts" : Timestamp(1604036305, 1),

"t" : NumberLong(-1)

},

"numVotesNeeded" : 1,

"priorityAtElection" : 1,

"electionTimeoutMillis" : NumberLong(10000),

"newTermStartDate" : ISODate("2020-10-30T05:38:25.171Z"),

"wMajorityWriteAvailabilityDate" : ISODate("2020-10-30T05:38:25.180Z")

},

"members" : [

{

"_id" : 0,

"name" : "mongo-node8:27017",

"health" : 1,

"state" : 1,

"stateStr" : "PRIMARY",

"uptime" : 3014,

"optime" : {

"ts" : Timestamp(1604039248, 1),

"t" : NumberLong(1)

},

"optimeDate" : ISODate("2020-10-30T06:27:28Z"),

"syncingTo" : "",

"syncSourceHost" : "",

"syncSourceId" : -1,

"infoMessage" : "",

"electionTime" : Timestamp(1604036305, 2),

"electionDate" : ISODate("2020-10-30T05:38:25Z"),

"configVersion" : 7,

"self" : true,

"lastHeartbeatMessage" : ""

},

{

"_id" : 1,

"name" : "mongo-node9:27017",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY",

"uptime" : 226,

"optime" : {

"ts" : Timestamp(1604039248, 1),

"t" : NumberLong(1)

},

"optimeDurable" : {

"ts" : Timestamp(1604039248, 1),

"t" : NumberLong(1)

},

"optimeDate" : ISODate("2020-10-30T06:27:28Z"),

"optimeDurableDate" : ISODate("2020-10-30T06:27:28Z"),

"lastHeartbeat" : ISODate("2020-10-30T06:27:40.520Z"),

"lastHeartbeatRecv" : ISODate("2020-10-30T06:27:40.519Z"),

"pingMs" : NumberLong(0),

"lastHeartbeatMessage" : "",

"syncingTo" : "mongo-node8:27017",

"syncSourceHost" : "mongo-node8:27017",

"syncSourceId" : 0,

"infoMessage" : "",

"configVersion" : 7

},

{

"_id" : 2,

"name" : "mongo-node10:27017",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY",

"uptime" : 201,

"optime" : {

"ts" : Timestamp(1604039248, 1),

"t" : NumberLong(1)

},

"optimeDurable" : {

"ts" : Timestamp(1604039248, 1),

"t" : NumberLong(1)

},

"optimeDate" : ISODate("2020-10-30T06:27:28Z"),

"optimeDurableDate" : ISODate("2020-10-30T06:27:28Z"),

"lastHeartbeat" : ISODate("2020-10-30T06:27:40.520Z"),

"lastHeartbeatRecv" : ISODate("2020-10-30T06:27:40.688Z"),

"pingMs" : NumberLong(0),

"lastHeartbeatMessage" : "",

"syncingTo" : "mongo-node8:27017",

"syncSourceHost" : "mongo-node8:27017",

"syncSourceId" : 0,

"infoMessage" : "",

"configVersion" : 7

}

],

"ok" : 1,

"$clusterTime" : {

"clusterTime" : Timestamp(1604039248, 1),

"signature" : {

"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),

"keyId" : NumberLong(0)

}

},

"operationTime" : Timestamp(1604039248, 1)

}

ClusterControl का उपयोग करके MongoDB के लिए Percona सर्वर परिनियोजित करें

ClusterControl MongoDB के लिए Percona सर्वर के लिए परिनियोजन का समर्थन करता है। समर्थित संस्करणों में 3.4, 3.6, 4.0 और 4.2 शामिल हैं। परिनियोजन सीधा है, आपको बस परिनियोजन पर जाने की आवश्यकता है, और नीचे दिखाए गए अनुसार MongoDB प्रतिकृति टैब चुनें:

SSH यूजर, पासवर्ड, पोर्ट और क्लस्टर नाम भरें। ClusterControl के लिए आवश्यक है कि आप स्थापना से पहले नियंत्रक नोड और लक्ष्य डेटाबेस नोड के बीच पासवर्ड रहित SSH सेट करें। सभी जानकारी भरने के बाद जारी रखें पर क्लिक करें। एक और पेज होगा जैसा कि नीचे दिखाया गया है:

एक विक्रेता के रूप में Percona चुनें, वह संस्करण चुनें जिसे आप इंस्टॉल करना चाहते हैं। यदि आपके पास एक कस्टम MongoDB डेटा निर्देशिका है, तो आपको इसे निर्दिष्ट करने की आवश्यकता है। अपने MongoDB के लिए व्यवस्थापक उपयोगकर्ता और पासवर्ड सेट करें। यदि आप डिफ़ॉल्ट (पुनः 27017) का उपयोग करने के बजाय किसी अन्य पोर्ट का उपयोग करना चाहते हैं, तो आप इसे किसी अन्य पोर्ट नंबर में बदल सकते हैं। अंतिम चरण ऐड नोड कॉम्बो बॉक्स में अपने लक्षित डेटाबेस नोड का आईपी पता भरना है।

सब समाप्त होने के बाद, बस परिनियोजित करें बटन पर क्लिक करें। यह एक मोंगोडीबी क्लस्टर को तैनात करने के लिए नौकरी को ट्रिगर करेगा जैसा कि नीचे दिखाया गया है:

परिनियोजन हो जाने के बाद, आप वह अवलोकन पृष्ठ देख सकते हैं जो आपके पास पहले से है MongoDB के लिए Percona सर्वर के 3 उदाहरण जो चल रहे हैं और चल रहे हैं।

नीचे दिए गए टोपोलॉजी व्यू से पता चलता है कि आपके पास 1 प्राथमिक और 2 माध्यमिक नोड हैं:


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मैं MongoDB का उपयोग करके Heroku पर अपना स्वयं का पार्स सर्वर कैसे होस्ट कर सकता हूं?

  2. पेजिनेशन के लिए MongoDB एकत्रीकरण का उपयोग कैसे करें?

  3. नोडज-देशी-मोंगोडब के लिए रनकमांड समकक्ष

  4. MongoDB में मित्र संबंध संग्रहीत करना?

  5. फ़ील्ड नाम में डॉट का उपयोग कैसे करें?