Ομαδοποίηση RabbitMQ στο CentOS 7

Το RabbitMQ είναι ένας μεσίτης μηνυμάτων ανοιχτού κώδικα που υποστηρίζει AMQP, STOMP και άλλες τεχνολογίες επικοινωνίας. Χρησιμοποιείται ευρέως σε εταιρικές εφαρμογές και σύγχρονες αρχιτεκτονικές μικροϋπηρεσιών όπου λειτουργεί ως ασύγχρονο κανάλι μηνυμάτων μεταξύ διαφορετικών μικροϋπηρεσιών. Αυτός ο οδηγός θα περιγράψει πώς μπορείτε να ομαδοποιήσετε το RabbitMQ σε πολλούς διακομιστές CentOS 7 για να σχηματίσετε έναν μεσίτη μηνυμάτων υψηλής διαθεσιμότητας. Σε αυτό το σεμινάριο, ένας διακομιστής θα λειτουργεί ως κύριος διακομιστής και οι άλλοι διακομιστές θα λειτουργούν ως διακομιστές κατοπτρισμού σε περίπτωση που ο κύριος διακομιστής καταστεί μη διαθέσιμος.

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

Διαμορφώστε το τείχος προστασίας

Το τείχος προστασίας CentOS, ( firewalld), δεν επιτρέπει καμία εισερχόμενη κίνηση από προεπιλογή. Για να διαθέσουμε το RabbitMQ για άλλα συστήματα εντός και εκτός του δικτύου και για να μας επιτραπεί η πρόσβαση στην κονσόλα διαχείρισης, πρέπει πρώτα να ανοίξουμε ορισμένες θύρες.

Η κονσόλα διαχείρισης διεπαφής web του RabbitMQ ακούει από προεπιλογή στη θύρα 15672. Θα θέλαμε να κάνουμε την κονσόλα διαχείρισης δημόσια διαθέσιμη, ώστε να έχουμε πρόσβαση σε αυτήν από τον υπολογιστή μας. Επομένως, θα σας ζητήσουμε firewalldνα ανοίξετε μόνιμα τη θύρα 15672στη δημόσια ζώνη (η οποία είναι η προεπιλεγμένη και ενεργή ζώνη σε μια παρουσία Vultr).

sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent

Οι κόμβοι RabbitMQ πρέπει να μπορούν να επικοινωνούν μεταξύ τους. Θα θέλαμε να ανοίξουμε τις απαραίτητες θύρες, αλλά μόνο μέσω του εσωτερικού δικτύου. Δεν θέλουμε κανένας στο Διαδίκτυο να μπορεί να διαχειρίζεται ή να επικοινωνεί απευθείας με τους διακομιστές μας. Οι ακόλουθες εντολές υποθέτουν ότι οι διακομιστές μας βρίσκονται στο 192.168.0.100/24υποδίκτυο.

Η πρώτη υπηρεσία είναι η epmdυπηρεσία εντοπισμού ομοτίμων που ακούει από προεπιλογή στη θύρα 4369.

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="4369" accept'

Για επικοινωνία μεταξύ κόμβων και CLI, το RabbitMQ πρέπει να μπορεί να επικοινωνεί μέσω θύρας 25672.

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="25672" accept'

Τα εργαλεία CLI επικοινωνούν στην περιοχή των θυρών 35672-35682.

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="35672-35682" accept'

Εάν οι εφαρμογές σας χρειάζονται το πρωτόκολλο AMQP, θα χρειαστεί επίσης να ανοίξετε θύρες 5671και 5672. Εάν χρειάζεται να μπορείτε να επικοινωνείτε μέσω άλλου πρωτοκόλλου, μπορείτε να βρείτε τις απαραίτητες πληροφορίες σχετικά με τις απαιτήσεις δικτύωσης του RabbitMQ στην επίσημη τεκμηρίωση του RabbitMQ .

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="5672" accept'

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="5671" accept'

Τώρα που firewalldέχει ρυθμιστεί, πρέπει να του δώσουμε εντολή να φορτώσει ξανά τη διαμόρφωση.

sudo firewall-cmd --reload

Επαναλάβετε τα βήματα από αυτήν την ενότητα σε όλους τους διακομιστές.

Εγκαθιστώ rabbitmqadmin

Το πρόσθετο διαχείρισης συνοδεύεται από ένα εργαλείο Python που ονομάζεται και το rabbitmqadminοποίο μπορεί εύκολα να εγκατασταθεί στο σύστημα μόλις ενεργοποιηθεί το πρόσθετο διαχείρισης.

sudo wget http://localhost:15672/cli/rabbitmqadmin
sudo mv rabbitmqadmin /usr/local/bin/
sudo chmod +x /usr/local/bin/rabbitmqadmin

Διαμόρφωση DNS

Πρέπει να χρησιμοποιήσετε τα ονόματα κεντρικών υπολογιστών του διακομιστή για να προσδιορίσετε τους διακομιστές κατά την ομαδοποίηση. Από προεπιλογή, στους διακομιστές δεν έχει εκχωρηθεί εγγραφή DNS και η σύνδεση θα αποτύχει. Για να το ξεπεράσετε γρήγορα, προσθέστε το όνομα του κύριου και του κατοπτρικού κεντρικού υπολογιστή στο /etc/hostsαρχείο χρησιμοποιώντας τον αγαπημένο σας επεξεργαστή.

Για παράδειγμα, το αρχείο hosts του πλοιάρχου σας μπορεί να μοιάζει με το ακόλουθο. Παρατηρήστε τις δύο τελευταίες εγγραφές, οι οποίες επιτρέπουν στους διακομιστές να αναγνωρίζουν ο ένας τον άλλον με το όνομα κεντρικού υπολογιστή τους. Φροντίστε να αλλάξετε τις διευθύνσεις IP στις δικές σας.

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

127.0.0.1 guest
::1       guest

127.0.0.1 YOUR_MASTER_SERVER_HOST_NAME
::1       YOUR_MASTER_SERVER_HOST_NAME


192.168.0.101 YOUR_MASTER_SERVER_HOST_NAME
192.168.0.102 YOUR_MIRROR_SERVER_HOST_NAME

Συγκεντρώστε τους κόμβους

Προϋπόθεση εισαγωγής για να επιτραπεί στους κόμβους να ενωθούν μεταξύ τους είναι τα cookie Erlang όλων των κόμβων να είναι πανομοιότυπα. Από προεπιλογή, σε κάθε κόμβο θα εκχωρηθεί ένα μοναδικό cookie Erlang, επομένως πρέπει να το ρυθμίσετε εκ νέου σε όλους τους κόμβους.

Η ακόλουθη εντολή θα ορίσει το cookie Erlang σε " WE<3COOKIES", αλλά μη διστάσετε να το αλλάξετε σύμφωνα με τις προτιμήσεις σας. Κάντε αυτό σε όλους τους διακομιστές.

sudo sh -c "echo 'WE<3COOKIES' > /var/lib/rabbitmq/.erlang.cookie"

Επανεκκινήστε το RabbitMQ σε όλους τους διακομιστές για να βεβαιωθείτε ότι το cookie Erlang έχει επαναφορτωθεί σωστά.

sudo systemctl restart rabbitmq-server.service

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

sudo rabbitmqctl stop_app
sudo rabbitmqctl join_cluster "rabbit@<YOUR_MASTER_SERVER_HOST_NAME>"
sudo rabbitmqctl start_app

Επαληθεύστε ότι οι κόμβοι έχουν ενταχθεί στο σύμπλεγμα εκτελώντας την ακόλουθη εντολή.

sudo rabbitmqctl cluster_status

Όλοι οι κόμβοι σας θα εμφανιστούν στην ενότητα nodesκαι running_nodesτης εξόδου. Από εδώ και στο εξής, δεν χρειάζεται πλέον να επαναλαμβάνετε τα βήματα σε κάθε διακομιστή, η διαμόρφωση θα αντικατοπτρίζεται αυτόματα στους άλλους κόμβους.

Δημιουργήστε μια πολιτική υψηλής διαθεσιμότητας

Τώρα που έχουμε ένα σύμπλεγμα κόμβων RabbitMQ, μπορούμε να το χρησιμοποιήσουμε για να δημιουργήσουμε ουρές και ανταλλαγές υψηλής διαθεσιμότητας δημιουργώντας μια νέα πολιτική. Αυτή η πολιτική μπορεί να προστεθεί μέσω της κονσόλας διαχείρισης RabbitMQ ή χρησιμοποιώντας τη διεπαφή της γραμμής εντολών.

sudo rabbitmqctl set_policy -p "/" --priority 1 --apply-to "all" ha ".*" '{ "ha-mode": "exactly", "ha-params": 2, "ha-sync-mode": "automatic"}'

Η παρακάτω λίστα θα εξηγήσει τι σημαίνει κάθε μέρος της εντολής.

  • -p "/": Χρησιμοποιήστε αυτήν την πολιτική στο "/"vhost (η προεπιλογή μετά την εγκατάσταση)
  • --priority 1: Η σειρά με την οποία εφαρμόζονται οι πολιτικές
  • --apply-to "all": Μπορεί να είναι "queues", "exchanges"ή"all"
  • ha: Το όνομα που δίνουμε στην πολιτική μας
  • ".*": Η τυπική έκφραση που χρησιμοποιείται για να αποφασίσει σε ποιες ουρές ή ανταλλαγές εφαρμόζεται αυτή η πολιτική. ".*"θα ταιριάζει με οτιδήποτε
  • '{ "ha-mode": "exactly", "ha-params": 2, "ha-sync-mode": "automatic"}': Η αναπαράσταση JSON της πολιτικής. Αυτό το έγγραφο περιγράφει ότι θέλουμε - ακριβώς 2 κόμβους στους οποίους τα δεδομένα συγχρονίζονται αυτόματα

Εν ολίγοις, αυτή η πολιτική θα διασφαλίσει ότι θα έχουμε πάντα 2 αντίγραφα των δεδομένων σε μια ουρά ή ανταλλαγή, εφόσον έχουμε τουλάχιστον 2 κόμβους σε λειτουργία. Εάν έχετε περισσότερους κόμβους, μπορείτε να αυξήσετε την τιμή του ha-params. Συνιστάται απαρτία, ( N/2 + 1), κόμβων. Η κατοχή περισσότερων αντιγράφων των δεδομένων σας θα είχε ως αποτέλεσμα υψηλότερη χρήση δίσκου, εισόδου/εξόδου και δικτύου που θα μπορούσε να οδηγήσει σε υποβαθμισμένη απόδοση.

Εάν θέλετε να αντικατοπτρίσετε τα δεδομένα σε όλους τους κόμβους του συμπλέγματος, μπορείτε να χρησιμοποιήσετε το ακόλουθο έγγραφο JSON.

'{ "ha-mode": "all", "ha-sync-mode": "automatic"}'

Εάν θέλετε να αντικατοπτρίσετε τα δεδομένα μόνο σε συγκεκριμένους κόμβους, (για παράδειγμα: node-1και node-2), μπορείτε να χρησιμοποιήσετε τα ακόλουθα.

'{ "ha-mode": "nodes", "ha-params" :["rabbit@node-1", "rabbit@node-2"], "ha-sync-mode": "automatic"}'

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

  • κουνέλι@μάστορα
  • rabbit@client-ha
  • κουνέλι@προϊόν-χα

Στη συνέχεια, μπορούμε να δημιουργήσουμε δύο πολιτικές που θα έχουν ως αποτέλεσμα οι ουρές να έχουν ένα όνομα που ξεκινά με "πελάτης" για να αντικατοπτρίζεται στον rabbit@client-haκόμβο και όλες οι ουρές που έχουν ένα όνομα που ξεκινά με "προϊόν" να αντικατοπτρίζονται στον rabbit@product-haκόμβο.

sudo rabbitmqctl set_policy -p "/" --priority 1 --apply-to "queues" ha-client "client.*" '{ "ha-mode": "nodes", "ha-params": ["rabbit@master", "rabbit@client-ha"], "ha-sync-mode": "automatic"}
sudo rabbitmqctl set_policy -p "/" --priority 1 --apply-to "queues" ha-product "product.*" '{ "ha-mode": "nodes", "ha-params": ["rabbit@master", "rabbit@product-ha"], "ha-sync-mode": "automatic"}

Μια μικρή παρατήρηση εδώ: οι αποκλειστικές ουρές δεν αντικατοπτρίζονται ποτέ ή είναι ανθεκτικές στο RabbitMQ, ακόμα κι αν αυτή η πολιτική ταιριάζει με τέτοιες ουρές. Οι αποκλειστικές ουρές καταστρέφονται αυτόματα μόλις αποσυνδεθεί ένας πελάτης και, ως εκ τούτου, δεν θα ήταν χρήσιμο να αναπαραχθεί σε άλλο διακομιστή. Εάν ο διακομιστής αποτύγχανε, ο πελάτης θα αποσυνδεόταν από αυτόν και η ουρά θα καταστρεφόταν αυτόματα. Θα καταστρέφονταν και οι αντικατοπτρισμένες περιπτώσεις.

Δοκιμή της ρύθμισης

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

sudo rabbitmqadmin declare queue --vhost "/" name=my-ha-queue durable=true

Αυτό θα δημιουργήσει μια ανθεκτική ουρά στον προεπιλεγμένο /vhost με το όνομα my-ha-queue.

Εκτελέστε την ακόλουθη εντολή και επαληθεύστε στην έξοδο ότι η ουρά έχει εκχωρηθεί η πολιτική μας "ha" και έχει pid στην κύρια και σε έναν κόμβο καθρέφτη.

sudo rabbitmqctl list_queues name policy state pid slave_pids

Μπορούμε τώρα να δημοσιεύσουμε ένα μήνυμα στην ουρά από τον κύριο κόμβο και να σταματήσουμε το RabbitMQ στον κύριο κόμβο.

sudo rabbitmqadmin -u user_name -p password  publish routing_key=my-ha-queue payload="hello world"
sudo systemctl rabbitmqctl shutdown

Τώρα πάρτε το πίσω συνδέοντας τον κόμβο καθρέφτη.

 sudo rabbitmqadmin -H MIRROR_NODE_IP_OR_DNS -u user_name -p password get queue=my-ha-queue

Τέλος, μπορούμε να επανεκκινήσουμε τον κύριο κόμβο μας.

sudo systemctl start rabbitmq-server.service

Διαγράψτε τον επισκέπτη χρήστη

Όπως αναφέρθηκε προηγουμένως, το RabbitMQ δημιουργεί αυτόματα έναν επισκέπτη χρήστη με έναν προεπιλεγμένο κωδικό πρόσβασης επισκέπτη. Θα ήταν κακή πρακτική να αφήσετε αυτόν τον προεπιλεγμένο χρήστη σε ένα δημόσια εκτεθειμένο σύστημα.

sudo rabbitmqctl delete_user guest

Αφήστε ένα σχόλιο

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. Διαβάστε αυτό το άρθρο για να μάθετε περισσότερα