RabbitMQ是一個開源的消息隊列中間件,服務器端用Erlang語言編寫。因此,在進行RabbitMQ環境安裝時,需先安裝Erlang環境。安裝過程需要注意的是,RabbitMQ的版本和Erlang的版本兼容問題,否則會導致RabbitMQ安裝失敗。這里RabbitMQ采用3.7.8(rabbitmq-server-generic-unix-3.7.8.tar.xz),Erlang采用otp_src_21.1.tar.gz。本文針對centos7服務器,搭建RabbitMQ集群。
1、Erlang環境安裝(源碼編譯)
首先下載好Erlang源碼包otp_src_21.1.tar.gz,放在/usr/loacl/目錄下(個人習慣,安裝的軟件均放在此目錄),然后執行以下命令:
cd /usr/local/? ? ? ? # 進入erlang源碼包所在路徑
tar -xvf otp_src_21.1.tar.gz? ? ? ? # 解壓erlang源碼包
mkdir erlang? ? # 新建文件夾,存放erlang編譯后的可執行文件及依賴包
進入解壓后的文件目錄 otp_src_21.1
cd otp_src_21.1? ? # 進入解壓后目錄
執行config命令,
./configure --prefix=/usr/local/erlang --with-ssl -enable-threads -enable-smmp-support -enable-kernel-poll --enable-hipe --without-javac?
執行編譯和安裝命令
make && make install
編輯profile文件
vi /etc/profile
配置erlang環境變量
export ERALNG_HOME=/usr/local/erlang
export PATH=$ERLANG_HOME/bin:$PATH
退出并保存profile,立即生效環境變量配置
source /etc/profile
查看erlang是否配置完畢,執行命令
erl
2、RabbitMQ安裝
將下載好的RabbitMQ安裝包,解壓至/usr/local/目錄下,
tar -xvf?rabbitmq-server-generic-unix-3.7.8.tar.xz
進入解壓后的目錄
cd?rabbitmq_server-3.7.8
配置環境變量
vi /etc/profile
輸入:
export RABBITMQ_HOME=/urs/local/rabbitmq_server-3.7.8
export PATH=$RABBITMQ_HOME/sbin:$PATH
生效環境變量配置
source /etc/profile
配置rabbitmq配置文件
找到rabbitmq-server-master.zip,并解壓,將doc目錄下的配置文件,拷貝至rabbitmq_server-3.7.8/etc/rabbitmq目錄下。
進入/usr/local/rabbitmq_server-3.7.8/etc/rabbitmq目錄,生成rabbitmq.conf配置文件
cp rabbitmq.conf.example rabbitmq.conf
編輯rabbitmq.conf文件,打開loopback_users.guest = false注釋,以遍guest賬號可通過ip訪問rabbitmq頁面
至此,rabbitmq環境已安裝完畢,目前還是單機版本。
執行rabbitmq-server -detached啟動rabbitmq服務
執行rabbitmq-plugins enable rabbitmq_management開啟管理頁面
可在瀏覽器輸入:http://ip:15672,打開rabbitmq管理頁面
3、rabbitmq集群搭建
rabbitmq是基于Erlang的,而Erlang是天然支持分布式的,通過.erlang.cookie解決分布式問題,因此首先要保證各rabbitmq節點的.erlang.cookie的文件內容一致。
通過以下命令查找單機的.erlang.cookie文件所在目錄
find / -name ".erlang.cookie"
這個文件在我的目錄是/root/下。
將該文件分別拷貝至集群其他服務器,通過以下命令,會要求輸入目的服務器的密碼
scp /root/.erlang.cookie root@192.168.11.13 /root/? ? ? ? # 這里寫IP,也可通過hosts文件中配置的域名
其次,每臺服務器需要命名域名,且要把同一個集群下的所有服務器域名都配置。比如我這里用三臺服務器組成集群,其IP分別為:
192.168.11.12、192.168.11.13、192.168.11.14
那么在三臺服務器的/etc/hosts文件中均需增加以下內容:
192.168.11.12? ? mqnode1
192.168.11.13? ? mqnode2
192.168.11.14? ? mqnode3
同時需要查看三臺服務器的hostname,避免都是localhost,可通過uname -a命令查看
如果有存在localhost的情況,可通過hostname命令修改,修改的內容建議和/etc/hosts文件中配置的一致,比如需將192.168.11.12服務器的hostname修改為mqnode1,則通過以下命令:
hostname mqnode1
然后再通過uname -a命令查看,192.168.11.12服務器的hostname已經修改為mqnode1
至此,集群環境已配置好,接下來進行集群搭建
本文以mqnode1為主節點,mqnode2,mqnode3為從節點。三個節點均需執行以下命令啟動rabbitmq
rabbitmq-server -detached
關閉節點2、3app
rabbitmqctl stop_app
將接點2、3加入到節點1
rabbitmqctl join_cluster -- ram rabbit@mqnode1? ?# --ram 說明當前節點已內存模式運行
啟動節點2、3app
rabbitmqctl start_app
進入管理頁面,可以看到有三個節點,如下圖:
注意:當RabbitMQ安裝后,可以打開管理頁面,但登錄時報500錯誤,可查看rabbitmq安裝目錄的./var/rabbitmq/rabbit@node.log日志,若報以下錯誤:libcrypto.so.1.0.0: cannot open shared object file: No such file or directory,如圖
則需要查看當前服務器openssl版本,通過openssl version命令查看,我這里的版本是0.9.8,但這里要求1.0.0。因此需要升級openssl版本,升級方法可以參考:Linux下升級openssl