Sticky Session With Docker Swarm (CE) στο Debian 9

Εισαγωγή

Το Docker Swarm μετατρέπει τους μεμονωμένους διακομιστές σας σε ένα σύμπλεγμα υπολογιστών. διευκολύνοντας την κλιμάκωση, την υψηλή διαθεσιμότητα και την εξισορρόπηση φορτίου. Το πρόγραμμα εξισορρόπησης φορτίου Swarm εφαρμόζει μια στρατηγική εξισορρόπησης φορτίου κυκλικής ροής και αυτό μπορεί να παρεμποδίσει τη σωστή λειτουργία εφαρμογών με κατάσταση κατάστασης (παλαιού τύπου) που απαιτούν κάποια μορφή σταθερών περιόδων σύνδεσης για να επιτρέψουν μια ρύθμιση υψηλής διαθεσιμότητας με πολλαπλές παρουσίες. Το Docker Enterprise Edition υποστηρίζει τη σταθερή συνεδρία Layer-7, αλλά σε αυτόν τον οδηγό θα επικεντρωθούμε στη δωρεάν (CE) έκδοση του Docker. Για την υλοποίηση σταθερών συνεδριών θα χρησιμοποιήσουμε το Traefik.

Προαπαιτούμενα

  • Τουλάχιστον δύο πρόσφατα αναπτυγμένες και ενημερωμένες περιπτώσεις Debian 9 στο ίδιο υποδίκτυο με ενεργοποιημένη την ιδιωτική δικτύωση
  • Το Docker CE είναι εγκατεστημένο σε αυτές τις περιπτώσεις
  • Τα στιγμιότυπα πρέπει να αποτελούν μέρος του ίδιου Swarm και να μπορούν να επικοινωνούν μεταξύ τους μέσω του ιδιωτικού δικτύου
  • Προηγούμενη γνώση Docker και Docker Swarm
  • Ένας χρήστης μη root με sudoδικαιώματα (προαιρετικό, αλλά συνιστάται ανεπιφύλακτα να μην χρησιμοποιήσετε τον χρήστη root)

Σε αυτό το σεμινάριο θα χρησιμοποιήσουμε δύο περιπτώσεις Vultr με ιδιωτικές διευθύνσεις IP 192.168.0.100και 192.168.0.101. Και οι δύο είναι κόμβοι διαχειριστή του Docker Swarm (που δεν είναι ιδανικός για παραγωγή αλλά αρκετός για αυτό το σεμινάριο).

Ποιός είμαι

Αυτό το σεμινάριο χρησιμοποιεί την jwilder/whoamiεικόνα docker ως εφαρμογή επίδειξης. Αυτό το απλό κοντέινερ θα ανταποκρίνεται σε μια κλήση REST με το όνομα του κοντέινερ που αποκρίνεται, καθιστώντας πολύ εύκολο τον έλεγχο εάν οι σταθερές συνεδρίες λειτουργούν. Αυτή η εικόνα προφανώς χρησιμοποιείται μόνο για σκοπούς επίδειξης και πρέπει να αντικατασταθεί από την εικόνα της δικής σας εφαρμογής.

Η υπηρεσία Whoami έχει ρυθμιστεί ως εξής:

sudo docker network create whoaminet -d overlay
sudo docker service create --name whoami-service --mode global --network whoaminet --publish "80:8000"  jwilder/whoami
sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT

Εάν στη συνέχεια λάβουμε curlτο τελικό σημείο whoami REST στο http://192.168.0.100/, μπορούμε να δούμε την εξισορρόπηση φορτίου κυκλικής ροής του Docker Swarm στην εργασία:

curl http://192.168.0.100
I'm a6a8c9294fc3
curl http://192.168.0.100
I'm ae9d1763b4ad
curl http://192.168.0.100
I'm a6a8c9294fc3
curl http://192.168.0.100
I'm ae9d1763b4ad
curl http://192.168.0.100
I'm a6a8c9294fc3

Δεν ωφελεί να το δοκιμάσετε αυτό με σύγχρονα προγράμματα περιήγησης όπως το Chrome ή το Firefox, επειδή είναι σχεδιασμένα να διατηρούν ζωντανές τις συνδέσεις και το πρόγραμμα εξισορρόπησης φορτίου Docker Swarm θα μεταβαίνει στο άλλο κοντέινερ μόνο σε κάθε νέα σύνδεση. Εάν θέλετε να το δοκιμάσετε με ένα πρόγραμμα περιήγησης, θα πρέπει να περιμένετε τουλάχιστον 30 δευτερόλεπτα για να κλείσει η σύνδεση πριν ανανεώσετε ξανά.

Ρύθμιση του Traefik

Το Traefik υποστηρίζει εγγενώς το Docker Swarm, μπορεί να ανιχνεύει και να καταχωρεί ή να καταργεί την εγγραφή κοντέινερ on-the-fly και επικοινωνεί με την εφαρμογή σας μέσω του εσωτερικού δικτύου επικάλυψης. Η Traefik χρειάζεται κάποιες πληροφορίες σχετικά με την αίτησή σας για να μπορέσει να αρχίσει να χειρίζεται αιτήματα για αυτήν. Αυτές οι πληροφορίες παρέχονται στην Traefik προσθέτοντας ετικέτες στην υπηρεσία Swarm:

sudo docker service update --label-add "traefik.docker.network=whoaminet" --label-add "traefik.port=8000" --label-add "traefik.frontend.rule=PathPrefix:/" --label-add "traefik.backend.loadbalancer.stickiness=true" whoami-service

Η ακόλουθη λίστα περιγράφει τι σημαίνει κάθε ετικέτα:

  • traefik.docker.network : Το δίκτυο επικάλυψης Docker, μέσω του οποίου η Traefik θα επικοινωνεί με την υπηρεσία σας
  • traefik.port : Η θύρα στην οποία ακούει η υπηρεσία σας (αυτή είναι η εσωτερικά εκτεθειμένη θύρα, όχι η δημοσιευμένη θύρα)
  • traefik.frontend.rule: PathPrefix:/ δεσμεύει τη ρίζα περιβάλλοντος " /" σε αυτήν την υπηρεσία
  • traefik.backend.loadbalancer.stickiness : Ενεργοποιεί σταθερές περιόδους λειτουργίας για αυτήν την υπηρεσία

Τώρα που whoami-serviceέχει διαμορφωθεί με τις απαιτούμενες ετικέτες, μπορούμε να προσθέσουμε την υπηρεσία Traefik στο σμήνος:

sudo docker service create --name traefik -p8080:80 -p9090:8080 --mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock --mode=global --constraint 'node.role == manager' --network whoaminet traefik --docker --docker.swarmmode --docker.watch --web --loglevel=DEBUG

Αυτή η εντολή κάνει πολλά πράγματα ταυτόχρονα, όπως φαίνεται στην ακόλουθη λίστα:

  • --name traefik : Το όνομα της νέας μας υπηρεσίας Docker είναι Traefik
  • -p8080:80: Δημοσιεύουμε τη θύρα του Traefik 80σε λιμάνι 8080επειδή η θύρα 80χρησιμοποιείται ήδη από την υπηρεσία Whoami
  • -p9090:8080 : Δημοσιεύουμε τη διεπαφή ιστού της Traefik στη θύρα 9090
  • --mount ... : Τοποθετούμε το Docker Socket στο κοντέινερ έτσι ώστε η Traefik να έχει πρόσβαση στο χρόνο εκτέλεσης Docker του κεντρικού υπολογιστή
  • --global : Θέλουμε κοντέινερ Traefik σε κάθε κόμβο διαχειριστή για λόγους υψηλής διαθεσιμότητας
  • --constraint 'node.role == manager': Θέλουμε το Traefik να εκτελείται μόνο σε κόμβους διαχειριστή επειδή οι κόμβοι εργαζομένων δεν μπορούν να παρέχουν στην Traefik τις πληροφορίες που χρειάζεται. Για παράδειγμα, docker service lsσε έναν κόμβο εργάτη δεν λειτουργεί, οπότε ο Traefik δεν θα μπορούσε καν να ανακαλύψει ποιες υπηρεσίες εκτελούνται
  • --network whoaminet: Συνδέστε το Traefik στο ίδιο δίκτυο με το δικό μας whoami-service, διαφορετικά δεν μπορεί να συνδεθεί σε αυτό. Είπαμε προηγουμένως στην Traefik να συνδεθεί στην υπηρεσία μας μέσω αυτού του δικτύου με την traefik.docker.networkετικέτα
  • traefik : Πείτε στον docker να χρησιμοποιήσει την πιο πρόσφατη εικόνα αποβάθρας Traefik για αυτήν την υπηρεσία
  • --docker --docker.swarmmode --docker.watch --web --loglevel=DEBUG: Τα ορίσματα γραμμής εντολών μεταβιβάστηκαν απευθείας στο Traefik για να του επιτραπεί η εκτέλεση σε λειτουργία σμήνος Docker. DEBUGείναι προαιρετικό εδώ, αλλά ενδιαφέρον κατά τη διάρκεια της εγκατάστασης και για αυτό το σεμινάριο

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

sudo iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT
sudo iptables -I INPUT 1 -p tcp --dport 9090 -j ACCEPT

Πως δουλεύει

Μόλις ξεκινήσει το Traefik, μπορείτε να δείτε στα αρχεία καταγραφής ότι ο Traefik ανακαλύπτει τα δύο whoamiκοντέινερ. Επίσης, εξάγει το όνομα του cookie που θα χρησιμοποιήσει για να χειριστεί τη σταθερή περίοδο λειτουργίας:

time="2018-11-25T13:17:30Z" level=debug msg="Configuration received from provider docker: {\"backends\":{\"backend-whoami-service\":{\"servers\":{\"server-whoami-service-1-a179b2e38a607b1127e5537c2e614b05\":{\"url\":\"http://10.0.0.5:8000\",\"weight\":1},\"server-whoami-service-2-df8a622478a5a709fcb23c50e689b5b6\":{\"url\":\"http://10.0.0.4:8000\",\"weight\":1}},\"loadBalancer\":{\"method\":\"wrr\",\"stickiness\":{}}}},\"frontends\":{\"frontend-PathPrefix-0\":{\"entryPoints\":[\"http\"],\"backend\":\"backend-whoami-service\",\"routes\":{\"route-frontend-PathPrefix-0\":{\"rule\":\"PathPrefix:/\"}},\"passHostHeader\":true,\"priority\":0,\"basicAuth\":null}}}"
time="2018-11-25T13:17:30Z" level=debug msg="Wiring frontend frontend-PathPrefix-0 to entryPoint http"
time="2018-11-25T13:17:30Z" level=debug msg="Creating backend backend-whoami-service"
time="2018-11-25T13:17:30Z" level=debug msg="Adding TLSClientHeaders middleware for frontend frontend-PathPrefix-0"
time="2018-11-25T13:17:30Z" level=debug msg="Creating load-balancer wrr"
time="2018-11-25T13:17:30Z" level=debug msg="Sticky session with cookie _a49bc"
time="2018-11-25T13:17:30Z" level=debug msg="Creating server server-whoami-service-1-a179b2e38a607b1127e5537c2e614b05 at http://10.0.0.5:8000 with weight 1"
time="2018-11-25T13:17:30Z" level=debug msg="Creating server server-whoami-service-2-df8a622478a5a709fcb23c50e689b5b6 at http://10.0.0.4:8000 with weight 1"
time="2018-11-25T13:17:30Z" level=debug msg="Creating route route-frontend-PathPrefix-0 PathPrefix:/"
time="2018-11-25T13:17:30Z" level=info msg="Server configuration reloaded on :80"
time="2018-11-25T13:17:30Z" level=info msg="Server configuration reloaded on :8080"

Αν κουμπώσουμε, http://192.168.0.100:8080μπορούμε να δούμε ότι _a49bcέχει οριστεί ένα νέο cookie, ,:

curl -v http://192.168.0.100:8080
* About to connect() to 192.168.0.100 port 8080 (#0)
*   Trying 192.168.0.100...
* Connected to 192.168.0.100 (192.168.0.100) port 8080 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 192.168.0.100:8080
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Length: 17
< Content-Type: text/plain; charset=utf-8
< Date: Sun, 25 Nov 2018 13:18:40 GMT
< Set-Cookie: _a49bc=http://10.0.0.5:8000; Path=/
<
I'm a6a8c9294fc3
* Connection #0 to host 192.168.0.100 left intact

Εάν, σε επόμενες κλήσεις, στείλουμε αυτό το cookie στην Traefik, θα προωθούμαστε πάντα στο ίδιο κοντέινερ:

curl http://192.168.0.100:8080 --cookie "_a49bc=http://10.0.0.5:8000"
I'm a6a8c9294fc3
curl http://192.168.0.100:8080 --cookie "_a49bc=http://10.0.0.5:8000"
I'm a6a8c9294fc3
curl http://192.168.0.100:8080 --cookie "_a49bc=http://10.0.0.5:8000"
I'm a6a8c9294fc3
curl http://192.168.0.100:8080 --cookie "_a49bc=http://10.0.0.5:8000"
I'm a6a8c9294fc3

Το cookie δεν περιέχει τίποτα άλλο εκτός από την εσωτερική διεύθυνση IP του κοντέινερ στο οποίο θα πρέπει να στείλει η Traefik για να ζητήσει. Εάν αλλάξετε σε τιμή cookie σε http://10.0.0.4:8000, τότε το αίτημα θα προωθηθεί ουσιαστικά στο άλλο κοντέινερ. Εάν το cookie δεν αποσταλεί ποτέ ξανά στην Traefik, τότε η σταθερή περίοδος λειτουργίας δεν θα λειτουργήσει και τα αιτήματα θα εξισορροπηθούν μεταξύ των κοντέινερ της εφαρμογής και των κοντέινερ Traefik.

Αυτό είναι το μόνο που χρειάζεται για να ρυθμίσετε το Layer 7 Sticky Sessions στο Docker CE στο Debian 9.


The Rise of Machines: Real World Applications of AI

The Rise of Machines: Real World Applications of AI

Η Τεχνητή Νοημοσύνη δεν είναι στο μέλλον, είναι εδώ ακριβώς στο παρόν Σε αυτό το blog Διαβάστε πώς οι εφαρμογές Τεχνητής Νοημοσύνης έχουν επηρεάσει διάφορους τομείς.

Επιθέσεις DDOS: Μια σύντομη επισκόπηση

Επιθέσεις DDOS: Μια σύντομη επισκόπηση

Είστε επίσης θύμα των επιθέσεων DDOS και έχετε μπερδευτεί σχετικά με τις μεθόδους πρόληψης; Διαβάστε αυτό το άρθρο για να λύσετε τις απορίες σας.

Έχετε αναρωτηθεί ποτέ πώς κερδίζουν χρήματα οι χάκερ;

Έχετε αναρωτηθεί ποτέ πώς κερδίζουν χρήματα οι χάκερ;

Μπορεί να έχετε ακούσει ότι οι χάκερ κερδίζουν πολλά χρήματα, αλλά έχετε αναρωτηθεί ποτέ πώς κερδίζουν τέτοια χρήματα; ας συζητήσουμε.

Επαναστατικές εφευρέσεις από την Google που θα σας φέρουν εύκολη στη ζωή.

Επαναστατικές εφευρέσεις από την Google που θα σας φέρουν εύκολη στη ζωή.

Θέλετε να δείτε επαναστατικές εφευρέσεις της Google και πώς αυτές οι εφευρέσεις άλλαξαν τη ζωή κάθε ανθρώπου σήμερα; Στη συνέχεια, διαβάστε στο blog για να δείτε τις εφευρέσεις της Google.

Friday Essential: Τι συνέβη με τα αυτοκίνητα που κινούνται με AI;

Friday Essential: Τι συνέβη με τα αυτοκίνητα που κινούνται με AI;

Η ιδέα των αυτοκινούμενων αυτοκινήτων να βγαίνουν στους δρόμους με τη βοήθεια της τεχνητής νοημοσύνης είναι ένα όνειρο που έχουμε εδώ και καιρό. Όμως, παρά τις πολλές υποσχέσεις, δεν φαίνονται πουθενά. Διαβάστε αυτό το blog για να μάθετε περισσότερα…

Τεχνολογική μοναδικότητα: Ένα μακρινό μέλλον του ανθρώπινου πολιτισμού;

Τεχνολογική μοναδικότητα: Ένα μακρινό μέλλον του ανθρώπινου πολιτισμού;

Καθώς η Επιστήμη εξελίσσεται με γρήγορους ρυθμούς, αναλαμβάνοντας πολλές από τις προσπάθειές μας, αυξάνονται και οι κίνδυνοι να υποβάλλουμε τον εαυτό μας σε μια ανεξήγητη Ιδιότητα. Διαβάστε τι σημαίνει η μοναδικότητα για εμάς.

Εξέλιξη της αποθήκευσης δεδομένων – Infographic

Εξέλιξη της αποθήκευσης δεδομένων – Infographic

Οι μέθοδοι αποθήκευσης των δεδομένων εξελίσσονται μπορεί να είναι από τη γέννηση των Δεδομένων. Αυτό το ιστολόγιο καλύπτει την εξέλιξη της αποθήκευσης δεδομένων με βάση ένα infographic.

Λειτουργίες Αρχιτεκτονικών Επιπέδων Αναφοράς Μεγάλων Δεδομένων

Λειτουργίες Αρχιτεκτονικών Επιπέδων Αναφοράς Μεγάλων Δεδομένων

Διαβάστε το ιστολόγιο για να μάθετε διαφορετικά επίπεδα στην Αρχιτεκτονική Μεγάλων Δεδομένων και τις λειτουργίες τους με τον απλούστερο τρόπο.

6 εκπληκτικά οφέλη από την ύπαρξη έξυπνων οικιακών συσκευών στη ζωή μας

6 εκπληκτικά οφέλη από την ύπαρξη έξυπνων οικιακών συσκευών στη ζωή μας

Σε αυτόν τον ψηφιακό κόσμο, οι έξυπνες οικιακές συσκευές έχουν γίνει κρίσιμο μέρος της ζωής. Ακολουθούν μερικά εκπληκτικά οφέλη των έξυπνων οικιακών συσκευών σχετικά με το πώς κάνουν τη ζωή μας να αξίζει και να απλοποιείται.

Η ενημέρωση του συμπληρώματος macOS Catalina 10.15.4 προκαλεί περισσότερα προβλήματα από την επίλυση

Η ενημέρωση του συμπληρώματος macOS Catalina 10.15.4 προκαλεί περισσότερα προβλήματα από την επίλυση

Πρόσφατα, η Apple κυκλοφόρησε το macOS Catalina 10.15.4 μια συμπληρωματική ενημέρωση για την επιδιόρθωση προβλημάτων, αλλά φαίνεται ότι η ενημέρωση προκαλεί περισσότερα προβλήματα που οδηγούν σε bricking των μηχανών mac. Διαβάστε αυτό το άρθρο για να μάθετε περισσότερα