從零到一搭建rabbitmq集群

安裝

yum install erlang-R16B-03.18.el7
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.8/rabbitmq-server-3.6.8-1.el7.noarch.rpm
rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
yum install rabbitmq-server-3.6.8-1.el7.noarch.rpm

將sns-mq01 的 /var/lib/rabbitmq/.erlang.cookie 拷貝到 sns-mq02 和 sns-mq03上

chown rabbitmq:rabbitmq .erlang.cookie
chmod 400 .erlang.cookie
vim /etc/rabbitmq/rabbitmq.config

[{rabbit,[{vm_memory_high_watermark,0.6}, {cluster_partition_handling, pause_minority}]}].

vim /etc/rabbitmq/rabbitmq-env.conf

RABBITMQ_MNESIA_BASE=/data/rabbitmq/mnesia
RABBITMQ_LOG_BASE=/data/rabbitmq/log

logrotate vim /etc/logrotate.d/rabbitmq-server

/data/rabbitmq/log/*.log {
        rotate 7
        daily
        missingok
        dateext
        dateformat .%Y%m%d
        notifempty
        sharedscripts
        postrotate
            /usr/sbin/rabbitmqctl rotate_logs > /dev/null
        endscript
}

mkdir /data/rabbitmq
mkdir /data/rabbitmq/mnesia
mkdir /data/rabbitmq/log
chown rabbitmq:rabbitmq /data/rabbitmq/mnesia/
chown rabbitmq:rabbitmq /data/rabbitmq/log/
chmod 750 /data/rabbitmq/mnesia/
chmod 750 /data/rabbitmq/log/
rabbitmq-plugins enable rabbitmq_management 開啟管理界面
rabbitmq-plugins enable rabbitmq_top 開啟內(nèi)存占用監(jiān)控

systemctl start rabbitmq-server.service
rabbitmqctl add_vhost vhost01
rabbitmqctl add_user red xiaohongshu
rabbitmqctl set_permissions -p vhost01 red "." "." ".*"

sns-mq02

systemctl stop rabbitmq-server.service
systemctl start rabbitmq-server.service
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@sns-mq01
rabbitmqctl start_app

sns-mq03

systemctl stop rabbitmq-server.service
systemctl start rabbitmq-server.service
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@sns-mq01
rabbitmqctl start_app

LoadBanlance

sns-lb-rabbitmq.devops.xiaohongshu.com: 5670

sns-asura-staging02
runit

vim /etc/service/mq.test/run

#!/bin/bash
exec 2>&1
exec chpst -u deploy -e /data/sns.asura/.env /data/.virtualenvs/sns.asura/bin/python /data/sns.asura/asura/service/mq.py

Rabbitmq Management Plugin

rabbitmq-plugins enable rabbitmq_management
rabbitmqctl set_user_tags red administrator

修改mq03的mnesia位置

rabbitmqctl stop_app
在mq02上: rabbitmqctl forget_cluster_node rabbit@sns-mq03
vim /etc/rabbitmq/rabbitmq-env.conf

RABBITMQ_MNESIA_BASE=/data/rabbitmq/mnesia
RABBITMQ_LOG_BASE=/data/rabbitmq/log

mkdir /data/rabbitmq/mnesia
mkdir /data/rabbitmq/log
chown rabbitmq:rabbitmq /data/rabbitmq/mnesia/
chown rabbitmq:rabbitmq /data/rabbitmq/log/
chmod 750 /data/rabbitmq/mnesia/
chmod 750 /data/rabbitmq/log/


Paste_Image.png

systemctl stop rabbitmq-server.service
systemctl start rabbitmq-server.service
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@sns-mq01
rabbitmqctl start_app

修改mq02的mnesia位置

rabbitmqctl stop_app
在mq03上: rabbitmqctl forget_cluster_node rabbit@sns-mq02
vim /etc/rabbitmq/rabbitmq-env.conf

RABBITMQ_MNESIA_BASE=/data/rabbitmq/mnesia
RABBITMQ_LOG_BASE=/data/rabbitmq/log

mkdir /data/rabbitmq/mnesia
mkdir /data/rabbitmq/log
chown rabbitmq:rabbitmq /data/rabbitmq/mnesia/
chown rabbitmq:rabbitmq /data/rabbitmq/log/
chmod 750 /data/rabbitmq/mnesia/
chmod 750 /data/rabbitmq/log/


Paste_Image.png

systemctl stop rabbitmq-server.service
systemctl start rabbitmq-server.service
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@sns-mq01
rabbitmqctl start_app

修改mq01的mnesia位置

rabbitmqctl stop_app
在mq03上: rabbitmqctl forget_cluster_node rabbit@sns-mq01
vim /etc/rabbitmq/rabbitmq-env.conf

RABBITMQ_MNESIA_BASE=/data/rabbitmq/mnesia
RABBITMQ_LOG_BASE=/data/rabbitmq/log

mkdir /data/rabbitmq/
mkdir /data/rabbitmq/mnesia
mkdir /data/rabbitmq/log
chown rabbitmq:rabbitmq /data/rabbitmq/mnesia/
chown rabbitmq:rabbitmq /data/rabbitmq/log/
chmod 750 /data/rabbitmq/mnesia/
chmod 750 /data/rabbitmq/log/


Paste_Image.png

systemctl stop rabbitmq-server.service
systemctl start rabbitmq-server.service
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@sns-mq02
rabbitmqctl start_app

設(shè)置mq03為內(nèi)存節(jié)點(diǎn)

rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type ram
rabbitmqctl start_app

設(shè)置內(nèi)存

rabbitmqctl set_vm_memory_high_watermark 0.6

坑到死顶考,上面搭的老版本經(jīng)常出一些bug,2個(gè)月一個(gè)版本击狮,一堆bugfix我也是服氣的
還不能平滑升級(jí)拗慨,經(jīng)常有一些queue莫名其妙crash, 節(jié)點(diǎn)間負(fù)載不均迹辐。

清理 crashed queue

import os
cmd = """rabbitmqctl eval '{ok, Q} = rabbit_amqqueue:lookup(rabbit_misc:r(<<"vhost_name">>, queue, <<"queue_name">>)), rabbit_amqqueue:delete_crashed(Q).'"""
def restart_queue(vhost):
    print "in**********"
    queues = os.popen('rabbitmqctl list_queues -p ' + vhost).read()
    print queues
    dir(queues)
    queues = queues.split('\n')[1:]
    result = []
    for queue in queues:
        if queue:
            queue = queue.split()[0]
            result.append(queue)
            command = cmd.replace('vhost_name', vhost)
            command = command.replace('queue_name', queue)
            print command
            os.system(command)
restart_queue('vhost01')
restart_queue('vhost_celery_online')
restart_queue('vhost_celery_staging')
import os
import requests
import json
from requests.auth import HTTPBasicAuth
vhost = "vhost_celery_online"
cmd = """rabbitmqctl eval '{ok, Q} = rabbit_amqqueue:lookup(rabbit_misc:r(<<"vhost_name">>, queue, <<"queue_name">>)), rabbit_amqqueue:delete_crashed(Q).'"""
cmd = cmd.replace('vhost_name', vhost);
queues = requests.get('http://127.0.0.1:15672/api/queues/' + vhost, auth=HTTPBasicAuth('name', 'password')).content
queues = json.loads(queues)
for queue in queues:
    if queue:
        name = queue.get("name")
        if not name:
          continue
        command = cmd.replace('queue_name', name)
        print command
        os.system(command)

安裝新版

vim /etc/yum.repos.d/rabbitmq-erlang.repo

# In /etc/yum.repos.d/rabbitmq-erlang.repo
[rabbitmq-erlang]
name=rabbitmq-erlang
baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/20/el/7
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1

下載rabbitmq

wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.5/rabbitmq-server-3.7.5-1.el7.noarch.rpm
yum install rabbitmq-server-3.7.5-1.el7.noarch.rpm

手工刪除connection
rabbitmqctl list_connections pid port state user vhost host recv_cnt send_cnt send_pend name | awk '{if ($5=="vhost_celery_online") {print "rabbitmqctl close_connection "" $1 "" "manually closing idle connection"" | "/bin/bash"}}'

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市婚肆,隨后出現(xiàn)的幾起案子脑豹,更是在濱河造成了極大的恐慌抗愁,老刑警劉巖馁蒂,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蜘腌,居然都是意外死亡沫屡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門撮珠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沮脖,“玉大人,你說我怎么就攤上這事芯急∩捉欤” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵娶耍,是天一觀的道長免姿。 經(jīng)常有香客問我,道長榕酒,這世上最難降的妖魔是什么胚膊? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任故俐,我火速辦了婚禮,結(jié)果婚禮上紊婉,老公的妹妹穿的比我還像新娘药版。我一直安慰自己,他們只是感情好喻犁,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布槽片。 她就那樣靜靜地躺著,像睡著了一般肢础。 火紅的嫁衣襯著肌膚如雪筐乳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天乔妈,我揣著相機(jī)與錄音蝙云,去河邊找鬼。 笑死路召,一個(gè)胖子當(dāng)著我的面吹牛勃刨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播股淡,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼身隐,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了唯灵?” 一聲冷哼從身側(cè)響起贾铝,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎埠帕,沒想到半個(gè)月后垢揩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡敛瓷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年叁巨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呐籽。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锋勺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出狡蝶,到底是詐尸還是另有隱情庶橱,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布贪惹,位于F島的核電站苏章,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏馍乙。R本人自食惡果不足惜布近,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一垫释、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧撑瞧,春花似錦棵譬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至酬诀,卻和暖如春脏嚷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瞒御。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來泰國打工父叙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肴裙。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓趾唱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蜻懦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子甜癞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)宛乃,斷路器悠咱,智...
    卡卡羅2017閱讀 134,633評(píng)論 18 139
  • 整體架構(gòu) 部署步驟 基于 Docker 基本概念內(nèi)存節(jié)點(diǎn)只保存狀態(tài)到內(nèi)存,例外情況是:持久的 queue 的內(nèi)容將...
    mvictor閱讀 12,748評(píng)論 5 30
  • =========================================================...
    lavor閱讀 3,484評(píng)論 0 5
  • Yum安裝RabbitMQ3.6.11與Erlange20配置及優(yōu)化 RabbitMQ簡(jiǎn)介 AMQP征炼,即Advan...
    三杯水Plus閱讀 4,546評(píng)論 0 7
  • activemq spring.activemq.broker-url指定ActiveMQ broker的URL析既,...
    Josh_Song閱讀 1,523評(píng)論 0 0