Sticky Session With Docker Swarm (CE) στο Debian 9
Χρησιμοποιώντας ένα διαφορετικό σύστημα; Εισαγωγή Το Docker Swarm μετατρέπει τους μεμονωμένους διακομιστές σας σε ένα σύμπλεγμα υπολογιστών. διευκόλυνση της κλιμάκωσης, υψηλή διαθεσιμότητα και
Το Docker Swarm μετατρέπει τους μεμονωμένους διακομιστές σας σε ένα σύμπλεγμα υπολογιστών. διευκολύνοντας την κλιμάκωση, την υψηλή διαθεσιμότητα και την εξισορρόπηση φορτίου. Το πρόγραμμα εξισορρόπησης φορτίου Swarm εφαρμόζει μια στρατηγική εξισορρόπησης φορτίου κυκλικής ροής και αυτό μπορεί να παρεμποδίσει τη σωστή λειτουργία εφαρμογών με κατάσταση κατάστασης (παλαιού τύπου) που απαιτούν κάποια μορφή σταθερών περιόδων σύνδεσης για να επιτρέψουν μια ρύθμιση υψηλής διαθεσιμότητας με πολλαπλές παρουσίες. Το Docker Enterprise Edition υποστηρίζει τη σταθερή συνεδρία Layer-7, αλλά σε αυτόν τον οδηγό θα επικεντρωθούμε στη δωρεάν (CE) έκδοση του Docker. Για την υλοποίηση σταθερών συνεδριών θα χρησιμοποιήσουμε το Traefik.
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 υποστηρίζει εγγενώς το 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.
Η Τεχνητή Νοημοσύνη δεν είναι στο μέλλον, είναι εδώ ακριβώς στο παρόν Σε αυτό το blog Διαβάστε πώς οι εφαρμογές Τεχνητής Νοημοσύνης έχουν επηρεάσει διάφορους τομείς.
Είστε επίσης θύμα των επιθέσεων DDOS και έχετε μπερδευτεί σχετικά με τις μεθόδους πρόληψης; Διαβάστε αυτό το άρθρο για να λύσετε τις απορίες σας.
Μπορεί να έχετε ακούσει ότι οι χάκερ κερδίζουν πολλά χρήματα, αλλά έχετε αναρωτηθεί ποτέ πώς κερδίζουν τέτοια χρήματα; ας συζητήσουμε.
Θέλετε να δείτε επαναστατικές εφευρέσεις της Google και πώς αυτές οι εφευρέσεις άλλαξαν τη ζωή κάθε ανθρώπου σήμερα; Στη συνέχεια, διαβάστε στο blog για να δείτε τις εφευρέσεις της Google.
Η ιδέα των αυτοκινούμενων αυτοκινήτων να βγαίνουν στους δρόμους με τη βοήθεια της τεχνητής νοημοσύνης είναι ένα όνειρο που έχουμε εδώ και καιρό. Όμως, παρά τις πολλές υποσχέσεις, δεν φαίνονται πουθενά. Διαβάστε αυτό το blog για να μάθετε περισσότερα…
Καθώς η Επιστήμη εξελίσσεται με γρήγορους ρυθμούς, αναλαμβάνοντας πολλές από τις προσπάθειές μας, αυξάνονται και οι κίνδυνοι να υποβάλλουμε τον εαυτό μας σε μια ανεξήγητη Ιδιότητα. Διαβάστε τι σημαίνει η μοναδικότητα για εμάς.
Οι μέθοδοι αποθήκευσης των δεδομένων εξελίσσονται μπορεί να είναι από τη γέννηση των Δεδομένων. Αυτό το ιστολόγιο καλύπτει την εξέλιξη της αποθήκευσης δεδομένων με βάση ένα infographic.
Διαβάστε το ιστολόγιο για να μάθετε διαφορετικά επίπεδα στην Αρχιτεκτονική Μεγάλων Δεδομένων και τις λειτουργίες τους με τον απλούστερο τρόπο.
Σε αυτόν τον ψηφιακό κόσμο, οι έξυπνες οικιακές συσκευές έχουν γίνει κρίσιμο μέρος της ζωής. Ακολουθούν μερικά εκπληκτικά οφέλη των έξυπνων οικιακών συσκευών σχετικά με το πώς κάνουν τη ζωή μας να αξίζει και να απλοποιείται.
Πρόσφατα, η Apple κυκλοφόρησε το macOS Catalina 10.15.4 μια συμπληρωματική ενημέρωση για την επιδιόρθωση προβλημάτων, αλλά φαίνεται ότι η ενημέρωση προκαλεί περισσότερα προβλήματα που οδηγούν σε bricking των μηχανών mac. Διαβάστε αυτό το άρθρο για να μάθετε περισσότερα