デフォルトですべてのキューのミラーリングを定義したいと思います。現在、ノードが起動したらrabbitmqctl
を使用する必要があります。
rabbitmqctl set_policy ha-all "" '{"ha-mode":"all"}'
ノードの1つに障害が発生した場合、再起動時にそのコードを再実行することを忘れないでください。
ミラーリングされたキューを使用するようにノードを自動的に構成する方法はありますか?
ポリシーは、構成ファイルから参照できる定義ファイルで指定できます。
特定のポリシーを設定する方法の例(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で機能しました
私はこれと同じものを検索し、この質問を見つけました。 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を使用しています。
rabbitmq.config
ファイルにポリシーを設定することはできません。回避策の1つは、initスクリプトを使用してrmqを起動し、その中にrabbitmqctl
コマンドを配置して、rmqが起動または再起動するたびに実行されるようにすることです。
最後に、うまくいくものを見つけました。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;"]