Ένα replica set ορίζεται ως ένα database cluster πολλαπλών κόμβων με ρυθμισμένη αναπαραγωγή (replication) και αυτοματοποιημένη παράκαμψη αποτυχίας (failover) μεταξύ τους. Για να διασφαλιστεί ότι η PRIMARY βάση δεδομένων εκλέγεται σωστά, είναι σημαντικό να υπάρχει περιττός αριθμός μελών στο σύνολο (συμπεριλαμβανομένου ή εξαιρουμένου του κόμβου Arbiter node).
Η επιλεγμένη βάση δεδομένων είναι υπεύθυνη για όλες τις κύριες εργασίες. Επεξεργάζεται τις εισερχόμενες λειτουργίες εγγραφής και αποθηκεύει τις πληροφορίες τους στο oplog. Αυτές οι πληροφορίες μπορούν να προσπελαστούν και να αναπαραχθούν από τα SECONDARY μέλη του replica για να εφαρμοστούν στα δικά τους σύνολα δεδομένων. Ως αποτέλεσμα, όλοι οι διακομιστές στο σύνολο θα αντιπροσωπεύουν το ίδιο περιεχόμενο και θα διασφαλίζουν τη διαθεσιμότητά του:

Τώρα σκεφτείτε μια κατάσταση όπου ένα απροσδόκητο πρόβλημα (όπως αστοχία υλικού ή σύνδεσης) προκαλεί διακοπή λειτουργίας στην κύρια βάση δεδομένων. Σε μια τέτοια περίπτωση, το σύστημα θα ξεκινήσει αυτόματα μια νέα διαδικασία εκλογής για να αποκαταστήσει την κανονική λειτουργία χωρίς να απαιτείται χειροκίνητη παρέμβαση. Το όφελος ενός τέτοιου συστήματος είναι ότι απολαμβάνετε τα καλύτερα στοιχεία της replication, όπως αυξημένη διαθεσιμότητα, πλεονασμός παράκαμψης αποτυχίας (failover redundancy) και αποκατάσταση από καταστροφή (disaster recovery), χωρίς να χρειάζεται να ανησυχείτε για τη διαχείριση πολλαπλών βάσεων δεδομένων ξεχωριστά.
Αν θέλετε να χρησιμοποιήσετε ένα παρόμοιο σύστημα, αυτός ο οδηγός θα σας δείξει πώς να ρυθμίσετε ένα MongoDB replica set με το CloudSigma PaaS. Όπως θα δείτε σε αυτόν τον οδηγό, θα χρησιμοποιήσουμε τρία μέλη, κάτι που συνήθως επαρκεί για να παρέχει ένα καλό περιθώριο ασφάλειας πληροφοριών και απόδοσης για το χειρισμό λειτουργιών I/O για τις περισσότερες κοινές εφαρμογές. Μαζί με την πραγματική ρύθμιση της αναπαραγωγής, θα μάθουμε επίσης πώς να προετοιμάσουμε το περιβάλλον, να ρυθμίσουμε τον έλεγχο ταυτότητας (authentication) μεταξύ των κόμβων της βάσης δεδομένων και πώς να διασφαλίσουμε ότι η εργασία σας ήταν επιτυχής.
Βήμα 1: Δημιουργήστε ένα νέο περιβάλλον
Για να ξεκινήσετε, θα χρειαστείτε τουλάχιστον 3 κόμβους MongoDB για να αρχίσετε να ρυθμίζετε ένα replica set. Προχωρήστε λοιπόν και δημιουργήστε ένα νέο περιβάλλον ως εξής:

Στο παράδειγμά μας, εκχωρούμε όλα τα στιγμιότυπα MongoDB της έκδοσης 4.0.2 στο ίδιο περιβάλλον. Μπορείτε να αλλάξετε το Environment Name αν χρειάζεται στον παρεχόμενο χώρο και να συνεχίσετε με τη διαδικασία εγκατάστασης.
Το επόμενο βήμα στη διαδικασία θα είναι η ενασχόληση με την ασφάλεια της επικοινωνίας μεταξύ αυτών των κόμβων χρησιμοποιώντας το αρχείο κλειδιού ελέγχου ταυτότητας (authentication key file).
Βήμα 2: Προσθέστε ένα αρχείο κλειδιού ελέγχου ταυτότητας
Ο έλεγχος ταυτότητας (Authentication) είναι ένα κρίσιμο συστατικό κάθε αναπαραγωγής. Είναι μια διαδικασία διασφάλισης ασφάλειας που δίνει πρόσβαση σε ένα μέλος του replica set μόνο αφού ταυτοποιηθεί σωστά με ένα μοναδικό αρχείο κλειδιού ελέγχου ταυτότητας. Αυτό διατηρεί τα δεδομένα σας ασφαλή από ανεπιθύμητους θεατές και τρίτους. Δείτε πώς μπορείτε να δημιουργήσετε το δικό σας αρχείο κλειδιού ελέγχου ταυτότητας:
- Κάντε κλικ στην επιλογή Web SSH για έναν από τους κόμβους της βάσης δεδομένων και συνδεθείτε:

2. Στη συνέχεια, μπορείτε να εισαγάγετε το δικό σας αρχείο κλειδιού ή να δημιουργήσετε ένα νέο με το openssl χρησιμοποιώντας την ακόλουθη εντολή:
|
1 |
openssl rand -base64 741 > my.key |
Σε αυτήν την εντολή, το 741 αντιπροσωπεύει το μέγεθος του κλειδιού σε bytes και το my.key είναι το όνομα του κλειδιού.
3. Ώρα να διανείμετε το νέο αρχείο κλειδιού σε όλα τα στιγμιότυπα MongoDB. Δείτε πώς να το κάνετε αυτό:
- Ανοίξτε τη File Manager κάνοντας κλικ στο κουμπί Config δίπλα σε οποιονδήποτε από τους κόμβους της βάσης δεδομένων:

- Εντοπίστε το αρχείο my.key στην καρτέλα ρυθμίσεων κάτω από τη διαδρομή: /home/jelastic/my.key. Ανοίξτε το και αντιγράψτε τα περιεχόμενα του αρχείου:

- Κάτω από τη διαδρομή /var/lib/jelastic/keys θα βρείτε τον κατάλογο keys. Δημιουργήστε ένα New File το οποίο θα χρησιμοποιήσουν τα στιγμιότυπα MongoDB για να επαληθεύσουν την ταυτότητα το ένα του άλλου. Στη δική μας περίπτωση, θα δημιουργήσουμε ένα αρχείο με όνομα mongo-set.key:

- Επικολλήστε το περιεχόμενο που αντιγράψατε προηγουμένως σε αυτό το αρχείο και εφαρμόστε τις αλλαγές κάνοντας κλικ στο Save για όλα τα στιγμιότυπα:

Ως αποτέλεσμα αυτής της διαδικασίας, το αρχείο mongo-set.key έχει διανεμηθεί σε όλους τους κόμβους MongoDB.
Βήμα 3: Ρυθμίστε την αναπαραγωγή MongoDB
Τώρα που εξασφαλίσαμε την ασφάλεια των στιγμιοτύπων, μπορούμε να προχωρήσουμε στην πραγματική ρύθμιση του replica set. Ας ξεκινήσουμε:
- Ξεκινήστε πηγαίνοντας στην καρτέλα ρυθμίσεων για τους κόμβους MongoDB και ανοίγοντας το αρχείο mongo.conf στον κατάλογο etc φάκελο. Κυλήστε προς τα κάτω μέχρι να βρείτε την ενότητα replication. Καταργήστε τα σχόλια (uncomment) και προσθέστε την ακόλουθη συμβολοσειρά με ένα μοναδικό όνομα για το replica set σας. Για το παράδειγμά μας, θα το ονομάσουμε db-replication:
|
1 |
replSetName: db-replication |

3. Κάντε κλικ στο κατάλληλο κουμπί για να Save τις αλλαγές για όλα τα instances στο παράθυρο του προγράμματος επεξεργασίας.
4. Τώρα πρέπει να κάνετε Restart σε όλους τους DB nodes για να εφαρμόσετε τις νέες παραμέτρους διαμόρφωσης:

Ένα πράγμα που πρέπει να έχετε κατά νου είναι ότι αφού ολοκληρώσετε τη διαμόρφωση του replica set και κάνετε επανεκκίνηση είτε όλων των κόμβων είτε του PRIMARY κόμβου, η διαδικασία εκλογής της νέας PRIMARY βάσης δεδομένων θα ξεκινήσει κατά την επανεκκίνηση.
5. Επιλέξτε τον διακομιστή MongoDB που θέλετε να χρησιμοποιήσετε ως PRIMARY και αποκτήστε πρόσβαση σε αυτόν χρησιμοποιώντας το πρωτόκολλο SSH:

Θυμηθείτε: μόλις εκλεγεί η PRIMARY βάση δεδομένων, τα άλλα μέλη του replica set δεν θα είναι πλέον προσβάσιμα για απευθείας λειτουργίες εγγραφής. Αυτό σημαίνει ότι όλες οι αλλαγές και οι διαμορφώσεις μπορούν να εκτελεστούν και να εφαρμοστούν μόνο στον τρέχοντα PRIMARY κόμβο. Επομένως, εκτός εάν έχετε ορίσει priorities, θα πρέπει να αλλάξετε τη συμβολοσειρά σύνδεσης (connection string) στην εφαρμογή σας προς τον νέο PRIMARY κόμβο.
6. Στη συνέχεια, αποκτήστε πρόσβαση στην αναπαραγόμενη βάση δεδομένων χρησιμοποιώντας τα αντίστοιχα διαπιστευτήριά σας:
|
1 |
mongo -u {user} -p {password} {DB_name} |

Σε αυτήν την εντολή:
- {user} –αναφέρεται στο όνομα χρήστη διαχειριστή (administrator username) που θα σταλεί στο email σας (συνήθως είναι admin από προεπιλογή).
- {password} –αυτός είναι ο κωδικός πρόσβασης που στάλθηκε στο email σας μαζί με το αντίστοιχο όνομα χρήστη.
- {DB_name}- αντιπροσωπεύει το όνομα της βάσης δεδομένων που θέλετε να αναπαράγετε σε αυτό το replica set (χρησιμοποιούμε το προεπιλεγμένο admin στο παράδειγμά μας).
Σε περίπτωση νέας εκλογής, μπορείτε να χρησιμοποιήσετε τα ίδια διαπιστευτήρια του χρήστη admin για να συνδεθείτε σε μια νέα PRIMARY βάση δεδομένων.
7. Τώρα που η σύνδεση έχει δημιουργηθεί, θα πρέπει να εκτελέσετε τις ακόλουθες γραμμές για να ορίσετε τις παραμέτρους για τον τρέχοντα κόμβο MongoDB και να ξεκινήσετε το replica set:
|
1 2 3 4 5 |
config = {_id : "{replica_set}", members : [{_id : 0, host:"{current_db_ip}:27017"},]} rs.initiate() |
Στις παραπάνω γραμμές, θα αντικαταστήσετε τις τιμές στις αγκύλες με τα δικά σας αντίστοιχα δεδομένα:
- {replica_set} – αυτό είναι το όνομα της ομάδας αναπαραγωγής βάσης δεδομένων που καθορίσατε στην αρχή αυτής της ενότητας. Στην περίπτωσή μας, αυτό ήταν το db-replication.
- {current_db_ip} – υποδεικνύει τη διεύθυνση IP του κοντέινερ της βάσης δεδομένων που έχετε επιλέξει:

Στη δική μας περίπτωση, οι γραμμές που εκτελέστηκαν είναι:
|
1 2 |
config = {_id : "db-replication", members : [{_id : 0, host:"10.100.2.182:27017"},]} |

|
1 |
rs.initiate() |

8. Στη συνέχεια, εκτελέστε την ακόλουθη εντολή για όλες τις υπόλοιπες βάσεις δεδομένων:
|
1 |
rs.add("{db_ip}:27017") |
Εδώ, {db_ip} αναφέρεται στη διεύθυνση IP κάθε βάσης δεδομένων:

9. Μόλις προσθέσετε όλα τα μέλη αναπαραγωγής, θα έχετε ένα πλήρως λειτουργικό replica set. Συνιστούμε να βεβαιωθείτε ότι όλα έχουν διαμορφωθεί σωστά στο τέλος της διαδικασίας. Για να το κάνετε αυτό, εκτελέστε την εντολή: rs.status(). Αυτό θα σας εμφανίσει πλήρεις πληροφορίες σχετικά με το replica set σας, ως εξής:

Βήμα 4: Ρύθμιση του ReplicaSet Arbiter
Συνιστούμε τη χρήση ενός Arbiter κόμβου σε ορισμένες περιπτώσεις. Τι είναι ένας Arbiter κόμβος; Συνήθως, η αναπαραγωγή είναι πιο αξιόπιστη εάν το replica set περιέχει περιττό αριθμό κόμβων. Επομένως, εάν αυτή τη στιγμή έχετε άρτιο αριθμό κόμβων στο σετ σας, μπορείτε να προσθέσετε έναν Arbiter κόμβο για να διατηρήσετε την απαρτία (quorum), καθώς ανταποκρίνεται σε αιτήματα heartbeat και εκλογής από άλλα μέλη του σετ. Ακολουθούν μερικές λεπτομέρειες σχετικά με τους Arbiter κόμβους:
- Ο Arbiter δεν αποθηκεύει δεδομένα· απλώς ψηφίζει στις εκλογές σε περίπτωση που κάποιος άλλος κόμβος έχει αποτύχει.
- Είναι πολύ ελαφρύς και δεν καταναλώνει πολλούς πόρους.
- Αντάλλαξε διαπιστευτήρια χρηστών μεταξύ κρυπτογραφημένων αντιγράφων.
- Για να διατηρήσετε την υψηλότερη διαθεσιμότητα, δοκιμάστε να εκτελέσετε τον Arbiter σε ξεχωριστό κόμβο.
Δείτε πώς μπορείτε να προσθέσετε έναν κόμβο Arbiter στο σύνολο αντιγράφων σας:
- Αρχικά, θα πραγματοποιήσουμε οριζόντια κλιμάκωση και θα προσθέσουμε έναν επιπλέον κόμβο στο cluster:


2. Με τον κόμβο να έχει προστεθεί, χρειαζόμαστε ένα νέο αρχείο κλειδιού. Μεταβείτε στον κατάλογο keys και δημιουργήστε ένα αρχείο κλειδιού mongo-set.key. Αντιγράψτε τα περιεχόμενα του κλειδιού από οποιονδήποτε από τους προηγουμένως ρυθμισμένους κόμβους βάσης δεδομένων και επικολλήστε τα όλα εδώ, όπως κάναμε προηγουμένως.
3. Μεταβείτε στο αρχείο ρυθμίσεων mongod.conf. Αποσχολιάστε την ενότητα replication και προσθέστε το repISetName (είναι db-replication στη δική μας περίπτωση). Επίσης, μεταβείτε στην ενότητα security και προσθέστε την παράμετρο keyFile ( /var/lib/jelastic/keys/mongo-set.key στη δική μας περίπτωση).
4. Τέλος, επανεκκινήστε τον νέο κόμβο για να εφαρμόσετε αυτές τις νέες παραμέτρους ρύθμισης:

Είναι σημαντικό να θυμάστε ότι ΔΕΝ χρειάζεται να επανεκκινήσετε όλους τους κόμβους στο cluster σε αυτό το σημείο. Επανεκκινήστε μόνο τον νεοεισαχθέντα κόμβο Arbiter. Η επανεκκίνηση όλων των κόμβων θα οδηγήσει σε νέα εκλογή PRIMARY (εκτός εάν έχετε καθορίσει προτεραιότητες για την επιλογή ενός συγκεκριμένου κόμβου βάσης δεδομένων ως PRIMARY).
5. Τέλος, ο Arbiter μπορεί να προστεθεί στο σύνολο αντιγράφων. Για να το κάνετε αυτό, εκτελέστε την ακόλουθη εντολή στον κόμβο PRIMARY:
|
1 |
rs.addArb("{db_ip}:27017") |
Εδώ, {db_ip} είναι η διεύθυνση IP του νέου κόμβου:

6. Τώρα, μπορείτε να ελέγξετε για να επιβεβαιώσετε εάν ο νέος κόμβος έχει γίνει ο Arbiter. Μπορείτε να το κάνετε αυτό συνδεόμενοι στον νέο κόμβο μέσω SSH και συνδεόμενοι στο στιγμιότυπο MongoDB με τα διαπιστευτήρια που λάβατε στο email σας κατά τη δημιουργία του κόμβου:

Αυτό δείχνει ότι ο νέος κόμβος που μόλις προσθέσαμε στο cluster λειτουργεί ως ο Arbiter του db-replication. Αυτό εξασφαλίζει απαρτία σε οποιαδήποτε κατάσταση, καθιστώντας το σύνολο αντιγράφων πιο αξιόπιστο.
Βήμα 5: Δοκιμή Διαθεσιμότητας του Database Cluster
Στη συνέχεια, μπορούμε να ρυθμίσουμε το MongoDB cluster μας για να συνδέεται και να εκτελεί λειτουργίες απομακρυσμένα. Στο ακόλουθο παράδειγμα, θα συνδεθούμε και θα εκτελέσουμε μερικές εντολές ελέγχου χρησιμοποιώντας μια απλή μικροεφαρμογή PHP.
Για τον σκοπό αυτό, θα χρειαστείτε έναν διακομιστή εφαρμογών, όπως ο Apache. Μπορείτε να προσθέσετε έναν στο περιβάλλον σας όπως κάναμε εμείς ή να δημιουργήσετε έναν νέο σε ξεχωριστό περιβάλλον.
- Ξεκινήστε κάνοντας κλικ στο Change Environment Topology και προσθέτοντας τον διακομιστή:


2. Ανοίξτε την καρτέλα Configuration Manager για τον διακομιστή Apache κάνοντας κλικ στο κουμπί Config όπως φαίνεται παρακάτω:

3. Εντοπίστε και ανοίξτε το αρχείο index.php στον κατάλογο /var/www/webroot/ROOT και επικολλήστε τον ακόλουθο κώδικα στη θέση του προεπιλεγμένου περιεχομένου:
|
1 |
<!--?php try{ $mongodbConnectionURI= "mongodb://{db_username}:{db_password}@node{NodeID}-{environment_domain}:27017, node{NodeID}-{environment_domain}:27017,node{NodeID}-{environment_domain}:27017,node{NodeID}-{environment_domain}:27017/?replicaSet={replica_set_name}&readPreference=primary"; $manager = new MongoDB\Driver\Manager($mongodbConnectionURI); $command = new MongoDB\Driver\Command(['ping' => 1]); $cursor = $manager->executeCommand('db', $command); $response = $cursor->toArray()[0]; var_dump($response); echo'<br><br>'; var_dump($manager->getServers()); } catch (Exception $e){ echo $e->getMessage(); } ?--> |
Οι ακόλουθες τιμές στον παραπάνω κώδικα πρέπει να αντικατασταθούν με τα αντίστοιχα δεδομένα σας:
- {replica_set_name} – εισαγάγετε το όνομα του replica set σας.
- {db_username} – προσθέστε τον χρήστη διαχειριστή της επιλεγμένης κύριας βάσης δεδομένων (είναι admin από προεπιλογή).
- {db_password} – εισαγάγετε τον κωδικό πρόσβασης του χρήστη διαχειριστή.
- {NodeID} – αναφέρετε τον αναγνωριστικό αριθμό του αντίστοιχου κόμβου. Μπορείτε να τον βρείτε στο CloudSigma PaaS dashboard.
- {environment_domain} – προσθέστε το domain του περιβάλλοντος. Μπορείτε επίσης να το βρείτε στο CloudSigma PaaS dashboard:

Βεβαιωθείτε ότι έχετε καθορίσει τα ID κάθε κόμβου στο replica set σας στο κατάλληλο mongodbConnectionURI τμήμα.
Εισάγοντας τις αντίστοιχες τιμές και εκτελώντας τον κώδικα θα εμφανιστεί ένα σύνολο συμβολοσειρών παρόμοιο με αυτό:

Βεβαιωθείτε ότι θα Save το αρχείο σε αυτό το σημείο!
4. Για να μπορέσει ο Apache να αλληλεπιδράσει με τον διακομιστή MongoDB, απαιτείται ένα ειδικό πρόσθετο. Μπορείτε να προσθέσετε αυτό το πρόσθετο μέσα στο configs. Μεταβείτε στον φάκελο etc και ανοίξτε το php.ini αρχείο. Εντοπίστε την ενότητα [mongodb] . Εδώ, το μόνο που χρειάζεται να κάνετε είναι να αφαιρέσετε το ελληνικό ερωτηματικό πριν από τη γραμμή extension=mongodb.so για να ενεργοποιήσετε αυτήν την επέκταση:

5. Εφαρμόστε τις νέες ρυθμίσεις κάνοντας κλικ στο Save στο παράθυρο του επεξεργαστή. Όπως πάντα, πρέπει να επανεκκινήσουμε τους κόμβους για να εφαρμόσουμε τις αλλαγές. Κάντε κλικ στο κουμπί Restart Nodes δίπλα στο Application Server για να το κάνετε αυτό:

6. Τώρα κάντε κλικ στο κουμπί Open in Browser για να το δοκιμάσετε:

Κάνοντας κλικ σε αυτό το εικονίδιο θα ανοίξει μια νέα καρτέλα προγράμματος περιήγησης που θα εμφανίζει όλες τις πληροφορίες σχετικά με τα μέλη/κόμβους του replica set σας και την προσβασιμότητά τους, όπως αυτό:

Εφόσον χρησιμοποιήσαμε την εντολή ping (γραμμή 6 του index.php ), η πρώτη γραμμή εμφανίζει το αποτέλεσμα του ελέγχου διαθεσιμότητας του replica set:
|
1 |
object(stdClass)#11 (3) { ["ok"]=> float(1) } |
Αυτό σημαίνει ότι το replica set δοκιμάστηκε με επιτυχία.
Το επόμενο μπλοκ στα αποτελέσματα δείχνει λεπτομερείς πληροφορίες σχετικά με τους κεντρικούς υπολογιστές του replica set. Αυτά τα δεδομένα λαμβάνονται χάρη στη getServers συνάρτηση (γραμμή 11 του index.php). Παρομοίως, μπορείτε επίσης να ελέγξετε ορισμένες τιμές που εκχωρήθηκαν κατά τη διαδικασία δημιουργίας αυτού του replica set:
- host – η διεύθυνση IP μιας συγκεκριμένης βάσης δεδομένων.
- port – αυτή είναι η θύρα του τρέχοντος μέλους αναπαραγωγής.
- [“is_primary”] και [“is_secondary”] – παράμετροι που υποδεικνύουν την κατάσταση του διακομιστή. Οι αντίστοιχες τιμές για τον επιλεγμένο κύριο διακομιστή MongoDB είναι true, false και για τους άλλους δύο διακομιστές MongoDB – false, true αντίστοιχα.
Επιπλέον, μπορείτε να ξεκινήσετε και να σταματήσετε τους κόμβους της βάσης δεδομένων ανά πάσα στιγμή για να παρακολουθείτε τις αλλαγές. Μπορείτε επίσης να ανανεώσετε τη σελίδα για να κάνετε το ίδιο. Αυτό σας επιτρέπει να διασφαλίσετε ότι το MongoDB cluster σας είναι πάντα διαθέσιμο, ενεργό και εκτελείται όπως το ρυθμίσατε.
Το CloudSigma PaaS επιτρέπει στους χρήστες του να επωφεληθούν από τη χρήση των replica sets χωρίς να ανησυχούν πολύ για τη ρύθμιση παραμέτρων και το back-end κομμάτι. Αυτός ο οδηγός δείχνει πόσο απλή μπορεί να είναι η δημιουργία του δικού σας MongoDB cluster με λίγα μόνο απλά βήματα. Μπορείτε να μάθετε περισσότερα για το MongoDB, πώς να το εγκαταστήσετε για το Ubuntu ή για δημόσιους διακομιστές cloud, καθώς και ποιες άλλες προηγμένες δυνατότητες έχει να προσφέρει το CloudSigma PaaS. Σας προσκαλούμε επίσης να κάνετε μια δοκιμαστική χρήση του PaaS δωρεάν για να εξοικειωθείτε με το dashboard και το marketplace και όσα προσφέρουν.
Σχόλια
Δεν υπάρχουν σχόλια ακόμα. Γράψτε το πρώτο.