1. 程式人生 > >RabbitMQ叢集搭建

RabbitMQ叢集搭建

   叢集主機名稱(hostname)為:rabbitmqmaster,rabbitmqsalve1,rabbitsalver2,一共三個節點,分佈在三個docker容器中。先來看看rabbitmqctl這個命令的用法,rabbitmq的管理功能最全的就是rabbitmqctl命令了,當然還有HTTP API和UI兩種管理手段。
   rabbitmqctl的使用方法:
Usage:
rabbitmqctl [-n <node>] [-t <timeout>] [-q] <command> [<command options>] 

Options:
    -n node  預設node名稱是"
[email protected]
"
,如果你的主機明是'server.example.com',那麼node名稱是'[email protected]'。 -q 安靜輸出模式,資訊會被禁止輸出 -t timeout Default node is "[email protected]", where server is the local host. On a host named "server.example.com", the node name of the RabbitMQ Erlang node will usually be
[email protected]
(unless RABBITMQ_NODENAME has been set to some non-default value at broker startup time). The output of hostname -s is usually the correct suffix to use after the "@" sign. See rabbitmq-server(1) for details of configuring the RabbitMQ broker. Quiet output mode is selected with
the "-q" flag. Informational messages are suppressed when quiet mode is in effect. Operation timeout in seconds. Only applicable to "list" commands. Default is "infinity".
   Commands(基本的管理功能):
    stop [<pid_file>]   #停止在erlang node上執行的rabbitmq,會使rabbitmq停止
    stop_app  #停止erlang node上的rabbitmq的應用,但是erlang node還是會繼續執行的
    start_app  #啟動erlan node上的rabbitmq的應用
    wait <pid_file>  #等待rabbitmq服務啟動
    reset   #初始化node狀態,會從叢集中刪除該節點,從管理資料庫中刪除所有資料,例如vhosts等等。在初始化之前rabbitmq的應用必須先停止
    force_reset  #無條件的初始化node狀態
    rotate_logs <suffix>   #輪轉日誌檔案
    hipe_compile <directory>
   cluster管理:
    join_cluster <clusternode> [--ram]   #clusternode表示node名稱,--ram表示node以ram node加入叢集中。預設node以disc node加入叢集,在一個node加入cluster之前,必須先停止該node的rabbitmq應用,即先執行stop_app。
    cluster_status  #顯示cluster中的所有node
    change_cluster_node_type disc | ram  改變一個cluster中node的模式,該節點在轉換前必須先停止,不能把一個叢集中唯一的disk node轉化為ram node
    forget_cluster_node [--offline]  #遠端移除cluster中的一個node,前提是該node必須處於offline狀態,如果是online狀態,則需要加--offline引數。
    rename_cluster_node oldnode1 newnode1 [oldnode2] [newnode2 ...]
    update_cluster_nodes clusternode
    force_boot
    sync_queue [-p <vhost>] queue   #同步映象佇列
    cancel_sync_queue [-p <vhost>] queue
    purge_queue [-p <vhost>] queue
    set_cluster_name name
   使用者管理:
    add_user <username> <password>  #在rabbitmq的內部資料庫新增使用者
    delete_user <username>   #刪除一個使用者
    change_password <username> <newpassword>  #改變使用者密碼  \\改變web管理登陸密碼
    clear_password <username>  #清除使用者密碼,禁止使用者登入

    authenticate_user <username> <password>

    set_user_tags <username> <tag> ...      #設定使用者tags
    list_users                              #列出使用者

    add_vhost <vhost>         #建立一個vhosts
    delete_vhost <vhost>      #刪除一個vhosts    
    list_vhosts [<vhostinfoitem> ...]  #列出vhosts
    set_permissions [-p <vhost>] <user> <conf> <write> <read> #針對一個vhosts 給使用者賦予相關許可權
    clear_permissions [-p <vhost>] <username>  #清除一個使用者對vhosts的許可權
    list_permissions [-p <vhost>]    #列出哪些使用者可以訪問該vhosts
    list_user_permissions <username>  #列出該使用者的訪問許可權

    set_parameter [-p <vhost>] <component_name> <name> <value>
    clear_parameter [-p <vhost>] <component_name> <key>
    list_parameters [-p <vhost>]
   policy管理,策略用來控制和修改queues和exchange在叢集中的行為,策略可以應用到vhost
    set_policy [-p <vhost>] [--priority <priority>] [--apply-to <apply-to>] #name 策略名稱,pattern  正則表示式,用來匹配資源,符合的就會應用設定的策略,apply-to 表示策略應用到什麼型別的地方,一般有queues、exchange和all,預設是all。priority 是個整數優先順序,definition 是json格式設定的策略。
<name> <pattern>  <definition>
    clear_policy [-p <vhost>] <name>#清除一個策略  
    list_policies [-p <vhost>]#列出已有的策略
   queues && exchange狀態資訊
    list_queues [-p <vhost>] [<queueinfoitem> ...]#返回queue的資訊,如果省略了-p引數,則預設顯示的是"/"vhosts的資訊。
    list_exchanges [-p <vhost>] [<exchangeinfoitem> ...]#返回exchange的資訊。
    list_bindings [-p <vhost>] [<bindinginfoitem> ...] #返回繫結資訊。
    list_connections [<connectioninfoitem> ...]#返回連結資訊。
    list_channels [<channelinfoitem> ...]#返回目前所有的channels。
    list_consumers [-p <vhost>]#返回consumers,
    status#顯示broker的狀態
    node_health_check #節點健康檢查
    environment #顯示環境引數的資訊
    report#返回一個服務狀態report
    eval <expr>

    close_connection <connectionpid> <explanation>
    trace_on [-p <vhost>]
    trace_off [-p <vhost>]
    set_vm_memory_high_watermark <fraction>
    set_vm_memory_high_watermark absolute <memory_limit>
    set_disk_free_limit <disk_limit>
    set_disk_free_limit mem_relative <fraction>
   叢集節點的名稱為[email protected],那麼對應的叢集節點名稱為[email protected],[email protected],[email protected],把rabbitmqsalve1加入到叢集
[[email protected] rabbitmq]# sbin/rabbitmqctl stop_app
Stopping node [email protected] ...
[[email protected] rabbitmq]# sbin/rabbitmqctl join_cluster [email protected]  #以disc的方式加入叢集,可以使用引數--ram 以ram的方式加入到叢集。
Clustering node [email protected] with [email protected] ...
[[email protected] rabbitmq]# sbin/rabbitmqctl start_app
Starting node [email protected] ...
[[email protected] rabbitmq]# sbin/rabbitmqctl cluster_status
Cluster status of node [email protected] ...
[{nodes,[{disc,[[email protected],[email protected]]}]},
 {running_nodes,[[email protected],[email protected]]},
 {cluster_name,<<"[email protected]">>},
 {partitions,[]},
 {alarms,[{[email protected],[]},{[email protected],[]}]}]


[[email protected] rabbitmq]# sbin/rabbitmqctl stop_app
Stopping node [email protected] ...
[[email protected] rabbitmq]# sbin/rabbitmqctl change_cluster_node_type ram #修改節點為ram
Turning [email protected] into a ram node ...
[[email protected] rabbitmq]# sbin/rabbitmqctl start_app
Starting node [email protected] ...
[[email protected] rabbitmq]# sbin/rabbitmqctl cluster_status
Cluster status of node [email protected] ...
[{nodes,[{disc,[[email protected]]},
         {ram,[[email protected]]}]},
 {running_nodes,[[email protected]
                 [email protected]]},
 {cluster_name,<<"[email protected]">>},
 {partitions,[]},
 {alarms,[{[email protected],[]},
          {[email protected],[]}]}]
    設定映象佇列策略
    在任意一個節點上執行:
[[email protected] /]# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
Setting policy "ha-all" for pattern "^" to "{\"ha-mode\":\"all\"}" with priority "0" ...
    將所有佇列設定為映象佇列,即佇列會被複制到各個節點,各個節點狀態保持一直。