簡介
rabbitmq依賴于erlang虛擬機,因此需要先安裝erlang虛擬機。需要注意的是erlang虛擬機與rabbitmq是有對應關系的,所以安裝的時候注意版本匹配。具體可以查看如下的鏈接:
http://www.rabbitmq.com/which-erlang.html
我所使用的版本是rabbitmq3.7.8以及otp_src_21.0
可以直接在 http://erlang.org/download/ 下載
erlang安裝
在安裝erlang之前,需要先安裝一下以下的幾個包:
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel
./configure --prefix=/data/program/erlang-21.0 --with-ssl --enable-threads --enable-smp-support --enable-kernel-poll --enable-hipe --without-javac
make -j4 & make install
安裝完erlang之后,可以配置以下的環境變量。如果只是提供rabbitmq的運行環境,也可以不進行配置
vim /etc/profile
export ERL_HOME=/data/program/erlang-21.0/
export PATH=$PATH:$ERL_HOME/bin
rabbitmq安裝
下載Binary包,解壓到指定的目錄下,并rabbitmq用戶。修改sbin/rabbitmq-defaults文件,指定安裝目錄。在文件的最開始增加
RABBITMQ_HOME="/data/program/rabbitmq-server-3.7.8"
ERL_DIR="/data/program/erlang-21.0/bin/"
這兩個目錄分別指定了rabbitmq的安裝目錄以及erlang的程序可執行目錄。
除了這兩個參數,也可以指定其他的必要參數.此外,也可以在如下的配置文件中進行配置.從3.7.0開始,配置文件改為key-value的格式,以下鏈接是一個樣例配置
https://github.com/rabbitmq/rabbitmq-server/blob/master/docs/rabbitmq.conf.example
vim etc/rabbitmq/rabbitmq.conf
#文件內容如下
log.file.level = warning
#也可以對IP進行監聽
listeners.tcp.local = 127.0.0.1:5672
etc/rabbitmq/rabbitmq-env.conf是一個shell文件,用于覆蓋變量
啟動:
sudo adduser -s /sbin/nologin rabbitmq
sudo chown -R rabbitmq /data/program/rabbitmq-server-3.7.8/
sudo -u rabbitmq /data/program/rabbitmq-server-3.7.8/sbin/rabbitmq-server
增加-detached參數,可以以deamon的方式運行
狀態查看:
sudo -u rabbitmq /data/program/rabbitmq-server-3.7.8/sbin/rabbitmqctl status
停止:
sudo -u rabbitmq /data/program/rabbitmq-server-3.7.8/sbin/rabbitmqctl stop
ps
如果出現ERROR: epmd error for host "yourhostname": timeout
原因是:主機名和ip不匹配,需要更改hostname或者/etc/hosts文件
使用客戶端時,記得使用相同的用戶,例如rabbitmq,否則會導致erlang cookie不一致,客戶端無法連接
集群搭建
假定有兩個機器,分別為host1和host2,ip分別為ip1和ip2。首先需要分別在兩臺機器上面配置host,使得這兩個機器可以通過hostname直接互相通信。分別在兩個機器上面添加如下的host
ip1 host1
ip2 host2
將host2加入host1組成一個集群,安裝上面的命令啟動rabbitmq的話可以在rabbitmq賬號的home目錄下獲取到一個.erlang.cookie文件,該文件是隱藏的。將host1的該文件拷貝到host2的對應目錄下,只有rabbitmq啟動之后,該文件才會生成。該文件是用來做集群間的通訊認證的。如果有多個結點,確保多個結點的該文件內容一致。在各個結點上面啟動rabbitmq之后,需要在從節點上面執行如下的命令,在本文中是在host2上面執行:
sudo -u rabbitmq /data/program/rabbitmq-server-3.7.8/sbin/rabbitmqctl stop_app
sudo -u rabbitmq /data/program/rabbitmq-server-3.7.8/sbin/rabbitmqctl reset
sudo -u rabbitmq /data/program/rabbitmq-server-3.7.8/sbin/rabbitmqctl join_cluster rabbit@host1 --ram
sudo -u rabbitmq /data/program/rabbitmq-server-3.7.8/sbin/rabbitmqctl start_app
其中--ram參數用于指定隊列保存在內存中,這種方式性能會好一些,默認是保存在disc中,將會進行持久化。配置之后可以通過如下命令
sudo -u rabbitmq /data/program/rabbitmq-server-3.7.8/sbin/rabbitmqctl cluster_status
通過這種方式設置之后的集群,主要是起到了分散壓力的作用。客戶端連上之后,rabbitmq將自動將不同的隊列分散到不同的節點。對于一些較為敏感的數據,需要確保數據的安全性,可以通過rabbitmq提供的鏡像模式確保高可用。為了達到該目的,在繼續搭建完成之后,可以通過如下的命令搭建鏡像機器
sudo -u rabbitmq /data/program/rabbitmq-server-3.7.8/sbin/rabbitmqctl set_policy ha-all-policy "^" '{"ha-mode":"all", "ha-sync-mode":"automatic"}'
該命令可以根據不同的參數,指定具體的隊列是否采用鏡像,或者將隊列同步到多少個子節點。
此外,對于該命令的一些詳細的配置可以參考http://www.rabbitmq.com/ha.html