You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Maria-Nefeli 2d17716529 Update 'README.md' 3 years ago
files Upload files to 'files' 3 years ago
fluentd Upload files to 'fluentd' 3 years ago
README.md Update 'README.md' 3 years ago

README.md

Data Collector Service

Η εργασία υλοποιήθηκε στα πλαίσια του εργαστηρίου «Υπολογιστική Νέφους & Υπηρεσίες» από τους φοιτητές:
Ιωάννη Κωνσταντινίδη (161076) & Μαρία-Νεφέλη Μαρκοπουλιώτου (151141)

Στα πλαίσια του project υλοποιήθηκαν οι εξής λειτουργίες:

  • Δημιουργία Δικτύου
  • Αυτόματη Εγκατάσταση προγράμματος για τη συλλογή δεδομένων
  • onEvent – local/προσωρινή αποθήκευση δεδομένων
  • Δημιουργία ΒΔ (Database Replication)
  • onEvent αποθήκευση δεδομένων στη βάση αυτή

1. Δημιουργία Δικτύου

Για τις ανάγκες του project χρησιμοποιήσαμε το εργαστηριακό hybrid-linux του Swarmlab-Hybrid. Αρχικά, δημιουργήθηκε ένα σμήνος (swarm) μέσω της εφαρμογής. Το κάθε σμήνος (Ν nodes) αποτελείται από ένα master και Ν-1 workers. Εφόσον συνδεθούμε στον master, μπορούμε να ελέγξουμε και το υπόλοιπο σμήνος.

Σημείωση1: Μπορούμε να δούμε το σμήνος, αλλά και τα περιεχόμενα όσων δικτύων χρησιμοποιούμε στο πεδίο Instances > Containers

Σημείωση2: Στην περίπτωση που έχουμε δημιουργήσει ήδη κάποιο σμήνος, μπορούμε να το χρησιμοποιήσουμε. Εάν θελήσουμε να φτιάξουμε νέο, θα διαγραφεί το παλιό και ύστερα θα δημιουργηθούν τα νέα Instances.

Για να συνδεθούμε στον master, αλλά και στους workers, θα χρησιμοποιήσουμε την εφαρμογή. Πατώντας Action στην εκάστοτε μηχανή εμφανίζεται μεταξύ άλλων η επιλογή connect. Εφόσον πατηθεί, εμφανίζεται ένα pop-up μήνυμα το οποίο περιέχει τις εξής πληροφορίες:

  • Την εντολή που τρέχουμε για να συνδεθούμε στο node
  • Το path στο οποίο αποθηκεύεται το project μας τοπικά
  • Πού αποθηκεύεται η πληροφορία του node στην εφαρμογή

2. Αυτόματη Εγκατάσταση προγράμματος για τη συλλογή δεδομένων

Μέσω του σμήνους μας θα μπορέσουμε να συλλέξουμε δεδομένα από τον φάκελο /log-in και να τα αποθηκεύσουμε είτε προσωρινά στο φάκελο /mylogs, είτε σε μία βάση δεδομένων. Στο terminal στο οποίο έχουμε συνδεθεί στον master, στο path /project/courses/fluentd$ τρέχουμε τις εξής εντολές:

  • ./fluentd.yml.sh (onEvent – local/προσωρινή αποθήκευση δεδομένων)
  • ./fluentd-config-update.yml.sh (onEvent αποθήκευση δεδομένων στη βάση αυτή) Και τα δύο προαναφερθέντα script, αφορούν την αυτοματοποίηση των εντολών που εκτελούμε για να γίνει η συλλογή των δεδομένων και η καταγραφή στα logs.

Σημείωση1: Θα μας ζητηθεί 3 φορές κωδικός για κάθε script. (docker – docker --[ENTER])

Σημείωση2: Εάν εμφανιστεί κάποιο σφάλμα ακολουθούμε τα εξής βήματα – πάντοτε στο path /project/courses/fluentd$

  • Εκτελούμε ps aux για να δούμε τα τρέχοντα processes
  • Δύο εξ’ αυτών θα έχουν path usr/bin/ruby…
  • Εκτελούμε kill -9 PID1 PID2, όπου PID1 και 2 αυτά των προηγούμενων processes
  • Ξανατρέχουμε το script που μας ενδιαφέρει και παρατηρούμε ότι αυτή τη φορά, μπορούμε να δούμε το debug, άρα να βρούμε και το λάθος.

3. Tοπική/προσωρινή αποθήκευση δεδομένων

Σε ένα άλλο terminal, συνδεόμαστε σε worker node της επιλογής μας. Θα δημιουργήσουμε ένα φάκελο μέσα στο path το οποίο θα γίνει συλλογή δεδομένων από το script και θα πραγματοποιήσουμε πολλές αλλαγές, προκειμένου να παρατηρήσουμε τα logs του worker. Την ίδια ενέργεια θα εκτελέσουμε αργότερα και για το παράδειγμα αποθήκευσης δεδομένων σε βάση.

  • mkdir var/log-in/yourDIR
  • echo "abc">> /var/log-in/yourDIR/yourFILE

Εφόσον έχει εκτελεστεί το script, έχει δημιουργηθεί ο φάκελος /tmp/mylog/ ο οποίος περιέχει και το log του worker. Περιμένουμε λίγα δευτερόλεπτα καθώς η συλλογή δεδομένων εκτελείται ανα κύκλους και ύστερα εκτελούμε ls -al /tmp/mylog/ . Το αρχείο log που έχει δημιουργηθεί περιέχει τις αλλαγές που έχουν γίνει στο φάκελοπου δημιουργήσαμε.


4. Δημιουργία Βάσης Δεδομένων (Database Replication)

Στο σημείο αυτό, επιστρέφουμε στην εφαρμογή στο πεδίο Storage και εκτελούμε την εντολή προκειμένου να δημιουργηθεί το δίκτυο storage-mongo-replica.

Στη συνέχεια είναι απαραίτητο να συνδέσουμε το σμήνος μας με το δίκτυο στο οποίο υπάρχει η mongoDB. Επιστρέφουμε στους Containers και σε κάθε node του σμήνους εκτελούμε τα βήματα:

Actions > Network > Επιλέγουμε το δίκτυο storage-mongo-replica > Update

Έτσι συνδέουμε τα δύο δίκτυα που υπάρχουν στην εφαρμογή μας, διαφορετικά η replica της mongo (είτε ήταν mongo1, mongo2, mongo3) δε θα μπορούσε να αναγνωρίσει τις αλλαγές που θα πραγματοποιούνταν στο σμήνος. Στη συνέχεια, επιλέγουμε μία από τις mongo replicas και συνδεόμαστε σε αυτή, σε νέο terminal, όπως και στους nodes. Για να συνδεθούμε στη βάση που χρειαζόμαστε εκτελούμε τα ακόλουθα:

Πληκτρολογούμε mongo > [ENTER] > πληκτρολογούμε use app_swarmlab

Τρέχουμε db.auth(‘app_swarmlab’,’app_swarmlab’) και προχωράμε μόνο αν λάβουμε 1.


5. Αποθήκευση δεδομένων σε βάση

Εφόσον το ./fluentd-config-update.yml.sh έχει τρέξει ορθά στο terminal του master, μπορούμε σε έναν οποιοδήποτε worker να εκτελέσουμε την ίδια διαδικασία δημιουργίας φακέλου και αρχείων και ύστερα να παρατηρήσουμε τις αλλαγές στο terminal της βάσης εκτελώντας db.logs.find({})


6. Πηγές

An Intro to Cloud computing | swarmlab/hybrid-linux | Docker Compose Implementation | Fluend | RED HAT Ansible | Mongo DB