diff --git a/Mongo_&_docker.adoc b/Mongo_&_docker.adoc new file mode 100644 index 0000000..fe46c42 --- /dev/null +++ b/Mongo_&_docker.adoc @@ -0,0 +1,122 @@ += Εργασία Εξαμήνου +Cse47455, Cse47138, Cse47682 +:nofooter: +:toc: right +:toc-title: Πίνακας περιεχομένων +:toclevels: 4 +:sectnums: +:data-uri: +:icons: font +:ext-relative: .html + +{empty} + + +toc::[] +== Σκοπός εργασίας +[.text-justify] +Η εργασία που επιλέχθηκε να πργματοποιηθεί στα πλαίσια του εργαστήρίου του μαθήματος Υ.Ν.Υ, ήταν η δημιουργία και η ανάπτυξη μία βάσης δεδομένων τύπου NoSQL, και +συγκεκριμένα η MongoDB με χρήση των εργαλέιων της πλατφόρμας link:docker{ext-relative}[Docker]. + +=== Αρχικοί στόχοι +[.text-justify] +Στο ξεκίνημα της ανάλυσης και ανάπτυξης της εργασίας μας θέσαμε αρχικούς στόχους : +[square] +* Σχετική εκμάθηση λειτουργίας της link:mongodb{ext-relative}[MongoDB.] +* Δημιουργία Repica set. +* Δημιουργία και ανάπτυξη εφαρμογής Minio. +* Σύνδεση των παραπάνω ώς μία εικονικά ενιαία εφαρμογή για τον τελικό χρήστη. + +[.text-center] +image::./doc_images/mongo_dbs.jpg[950,950] + +== Δημιουργία του Docker-compose.yaml +=== Δημιουργία Δικτύων +Ξεκινήσαμε με την δημιουργία κατάλληλων δικτυώσεων. +[square] +* Ένα δίκτυο για κάθε replica set (1 primary 2 secondary). +* Ένα δίκτυο που θα βρίσκονται όλα τα primary μαζί. + +=== Δημιουργία Container +[.text-justify] +Δημιουργήθηκαν 12 container και ποιο συγκεκριμένα 4 Replica Set των 3 container έκαστος. + +Για κάθε μέλος του Replica Set δόθηκαν οι κατάλλήλες ρυθμίσεις για την προετοιμασία ένταξης του στην ομάδα του. + + +[NOTE] +[.text-justify] +*_Το επιθυμητό αποτέλεσμα ήταν να δημιουργηθεί μιά δυναμική εφαρμογή κατα την οποία ο διαχειριστής +απλά θα επιλέγει τον αριθμό των replica set και όχι το στατικό αποτέλεσμα που καταλήξαμε._* + +==== Ονοματοδοσία +Σε κάθε container δόθηκε ένα μοναδικό όνομα κατάλληλο για την δική μας διευκόλυνση και ευκολία. + +[square] +* Primary1 +* secondary1_1 +* secondary1_2 +* Primary2 +* κοκ. + +==== Image +Ως docker image του κάθε container επιλέχθηκε το official MongoDB image που υπήρχε στο Docker Hub. + +mongo: + +==== Ports +[.text-justify] +Σε κάθε container αντιστοιχήθηκε η port 27017 με μία port του εκάστοτε host που έτρεχε και για δική μας ευκολία έγινε πάλι ομαδοποίηση ανά replica set. +[square] +* Primary1 = 10001 +* secondary1_1 = 10002 +* secondary1_2 = 10003 +* Primary2 = 20001 +* κοκ. + +==== Volumes +[.text-justify] +Δημιουργήθηκε σε όλο το σμήνος που είχαμε ένας φάκελος με τα απαράιτητα αρχεία και έγινε mount σε κάθε container + +[.text-left] + ./sys_files:/sys_files + +==== Networks +[.text-justify] +Δόθηκαν οι κατάλληλες ρυθμίσεις για την ένταξη του στο ανάλογο δίκτυο. Έτσι το κάθε primary που γίνεται deploy + ανήκει σε 2 δίκτυα ( το δίκτυο των Primary και το δίκτυο του Replica set) ενώ τα secondary μόνο στο δίκτυο της Replica που ακήκουν. + + primary_network: + replica_setΧ_network: + +==== Παράμετροι Deploy +Στις παραμέτρους του Deploy χρησιμοποιήσαμε την πολιτική Restart με καθυστέρηση 10 δευτερολέπτων, μέγιστο αριθμό επαναλήψεων 10 και με κενό μεταξύ τους 60 δευτερόλεπτα. + + + restart_policy: + delay: 10s + max_attempts: 10 + window: 60s + +==== Εντολή έναρξης +[.text-justify] +Για εντολή έναρξης της βάσης δοκιμάστην διάφορες επιλογές όπως command, + Entrypoint, αλλά ενώ κάποιες επιλογές εξυπηρετούσαν τον σκοπό τους ταυτόχρονα δημιουργούσαν πρόβλημα σε κάποιες άλλες. Έτσι καταλληξαμε στην χρήση την εντολής command + με χρήση ορισμάτων μόνος ως προς την ονοματοδοδία και την ενεργοποίησει του Replica Set + + command: ["mongod", "--replSet", "rep-setX"] + +== Σύνδεση και ενεργοποίηση Replica Set +[.text-justify] +Για την σύνδεση και την ενεργοποίηση των replica set δημιουργήθηκε ένα script το οποίο ελέγχει ένα προς ένα όλα τα container είναι ενεργοποιημένα, + στην συνέχεια αφού ολοκληρώσει τον πρώτο έλεγχο συνεχίζει ελέγχοντας εάν ήταν επιτυχές το ανέβασμα της διεργασίας Mongod σε κάθε container και τέλος + εάν δεν συναντήσει κάποιο πρόβλημα στα παραπάνω προχωράει στην σύνδεση των κατάλληλων container για την δημιουργία των Replica set. + +[TIP] +Τα ονόματα των μελών του swarm και οι διευθύνσεις IP που έχουν, τα ονόματα των container, καθώς και μία οπτική αναπαράσταση των δικτύων μπορεί να βρεθεί στον παρακάτω συνδεσμο: + +[.text-center] +http://83.212.77.43:5555/[Project Dashboard] + +== Μελλοντικοί στόχοι +[.text-justify] +Τέλος θα θέλαμε να συμπληρώσουμε ότι λόγο της πίεσης που δημιουργήθηκε απο τις τελευταίες εξελίξεις ως προς την έκβαση αυτού του εξαμήνου δεν ήταν δυνάτο +να γίνει μία ποιο δομημένη και εμπεριστατωμένη ανάτπυξη της εργάσιας πάρα το μεγάλο ενδιαφέρον που μας προξένησε. +Θα γίνει προσπάθεια συνέχισης του αλλά και ολοκλήρωσης του ανεξάρτητα του μαθήματος, αλλά και ανεξάρτητα απο το εάν + θα συνέχιστει η παροχή των υπολογιστικών πόρων απο τον Ωκεανό. + + + diff --git a/Mongo_&_docker.html b/Mongo_&_docker.html new file mode 100644 index 0000000..015438a --- /dev/null +++ b/Mongo_&_docker.html @@ -0,0 +1,708 @@ + + + + + + + + +Εργασία Εξαμήνου + + + + + + +
+
+
+
+


+
+ +
+
+
+

1. Σκοπός εργασίας

+
+
+

Η εργασία που επιλέχθηκε να πργματοποιηθεί στα πλαίσια του εργαστήρίου του μαθήματος Υ.Ν.Υ, ήταν η δημιουργία και η ανάπτυξη μία βάσης δεδομένων τύπου NoSQL, και +συγκεκριμένα η MongoDB με χρήση των εργαλέιων της πλατφόρμας Docker.

+
+
+

1.1. Αρχικοί στόχοι

+
+

Στο ξεκίνημα της ανάλυσης και ανάπτυξης της εργασίας μας θέσαμε αρχικούς στόχους :

+
+
+
    +
  • +

    Σχετική εκμάθηση λειτουργίας της MongoDB.

    +
  • +
  • +

    Δημιουργία Repica set.

    +
  • +
  • +

    Δημιουργία και ανάπτυξη εφαρμογής Minio.

    +
  • +
  • +

    Σύνδεση των παραπάνω ώς μία εικονικά ενιαία εφαρμογή για τον τελικό χρήστη.

    +
  • +
+
+
+
+950 +
+
+
+
+
+
+

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. Μελλοντικοί στόχοι

+
+
+

Τέλος θα θέλαμε να συμπληρώσουμε ότι λόγο της πίεσης που δημιουργήθηκε απο τις τελευταίες εξελίξεις ως προς την έκβαση αυτού του εξαμήνου δεν ήταν δυνάτο +να γίνει μία ποιο δομημένη και εμπεριστατωμένη ανάτπυξη της εργάσιας πάρα το μεγάλο ενδιαφέρον που μας προξένησε. +Θα γίνει προσπάθεια συνέχισης του αλλά και ολοκλήρωσης του ανεξάρτητα του μαθήματος, αλλά και ανεξάρτητα απο το εάν + θα συνέχιστει η παροχή των υπολογιστικών πόρων απο τον Ωκεανό.

+
+
+
+
+ + \ No newline at end of file