web-dev-qa-db-ja.com

構成ファイルでrabbitmqポリシーを定義します

デフォルトですべてのキューのミラーリングを定義したいと思います。現在、ノードが起動したらrabbitmqctlを使用する必要があります。

rabbitmqctl set_policy ha-all "" '{"ha-mode":"all"}'

ノードの1つに障害が発生した場合、再起動時にそのコードを再実行することを忘れないでください。

ミラーリングされたキューを使用するようにノードを自動的に構成する方法はありますか?

14
Tyler DeWitt

ポリシーは、構成ファイルから参照できる定義ファイルで指定できます。

特定のポリシーを設定する方法の例(haをポリシーで指定できるかどうかはわかりません):

/ etc/rabbitmq/rabbitmq.config

[
{rabbit,
    [{vm_memory_high_watermark, 0.8}]
},
{rabbitmq_management,
    [{listener, [{port, 15672}]},
     {load_definitions, "/etc/rabbitmq/rabbitmq_definitions.json"},
     {http_log_dir, "/var/log/rabbitmq/management_http.log"}]
}
].

/ etc/rabbitmq/rabbitmq_definitions.json

{       "users":[
            {"name":"rabbot","password_hash":"Cvse5iGOg20UqUq7Za9D1tatOJnMVDru4GHtxqc02g7zj5ur","tags":""},
            {"name":"rabnet","password_hash":"CqqG2fwvH6xz64NpibGJx2M7ZCyFnR1BQBM+C0KH2qRPmVxF","tags":"administrator"}],
    "vhosts":[
            {"name":"/"}],
    "permissions":[
            {"user":"viabot","vhost":"VIA","configure":".*","write":".*","read":".*"},
            {"user":"vianet","vhost":"VIA","configure":".*","write":".*","read":".*"}],
    "parameters":[],
    "policies":[
            {"vhost":"VIA","name":"DLX","pattern":".*","apply-to":"queues","definition":{"dead-letter-exchange":"dead_letter"},"priority":0}
            ],
    "queues":[
            {"name":"store_to_es","vhost":"VIA","durable":true,"auto_delete":false,"arguments":{}},
            {"name":"store_to_mongodb","vhost":"VIA","durable":true,"auto_delete":false,"arguments":{}}
            ],
    "exchanges":[
            {"name":"data_incoming","vhost":"VIA","type":"fanout","durable":true,"auto_delete":false,"internal":false,"arguments":{}},
            {"name":"sms_incoming","vhost":"VIA","type":"fanout","durable":true,"auto_delete":false,"internal":false,"arguments":{}}
            ],
    "bindings":[
            {"source":"data_incoming","vhost":"VIA","destination":"store_to_es","destination_type":"queue","routing_key":"","arguments":{}},
            {"source":"sms_incoming","vhost":"VIA","destination":"store_to_mongodb","destination_type":"queue","routing_key":"","arguments":{}}
    ]
}

RabbitMQ Webサイトからは理解できなかったため、この構成ファイルと定義ファイルを共有しています。

注:この構成は、Ubuntu14.04で実行されているRabbitMQ3.6.1で機能しました

17
IvanD

私はこれと同じものを検索し、この質問を見つけました。 IvanDの答えにさらに詳細を追加するために、これは私がそれをした方法です:

最初:Sudo nano /etc/rabbitmq/rabbitmq.config(このコマンドはOSによって異なる場合があります)

[
  {rabbit,
    [
        {default_vhost,<<"/">>},
        {default_user,<<"someuser">>},
        {default_pass,<<"somepassword">>},
        {default_permissions, [<<".*">>, <<".*">>, <<".*">>]},
        {default_user_tags, [administrator]}
    ]
  },
  {rabbitmq_management,
    [{listener, [{port, 15672}]},
        {load_definitions, "/etc/rabbitmq/rabbitmq_definitions.json"},
        {http_log_dir, "/var/log/rabbitmq/management_http.log"}]
  }
].

次に、追加のjsonを作成します:Sudo nano /etc/rabbitmq/rabbitmq_definitions.json(このコマンドはOSによって異なる場合があります)そしてその内容:

{
  "vhosts":[
        {"name":"/"}
  ],
  "policies":[
        {"vhost":"/","name":"ha","pattern":"", "definition":{"ha-mode":"all","ha-sync-mode":"automatic","ha-sync-batch-size":5}}
  ]
}

重要な注意:ha-sync-batch-sizeは、3.6.0以降のrabbitmqバージョンでのみサポートされています。 https://www.rabbitmq.com/ha.html#sync-batch-size ウサギがそれより古い場合は、rabbitmq_definitions.jsonから設定を削除します。

私はubuntu14.04TrustyとRabbitmqv.3.6.2を使用しています。

9
GotBatteries

rabbitmq.configファイルにポリシーを設定することはできません。回避策の1つは、initスクリプトを使用してrmqを起動し、その中にrabbitmqctlコマンドを配置して、rmqが起動または再起動するたびに実行されるようにすることです。

1
gdw2

最後に、うまくいくものを見つけました。configMapまたはrabbitmq.configファイルは必要ありません。下

containers:
...
...
...

    lifecycle:
              postStart:
                exec:
                  command: ["/bin/sh","-c","rabbitmq-plugins --offline enable rabbitmq_management;until rabbitmqctl node_health_check; do  sleep 5;done;rabbitmqctl set_policy ha-all \".\" '{\"ha-mode\":\"all\", \"ha-sync-mode\":\"automatic\"}' --apply-to all --priority 0;"]
0
Ankush