Предуслови
Конфигуришите заштитни зид
Инсталирајте раббитмкадмин
Конфигуришите ДНС
Групирајте чворове
Креирајте политику високе доступности
Тестирање подешавања
Избришите госта корисника
РаббитМК је посредник порука отвореног кода који подржава АМКП, СТОМП и друге комуникационе технологије. Широко се користи у пословним апликацијама и модерним архитектурама микро-услуга где делује као асинхрони канал за поруке између различитих микро-услуга. Овај водич ће описати како можете да групишете РаббитМК на више ЦентОС 7 сервера да бисте формирали брокера порука високе доступности. У овом водичу, један сервер ће деловати као главни сервер, а други сервери ће деловати као сервери у огледалу у случају да главни сервер постане недоступан.
Предуслови
Заштитни зид ЦентОС, ( firewalld), подразумевано не дозвољава никакав долазни саобраћај. Да бисмо РаббитМК учинили доступним за друге системе унутар и ван мреже, и да бисмо нам омогућили приступ управљачкој конзоли, прво морамо да отворимо неке портове.
Конзола за управљање веб интерфејсом РаббитМК-а подразумевано слуша порт 15672. Желели бисмо да управљачку конзолу учинимо јавно доступном како бисмо јој могли приступити са нашег рачунара. Стога ћемо упутити firewalldда трајно отворимо порт 15672у јавној зони (која је подразумевана и активна зона на Вултр инстанци).
sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent
РаббитМК чворови морају бити у могућности да комуницирају једни са другима. Желели бисмо да отворимо потребне портове, али само преко интерне мреже. Не желимо да било ко на интернету може да администрира или директно контактира наше сервере. Следеће команде претпостављају да су наши сервери на 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'
За интернодну и ЦЛИ комуникацију, РаббитМК мора бити у могућности да комуницира преко порта 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'
ЦЛИ алати комуницирају преко опсега портова 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'
Ако је вашим апликацијама потребан АМКП протокол, такође ћете морати да отворите портове 5671и 5672. Ако треба да будете у могућности да комуницирате преко другог протокола, потребне информације о мрежним захтевима РаббитМК-а можете пронаћи у званичној РаббитМК документацији .
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
Додатак за управљање долази са Питхон алатом rabbitmqadminкоји се може лако инсталирати на систем када је додатак за управљање омогућен.
sudo wget http://localhost:15672/cli/rabbitmqadmin
sudo mv rabbitmqadmin /usr/local/bin/
sudo chmod +x /usr/local/bin/rabbitmqadmin
Морате да користите имена сервера да бисте идентификовали сервере приликом груписања. Подразумевано, серверима није додељен ДНС запис и веза неће успети. Да бисте то брзо превазишли, додајте главно име и име хоста огледала у /etc/hostsдатотеку користећи свој омиљени уређивач.
На пример, хост датотека вашег мајстора може изгледати овако. Обратите пажњу на последња два записа, који омогућавају серверима да се међусобно идентификују по имену хоста. Обавезно промените ИП адресе на своју.
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
Групирајте чворове
Предуслов за увоз који омогућава да се чворови придруже једни другима је да су Ерланг колачићи свих чворова идентични. Подразумевано, сваком чвору ће бити додељен јединствени Ерланг колачић, тако да га морате поново конфигурисати на свим чворовима.
Следећа команда ће поставити Ерланг колачић на „ WE<3COOKIES“, али слободно промените ово по свом укусу. Урадите ово на свим серверима.
sudo sh -c "echo 'WE<3COOKIES' > /var/lib/rabbitmq/.erlang.cookie"
Поново покрените РаббитМК на свим серверима да бисте били сигурни да је Ерланг колачић правилно поново учитан.
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одељку излаза. Од сада, више не морате да понављате кораке на сваком серверу, конфигурација ће се аутоматски пресликати на друге чворове.
Креирајте политику високе доступности
Сада када имамо кластер РаббитМК чворова, можемо ово да користимо за стварање редова високе доступности и размене постављањем нове политике. Ова политика се може додати преко конзоле за управљање РаббитМК или помоћу интерфејса командне линије.
sudo rabbitmqctl set_policy -p "/" --priority 1 --apply-to "all" ha ".*" '{ "ha-mode": "exactly", "ha-params": 2, "ha-sync-mode": "automatic"}'
Следећа листа ће објаснити шта значи сваки део наредбе.
-p "/": Користите ову политику на "/"вхост-у (подразумевано након инсталације)
--priority 1: Редослед којим се примењују смернице
--apply-to "all": Може бити "queues", "exchanges"или"all"
ha: Име које дајемо нашој политици
".*": Регуларни израз који се користи за одлучивање на које редове или размене се примењује ова политика. ".*"ће одговарати било чему
'{ "ha-mode": "exactly", "ha-params": 2, "ha-sync-mode": "automatic"}': ЈСОН приказ политике. Овај документ описује да желимо - тачно 2 чвора на којима се подаци аутоматски синхронизују
Укратко, ова политика ће осигурати да ћемо увек имати 2 копије података у реду чекања или размене све док имамо најмање 2 чвора која раде и раде. Ако имате више чворова, можете повећати вредност ha-params. N/2 + 1Саветује се кворум, ( ), чворова. Ако имате више копија ваших података, то би резултирало већом употребом диска, И/О-а и мреже, што би могло довести до смањених перформанси.
Ако желите да пресликате податке на све чворове у кластеру, можете користити следећи ЈСОН документ.
'{ "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"}
Мала напомена овде: ексклузивни редови се никада не пресликавају нити су трајни у РаббитМК, чак и ако би ова политика одговарала таквим редовима. Ексклузивни редови се аутоматски уништавају када се клијент прекине и, као такви, не би било од користи да се то реплицира на други сервер. Ако би сервер покварио, клијент би прекинуо везу са њим и ред би се аутоматски уништио. Зрцалне инстанце би такође биле уништене.
Тестирање подешавања
Да бисмо тестирали кластеризовано подешавање, можемо да креирамо нови ред користећи интерфејс командне линије преко управљачке конзоле.
sudo rabbitmqadmin declare queue --vhost "/" name=my-ha-queue durable=true
Ово ће створити трајни ред на подразумеваном /вхост-у са именом my-ha-queue.
Покрените следећу команду и проверите у излазу да је реду додељена наша 'ха' политика и да има пид-ове на главном и на огледалном чвору.
sudo rabbitmqctl list_queues name policy state pid slave_pids
Сада можемо да објавимо поруку у реду са главног чвора и зауставимо РаббитМК на главном чвору.
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
Избришите госта корисника
Као што је раније поменуто, РаббитМК аутоматски креира госта са подразумеваном лозинком за госте. Била би лоша пракса оставити овог подразумеваног корисника на јавно изложеном систему.
sudo rabbitmqctl delete_user guest