1. Σκοπός εργασίας
Η εργασία που επιλέχθηκε να πργματοποιηθεί στα πλαίσια του εργαστήρίου του μαθήματος Υ.Ν.Υ, ήταν η δημιουργία και η ανάπτυξη μία βάσης δεδομένων τύπου NoSQL, και συγκεκριμένα η MongoDB με χρήση των εργαλέιων της πλατφόρμας Docker.
1.1. Αρχικοί στόχοι
Στο ξεκίνημα της ανάλυσης και ανάπτυξης της εργασίας μας θέσαμε αρχικούς στόχους :
-
Σχετική εκμάθηση λειτουργίας της MongoDB.
-
Δημιουργία Repica set.
-
Δημιουργία και ανάπτυξη εφαρμογής Minio.
-
Σύνδεση των παραπάνω ώς μία εικονικά ενιαία εφαρμογή για τον τελικό χρήστη.
2. Δημιουργία του Docker-compose.yaml
2.1. Δημιουργία Δικτύων
Ξεκινήσαμε με την δημιουργία κατάλληλων δικτυώσεων.
-
Ένα δίκτυο για κάθε replica set (1 primary 2 secondary).
-
Ένα δίκτυο που θα βρίσκονται όλα τα primary μαζί.
2.2. Δημιουργία Container
Δημιουργήθηκαν 12 container και ποιο συγκεκριμένα 4 Replica Set των 3 container έκαστος.
Για κάθε μέλος του Replica Set δόθηκαν οι κατάλλήλες ρυθμίσεις για την προετοιμασία ένταξης του στην ομάδα του.
Το επιθυμητό αποτέλεσμα ήταν να δημιουργηθεί μιά δυναμική εφαρμογή κατα την οποία ο διαχειριστής απλά θα επιλέγει τον αριθμό των replica set και όχι το στατικό αποτέλεσμα που καταλήξαμε. |
2.2.1. Ονοματοδοσία
Σε κάθε container δόθηκε ένα μοναδικό όνομα κατάλληλο για την δική μας διευκόλυνση και ευκολία.
-
Primary1
-
secondary1_1
-
secondary1_2
-
Primary2
-
κοκ.
2.2.2. Image
Ως docker image του κάθε container επιλέχθηκε το official MongoDB image που υπήρχε στο Docker Hub.
mongo:
2.2.3. Ports
Σε κάθε container αντιστοιχήθηκε η port 27017 με μία port του εκάστοτε host που έτρεχε και για δική μας ευκολία έγινε πάλι ομαδοποίηση ανά replica set.
-
Primary1 = 10001
-
secondary1_1 = 10002
-
secondary1_2 = 10003
-
Primary2 = 20001
-
κοκ.
2.2.4. Volumes
Δημιουργήθηκε σε όλο το σμήνος που είχαμε ένας φάκελος με τα απαράιτητα αρχεία και έγινε mount σε κάθε container
./sys_files:/sys_files
2.2.5. Networks
Δόθηκαν οι κατάλληλες ρυθμίσεις για την ένταξη του στο ανάλογο δίκτυο. Έτσι το κάθε primary που γίνεται deploy ανήκει σε 2 δίκτυα ( το δίκτυο των Primary και το δίκτυο του Replica set) ενώ τα secondary μόνο στο δίκτυο της Replica που ακήκουν.
primary_network: replica_setΧ_network:
2.2.6. Παράμετροι Deploy
Στις παραμέτρους του Deploy χρησιμοποιήσαμε την πολιτική Restart με καθυστέρηση 10 δευτερολέπτων, μέγιστο αριθμό επαναλήψεων 10 και με κενό μεταξύ τους 60 δευτερόλεπτα.
restart_policy: delay: 10s max_attempts: 10 window: 60s
2.2.7. Εντολή έναρξης
Για εντολή έναρξης της βάσης δοκιμάστην διάφορες επιλογές όπως command, Entrypoint, αλλά ενώ κάποιες επιλογές εξυπηρετούσαν τον σκοπό τους ταυτόχρονα δημιουργούσαν πρόβλημα σε κάποιες άλλες. Έτσι καταλληξαμε στην χρήση την εντολής command με χρήση ορισμάτων μόνος ως προς την ονοματοδοδία και την ενεργοποίησει του Replica Set
command: ["mongod", "--replSet", "rep-setX"]
3. Σύνδεση και ενεργοποίηση Replica Set
Για την σύνδεση και την ενεργοποίηση των replica set δημιουργήθηκε ένα script το οποίο ελέγχει ένα προς ένα όλα τα container είναι ενεργοποιημένα, στην συνέχεια αφού ολοκληρώσει τον πρώτο έλεγχο συνεχίζει ελέγχοντας εάν ήταν επιτυχές το ανέβασμα της διεργασίας Mongod σε κάθε container και τέλος εάν δεν συναντήσει κάποιο πρόβλημα στα παραπάνω προχωράει στην σύνδεση των κατάλληλων container για την δημιουργία των Replica set.
Τα ονόματα των μελών του swarm και οι διευθύνσεις IP που έχουν, τα ονόματα των container, καθώς και μία οπτική αναπαράσταση των δικτύων μπορεί να βρεθεί στον παρακάτω συνδεσμο: |
4. Μελλοντικοί στόχοι
Τέλος θα θέλαμε να συμπληρώσουμε ότι λόγο της πίεσης που δημιουργήθηκε απο τις τελευταίες εξελίξεις ως προς την έκβαση αυτού του εξαμήνου δεν ήταν δυνάτο να γίνει μία ποιο δομημένη και εμπεριστατωμένη ανάτπυξη της εργάσιας πάρα το μεγάλο ενδιαφέρον που μας προξένησε. Θα γίνει προσπάθεια συνέχισης του αλλά και ολοκλήρωσης του ανεξάρτητα του μαθήματος, αλλά και ανεξάρτητα απο το εάν θα συνέχιστει η παροχή των υπολογιστικών πόρων απο τον Ωκεανό.