簡(jiǎn)介
rabbitmq依賴于erlang虛擬機(jī),因此需要先安裝erlang虛擬機(jī)蒜埋。需要注意的是erlang虛擬機(jī)與rabbitmq是有對(duì)應(yīng)關(guān)系的玖详,所以安裝的時(shí)候注意版本匹配。具體可以查看如下的鏈接:
http://www.rabbitmq.com/which-erlang.html
我所使用的版本是rabbitmq3.7.8以及otp_src_21.0
可以直接在 http://erlang.org/download/ 下載
erlang安裝
在安裝erlang之前暑刃,需要先安裝一下以下的幾個(gè)包:
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之后厢漩,可以配置以下的環(huán)境變量。如果只是提供rabbitmq的運(yùn)行環(huán)境岩臣,也可以不進(jìn)行配置
vim /etc/profile
export ERL_HOME=/data/program/erlang-21.0/
export PATH=$PATH:$ERL_HOME/bin
rabbitmq安裝
下載Binary包溜嗜,解壓到指定的目錄下,并rabbitmq用戶架谎。修改sbin/rabbitmq-defaults文件炸宵,指定安裝目錄。在文件的最開(kāi)始增加
RABBITMQ_HOME="/data/program/rabbitmq-server-3.7.8"
ERL_DIR="/data/program/erlang-21.0/bin/"
這兩個(gè)目錄分別指定了rabbitmq的安裝目錄以及erlang的程序可執(zhí)行目錄谷扣。
除了這兩個(gè)參數(shù)土全,也可以指定其他的必要參數(shù).此外,也可以在如下的配置文件中進(jìn)行配置.從3.7.0開(kāi)始,配置文件改為key-value的格式,以下鏈接是一個(gè)樣例配置
https://github.com/rabbitmq/rabbitmq-server/blob/master/docs/rabbitmq.conf.example
vim etc/rabbitmq/rabbitmq.conf
#文件內(nèi)容如下
log.file.level = warning
#也可以對(duì)IP進(jìn)行監(jiān)聽(tīng)
listeners.tcp.local = 127.0.0.1:5672
etc/rabbitmq/rabbitmq-env.conf是一個(gè)shell文件,用于覆蓋變量
啟動(dòng):
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參數(shù)会涎,可以以deamon的方式運(yùn)行
狀態(tài)查看:
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
如果出現(xiàn)ERROR: epmd error for host "yourhostname": timeout
原因是:主機(jī)名和ip不匹配裹匙,需要更改hostname或者/etc/hosts文件
使用客戶端時(shí),記得使用相同的用戶末秃,例如rabbitmq幻件,否則會(huì)導(dǎo)致erlang cookie不一致,客戶端無(wú)法連接
集群搭建
假定有兩個(gè)機(jī)器蛔溃,分別為host1和host2绰沥,ip分別為ip1和ip2。首先需要分別在兩臺(tái)機(jī)器上面配置host贺待,使得這兩個(gè)機(jī)器可以通過(guò)hostname直接互相通信徽曲。分別在兩個(gè)機(jī)器上面添加如下的host
ip1 host1
ip2 host2
將host2加入host1組成一個(gè)集群,安裝上面的命令啟動(dòng)rabbitmq的話可以在rabbitmq賬號(hào)的home目錄下獲取到一個(gè).erlang.cookie文件麸塞,該文件是隱藏的秃臣。將host1的該文件拷貝到host2的對(duì)應(yīng)目錄下,只有rabbitmq啟動(dòng)之后哪工,該文件才會(huì)生成奥此。該文件是用來(lái)做集群間的通訊認(rèn)證的。如果有多個(gè)結(jié)點(diǎn)雁比,確保多個(gè)結(jié)點(diǎn)的該文件內(nèi)容一致稚虎。在各個(gè)結(jié)點(diǎn)上面啟動(dòng)rabbitmq之后,需要在從節(jié)點(diǎn)上面執(zhí)行如下的命令偎捎,在本文中是在host2上面執(zhí)行:
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參數(shù)用于指定隊(duì)列保存在內(nèi)存中蠢终,這種方式性能會(huì)好一些序攘,默認(rèn)是保存在disc中,將會(huì)進(jìn)行持久化寻拂。配置之后可以通過(guò)如下命令
sudo -u rabbitmq /data/program/rabbitmq-server-3.7.8/sbin/rabbitmqctl cluster_status
通過(guò)這種方式設(shè)置之后的集群程奠,主要是起到了分散壓力的作用〖蓝ぃ客戶端連上之后瞄沙,rabbitmq將自動(dòng)將不同的隊(duì)列分散到不同的節(jié)點(diǎn)。對(duì)于一些較為敏感的數(shù)據(jù)慌核,需要確保數(shù)據(jù)的安全性帕识,可以通過(guò)rabbitmq提供的鏡像模式確保高可用。為了達(dá)到該目的遂铡,在繼續(xù)搭建完成之后肮疗,可以通過(guò)如下的命令搭建鏡像機(jī)器
sudo -u rabbitmq /data/program/rabbitmq-server-3.7.8/sbin/rabbitmqctl set_policy ha-all-policy "^" '{"ha-mode":"all", "ha-sync-mode":"automatic"}'
該命令可以根據(jù)不同的參數(shù),指定具體的隊(duì)列是否采用鏡像扒接,或者將隊(duì)列同步到多少個(gè)子節(jié)點(diǎn)伪货。
此外,對(duì)于該命令的一些詳細(xì)的配置可以參考http://www.rabbitmq.com/ha.html