การทำคลัสเตอร์ RabbitMQ บน CentOS 7

RabbitMQ เป็นนายหน้าข้อความโอเพนซอร์ซที่รองรับ AMQP, STOMP และเทคโนโลยีการสื่อสารอื่น ๆ มีการใช้กันอย่างแพร่หลายในแอพพลิเคชั่นระดับองค์กรและสถาปัตยกรรมบริการไมโครที่ทันสมัยซึ่งทำหน้าที่เป็นช่องทางข้อความแบบอะซิงโครนัสระหว่างบริการไมโครที่แตกต่างกัน คู่มือนี้จะอธิบายวิธีที่คุณสามารถทำคลัสเตอร์ RabbitMQ บนเซิร์ฟเวอร์ CentOS 7 หลายเครื่องเพื่อจัดทำนายหน้าข้อความที่พร้อมใช้งานสูง ในบทช่วยสอนนี้เซิร์ฟเวอร์หนึ่งจะทำหน้าที่เป็นเซิร์ฟเวอร์หลักและเซิร์ฟเวอร์อื่นจะทำหน้าที่เป็นเซิร์ฟเวอร์มิเรอร์ในกรณีที่เซิร์ฟเวอร์หลักไม่พร้อมใช้งาน

ข้อกำหนดเบื้องต้น

  • อย่างน้อยสองอินสแตนซ์ CentOS 7 ที่ปรับใช้ใหม่และอัพเดตในซับเน็ตเดียวกันกับเครือข่ายส่วนตัวที่เปิดใช้งาน
  • RabbitMQ ติดตั้งโดยเปิดใช้งานคอนโซลการจัดการในแต่ละเซิร์ฟเวอร์ (ดูวิธีการติดตั้ง RabbitMQ บน CentOS 7 )
  • ผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบที่มีสิทธิ์ sudo (ดูวิธีการใช้ Sudo บน Debian, CentOS และ FreeBSD )

กำหนดค่าไฟร์วอลล์

ไฟร์วอลล์ CentOS ( firewalld) ไม่อนุญาตการรับส่งข้อมูลขาเข้าใด ๆ โดยค่าเริ่มต้น ในการทำให้ RabbitMQ พร้อมใช้งานสำหรับระบบอื่น ๆ ทั้งในและนอกเครือข่ายและเพื่อให้เราสามารถเข้าถึงคอนโซลการจัดการอันดับแรกเราต้องเปิดพอร์ตบางพอร์ต

เว็บคอนโซลการจัดการอินเตอร์เฟซของ RabbitMQ 15672ฟังโดยเริ่มต้นในพอร์ต เราต้องการให้คอนโซลการจัดการเปิดเผยต่อสาธารณะเพื่อให้เราสามารถเข้าถึงได้จากคอมพิวเตอร์ของเรา ดังนั้นเราจะแนะนำfirewalldให้เปิดพอร์ตอย่างถาวร15672ในโซนสาธารณะ (ซึ่งเป็นค่าเริ่มต้นและโซนที่ใช้งานบนอินสแตนซ์ Vultr)

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

โหนด RabbitMQ จะต้องสามารถสื่อสารกันได้ เราต้องการเปิดพอร์ตที่จำเป็น แต่ผ่านเครือข่ายภายในเท่านั้น เราไม่ต้องการให้ใครก็ตามบนอินเทอร์เน็ตสามารถจัดการหรือติดต่อเซิร์ฟเวอร์ของเราโดยตรง คำสั่งต่อไปนี้สมมติว่าเซิร์ฟเวอร์ของเราอยู่ใน192.168.0.100/24ซับเน็ต

บริการแรกคือepmdการค้นพบบริการ peer 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'

สำหรับการสื่อสารระหว่าง internode และ 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ไฟล์โดยใช้เครื่องมือแก้ไขที่คุณชื่นชอบ

ตัวอย่างเช่นไฟล์โฮสต์ของต้นแบบของคุณอาจมีลักษณะดังต่อไปนี้ สังเกตเห็นสองเรคคอร์ดล่าสุดซึ่งอนุญาตให้เซิร์ฟเวอร์ระบุชื่อโฮสต์ด้วยกัน อย่าลืมเปลี่ยนที่อยู่ 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

ทำคลัสเตอร์โหนด

ข้อกำหนดเบื้องต้นการนำเข้าเพื่ออนุญาตให้โหนดเข้าร่วมซึ่งกันและกันคือคุกกี้ Erlang ของโหนดทั้งหมดเหมือนกัน โดยค่าเริ่มต้นแต่ละโหนดจะได้รับคุกกี้ Erlang ที่ไม่ซ้ำกันดังนั้นคุณต้องกำหนดค่าใหม่บนทุกโหนด

คำสั่งต่อไปนี้จะตั้งค่าคุกกี้ Erlang เป็น " WE<3COOKIES" แต่คุณสามารถเปลี่ยนได้ตามความต้องการของคุณ ทำสิ่งนี้กับเซิร์ฟเวอร์ทั้งหมด

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

รีสตาร์ท RabbitMQ บนเซิร์ฟเวอร์ทั้งหมดเพื่อให้แน่ใจว่าคุกกี้ 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 Management Console หรือใช้อินเตอร์เฟสบรรทัดคำสั่ง

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) ของโหนด การมีสำเนาข้อมูลของคุณมากขึ้นจะส่งผลให้มีดิสก์เพิ่มขึ้น i / o และการใช้งานสุทธิซึ่งอาจส่งผลให้ประสิทธิภาพการทำงานลดลง

หากคุณต้องการทำมิรเรอร์ข้อมูลไปยังโหนดทั้งหมดในคลัสเตอร์คุณสามารถใช้เอกสาร 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@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

ฝากความเห็น

วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7 LAMP VPS

วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7 LAMP VPS

เรียนรู้วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7; ระบบการจัดการเนื้อหา Headless ที่มีความยืดหยุ่นสูงและปลอดภัย

ตั้งค่า Nginx บน Ubuntu เพื่อสตรีมวิดีโอสด HLS

ตั้งค่า Nginx บน Ubuntu เพื่อสตรีมวิดีโอสด HLS

เรียนรู้วิธีการตั้งค่า Nginx บน Ubuntu สำหรับการสตรีมวิดีโอสด HLS ด้วยคำแนะนำที่ชัดเจนและเป็นประโยชน์

การสำรองข้อมูลยอดนิยมด้วย Percona XtraBackup บนแอพ WordPress แบบคลิกเดียว

การสำรองข้อมูลยอดนิยมด้วย Percona XtraBackup บนแอพ WordPress แบบคลิกเดียว

เรียนรู้การใช้ Percona XtraBackup สำหรับการสำรองข้อมูลด้วยวิธีที่เป็นระบบและง่ายดายบน WordPress ออนไลน์ของคุณ

ReactOS: นี่คืออนาคตของ Windows หรือไม่?

ReactOS: นี่คืออนาคตของ Windows หรือไม่?

ReactOS ซึ่งเป็นโอเพ่นซอร์สและระบบปฏิบัติการฟรีพร้อมเวอร์ชันล่าสุดแล้ว สามารถตอบสนองความต้องการของผู้ใช้ Windows ยุคใหม่และล้ม Microsoft ได้หรือไม่? มาหาข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบเก่านี้ แต่เป็นประสบการณ์ OS ที่ใหม่กว่ากัน

AI สามารถต่อสู้กับการโจมตีของแรนซัมแวร์ที่เพิ่มขึ้นได้หรือไม่

AI สามารถต่อสู้กับการโจมตีของแรนซัมแวร์ที่เพิ่มขึ้นได้หรือไม่

การโจมตีของ Ransomware กำลังเพิ่มขึ้น แต่ AI สามารถช่วยจัดการกับไวรัสคอมพิวเตอร์ตัวล่าสุดได้หรือไม่? AI คือคำตอบ? อ่านที่นี่รู้ว่า AI boone หรือ bane

เชื่อมต่อผ่าน WhatsApp Desktop App 24*7

เชื่อมต่อผ่าน WhatsApp Desktop App 24*7

ในที่สุด Whatsapp ก็เปิดตัวแอพเดสก์ท็อปสำหรับผู้ใช้ Mac และ Windows ตอนนี้คุณสามารถเข้าถึง Whatsapp จาก Windows หรือ Mac ได้อย่างง่ายดาย ใช้ได้กับ Windows 8+ และ Mac OS 10.9+

AI จะนำกระบวนการอัตโนมัติไปสู่อีกระดับได้อย่างไร

AI จะนำกระบวนการอัตโนมัติไปสู่อีกระดับได้อย่างไร

อ่านข้อมูลนี้เพื่อทราบว่าปัญญาประดิษฐ์กำลังได้รับความนิยมในหมู่บริษัทขนาดเล็กอย่างไร และเพิ่มโอกาสในการทำให้พวกเขาเติบโตและทำให้คู่แข่งได้เปรียบ

การอัปเดตเสริม macOS Catalina 10.15.4 ทำให้เกิดปัญหามากกว่าการแก้ปัญหา

การอัปเดตเสริม macOS Catalina 10.15.4 ทำให้เกิดปัญหามากกว่าการแก้ปัญหา

เมื่อเร็ว ๆ นี้ Apple เปิดตัว macOS Catalina 10.15.4 การอัปเดตเสริมเพื่อแก้ไขปัญหา แต่ดูเหมือนว่าการอัปเดตทำให้เกิดปัญหามากขึ้นที่นำไปสู่การสร้างเครื่อง Mac อ่านบทความนี้เพื่อเรียนรู้เพิ่มเติม

13 เครื่องมือดึงข้อมูลเชิงพาณิชย์ของ Big Data

13 เครื่องมือดึงข้อมูลเชิงพาณิชย์ของ Big Data

13 เครื่องมือดึงข้อมูลเชิงพาณิชย์ของ Big Data

ระบบไฟล์บันทึกคืออะไรและทำงานอย่างไร

ระบบไฟล์บันทึกคืออะไรและทำงานอย่างไร

คอมพิวเตอร์ของเราจัดเก็บข้อมูลทั้งหมดในลักษณะที่เรียกว่าระบบไฟล์บันทึก เป็นวิธีการที่มีประสิทธิภาพที่ช่วยให้คอมพิวเตอร์สามารถค้นหาและแสดงไฟล์ได้ทันทีที่คุณกดค้นหาhttps://wethegeek.com/?p=94116&preview=true