1. 程式人生 > >rabbitmq安裝與測試

rabbitmq安裝與測試

1 Erlang舊版解除安裝:cluster叢集中的所有節點的erlang版本和rabbitmq版本必須一致, 否則無法加入clusteron Ubuntusudo apt-get purge erlang*on Fedora:sudo yum remove erlang*installed erlang from source:rm -rf {erlang home directory}.2 原始碼安裝Erlangsudo tar -zxvf otp_src_20.1.tar.gzcd otp_src_20.1export ERL_TOP=`pwd`sudo ./configure //ps:預設安裝在
/usr/local/{bin,lib/erlang}sudo makesudo make release_testscd release/tests/test_serversudo $ERL_TOP/bin/erl -s ts install -s ts smoke_test batch -s init stopcd $ERL_TOPsudo make installsudo ln -s /usr/local/lib/erlang/bin/erl /usr/bin/erl //非root使用者也可以訪問瀏覽器開啟檢視test結果: $ERL_TOP/release/tests/test_server/index.html3 安裝rabbitmq二進位制包
sudo xz -d rabbitmq-server-generic-unix-3.6.14.tar.xzsudo tar -xvf rabbitmq-server-generic-unix-3.6.14.tar新增環境變數:sudo vi /etc/profile,最末尾新增,儲存後source /etc/profileRABBITMQ_HOME=/data/project/soft/rabbitmq_server-3.6.14export PATH=${PATH}:${RABBITMQ_HOME}/sbin常用命令:後臺執行:sudo rabbitmq-server -detached停止服務:sudo rabbitmqctl stop啟動/停止應用執行(程序還在,主要用於執行其他變更管理命令如reset):sudo rabbitmqctl stop_appsudo rabbitmqctl start_app查詢狀態:sudo rabbitmqctl status使用者管理:
sudo rabbitmqctl add_user admin admin_159753sudo rabbitmqctl delete_user usenamesudo rabbitmqctl change_password usename newpass清除密碼後該使用者將無法登入:sudo rabbitmqctl clear_password usenamesudo rabbitmqctl authenticate_user usename passw設定使用者標籤,可以設定多個,空格分隔 標籤用於控制使用者的管理功能。sudo rabbitmqctl set_user_tags usename administrator啟用管理元件:sudo rabbitmq-plugins enable rabbitmq_management預設guest/guest 使用者只能在localhost登入,需要新建一個使用者,並賦予管理員標籤。刪除預設使用者:sudo rabbitmqctl delete_user guest管理後臺地址:http://ip:15672/修改nodename(vi rabbitmq-env):#Rename the nodeNODENAME='rabbit1'#Config file location and new filename CONFIG_FILE=/data/project/soft/rabbitmq_server-3.6.14/etc/rabbitmq/rabbitmq.config4 同一臺主機啟動多節點(方便測試叢集配置):sudo RABBITMQ_NODE_PORT=5672 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15672}]" RABBITMQ_NODENAME=rabbit1 rabbitmq-server -detachedsudo RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" RABBITMQ_NODENAME=rabbit2 rabbitmq-server -detachedrabbit2 與rabbit1組成叢集(join_cluster --ram  指定結點型別 為ram,預設為disc,叢集中至少要有一個disc結點):sudo rabbitmqctl -n rabbit2 stop_appsudo rabbitmqctl -n rabbit2 join_cluster [email protected]`hostname -s`sudo rabbitmqctl -n rabbit2 start_apprabbit1脫離叢集:sudo rabbitmqctl -n rabbit1 stop_appsudo rabbitmqctl -n rabbit1 resetsudo rabbitmqctl -n rabbit1 start_app查詢叢集狀態:sudo rabbitmqctl -n rabbit1 cluster_statussudo rabbitmqctl -n rabbit2 cluster_status變更rabbit1 node types為ram:sudo rabbitmqctl -n rabbit1 stop_appsudo rabbitmqctl -n rabbit1 change_cluster_node_type ramsudo rabbitmqctl -n rabbit1 start_app測試環境:4核心 Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz8G記憶體 126G硬碟x86_64 GNU/Linu單機測試資料(100w條20位元組內的文字資料):
生產者數量消費者數量autoAck傳送速率(/s)接收速率(/s)MQ伺服器cpu
101114950130%
1113623035098280%
1213529317032/個300%
21123932/個47984348%
1102004519,800270%
120196919,774/個323%
叢集測試資料(100w條20位元組內的文字資料):叢集結點 :rabbit1(hello佇列在此結點) rabbit2
生產者數量消費者數量autoAck傳送速率(/s)接收速率(/s)MQ伺服器cpu備註
101136660130%(rabbit2沒有cpu消耗)生產者連線到rabbit1
101169830200%(rabbit2高於rabbit1)生產者連線到rabbit2
1111912119,245280%生產者連線到rabbit1消費者連線到rabbit2
1111383513,964160%(相當)生產者連線到rabbit2消費者連線到rabbit1
1111476914,813240%(rabbit2高於rabbit1)生產者連線到rabbit2消費者連線到rabbit2
1113614235980282%生產者連線到rabbit1消費者連線到rabbit1
1212945615408/個300%(rabbit1高)生產者連線到rabbit1消費者分別連線到rabbit1 rabbit2
1213516617809/個320%生產者連線到rabbit1消費者全部連線到rabbit1 rabbit1
121171048,893/個270%(rabbit2高)生產者連線到rabbit2消費者全部連線到rabbit2
22117914130051587514768310%(rabbit1高)生產者、消費者分別連線到rabbit1、rabbit2
結論:單機mq效能最高,當消費者消費的訊息不在當前節點,TPS會下降的30%-50%.叢集主要用於高可用部署以及簡化客戶端接入邏輯。對於追求吞吐量,資料不要求強一致性的業務來說,使用kafka會更適合。要求高可用強一致性的業務,如果業務併發量過大, 可採用按業務分離mq,分散流量。無法拆分的業務,則可以部署多個獨立mq節點,非cluster,通過在mq客戶端做負載均衡,確保每個節點的連線數是均衡的。使用HAproxy可以簡單實現負載,但無法保證所有節點都有合適數量的生產者和消費者。

關於autoAck引數,如果設定為true,則伺服器傳送之後自動確認,無需等待客戶端確認。這種方式TPS最高,但容易出現訊息丟失。

autoAck設定為false,則訊息不會丟失,客戶端還有可能會收到重複訊息,需要在客戶端做好冪等邏輯。這種情況下,TPS會下降50%