RabbitMQ

来自Gea-Suan Lin's Wiki
跳到导航 跳到搜索

RabbitMQ是一套軟體。

需求

AWS上用t4g.nano安裝(512 MB的記憶體),會在開機後就馬上吃到Swap空間(機器上設定512 MB的Swap),這邊建議建議開發環境至少用t4g.micro,正式環境的記憶體可以再往上開大。

要注意RabbitMQ預設要求要有40%(0.4)的記憶體是空閒的,不然會開始罷工。考慮到這點,建議在正式環境上可以多保留一些記憶體,或是將0.4調小一點。

安裝

RabbitMQ的安裝會跨越好幾個APT Repository:

sudo sudo apt-key adv --keyserver hkps://keys.openpgp.org --recv-keys 0x0A9AF2115F4687BD29803A206B73A36E6026DFCA; sudo add-apt-repository -y ppa:rabbitmq/rabbitmq-erlang; curl -1sLf 'https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey' | sudo apt-key add -; sudo apt update; sudo apt install -y rabbitmq-server

基本設定

通常我們會先打開Web管理界面:

sudo rabbitmq-plugins enable rabbitmq_management

登入的界面是http://x.x.x.x:15672/,預設的帳號是guest,密碼也是guest,雖然叫做guest,但是這組帳號是管理員。

另外要注意的是,預設的guest帳號只能從本機localhost連線登入,如果要開放遠端可以連的話,可以透過/etc/rabbitmq/rabbitmq.conf設定修改(這個檔案有可能不存在,需要自己建立):

loopback_users = none

登入後建議先建立admin帳號,並且移除guest帳號(這個名稱太雷)或是移除權限。

LDAP

先安裝對應的plugin:

sudo apt-get install -y erlang-eldap; sudo rabbitmq-plugins enable rabbitmq_auth_backend_ldap

/etc/rabbitmq/rabbitmq.conf內設定:

#
auth_backends.1 = ldap
auth_backends.2 = internal
auth_ldap.servers.1 = ldap.example.com
auth_ldap.dn_lookup_attribute = uid
auth_ldap.dn_lookup_base = dc=example,dc=com
auth_ldap.user_dn_pattern = uid=${username},ou=People,dc=example,dc=com

另外在/etc/rabbitmq/advanced.config內設定:

[{rabbitmq_auth_backend_ldap,[
  {tag_queries, [{administrator, {in_group, "cn=rabbitmqadmin,ou=Groups,dc=example,dc=com", "member"}},
                 {management, {in_group, "cn=rabbitmqadmin,ou=Groups,dc=example,dc=com", "member"}}]}
]}].

Cluster設定

建議至少三台機器,建議會是奇數(考慮到quorum)。

.erlang.cookie

先把rabbitmq-1-dev上的/var/lib/rabbitmq/.erlang.cookie複製到其他台。

DNS

每一台機器的/etc/hosts內要把其他機器的位置都設定進去,這邊有這三台機器:

  • rabbitmq-1-dev
  • rabbitmq-2-dev
  • rabbitmq-3-dev

set_cluster_name

在rabbitmq-1-dev上把Cluster改名成rabbitmq-dev,預設的名稱會是主機的名稱(在這邊的例子就是rabbitmq-1-dev):

sudo rabbitmqctl set_cluster_name rabbitmq-dev

join_cluster

在rabbitmq-2-dev與rabbitmq-3-dev上加入:

sudo rabbitmqctl stop_app; sudo rabbitmqctl join_cluster rabbit@rabbitmq-1-dev; sudo rabbitmqctl start_app

set_policy

在任何一台機器上設定Policy ha-two,設定會同步到其他機器上:

sudo rabbitmqctl set_policy ha-two "^ha\." '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'

外部連結