= Εργασία Εξαμήνου 
Καραμιχάλης Κωνσταντίνος , Κυριακάκος Παναγιώτης, Ιωαννίδου Βασιλική
:nofooter:
:toc: right
:toc-title: Πίνακας περιεχομένων
:toclevels: 4
:sectnums:
:data-uri:
:icons: font
:ext-relative: .adoc

{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.bmp[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]
Τέλος θα θέλαμε να συμπληρώσουμε ότι λόγο της πίεσης που δημιουργήθηκε απο τις τελευταίες εξελίξεις ως προς την έκβαση αυτού του εξαμήνου δεν ήταν δυνάτο 
να γίνει μία ποιο δομημένη και εμπεριστατωμένη ανάτπυξη της εργάσιας πάρα το μεγάλο ενδιαφέρον που μας προξένησε.
Θα γίνει προσπάθεια συνέχισης του αλλά και ολοκλήρωσης του ανεξάρτητα του μαθήματος, αλλά και ανεξάρτητα απο το εάν
 θα συνέχιστει η παροχή των υπολογιστικών πόρων απο τον Ωκεανό.



