安裝rabbitmq以及叢集配置
前言:
(一些有用沒用的嘮叨,反正看了也不少肉,跳過也沒啥)
情況是這樣的:虛擬機器、CentOS 6.5、免編譯包安裝rabbitmq叢集,可不用連外網。
我原計劃是安裝在虛擬機器上wyt1/wyt2/wyt3/wyt4,後來實際用了兩個節點,其實多增加節點的方法是一樣的,就先不弄那麼多啦。
截圖下面
不同的OS或者安裝方式自己琢磨看,然後注意下箭頭的兩個part
這兩個part也要看,因為我就是沒看erlang的版本導致一開始失敗的,官網寫著執行rabbitmq需要erlang的最小版
本是R16B03,如果非要用舊版本的erlang,那麼用rabbitmq3.5版本的,這個可以用R13B03,並且如果是叢集的
模式,要保證節點用的erlang的版本一致。
(0)安裝依賴包:
每個節點都要裝,反正各個節點命令敲一次,雖然包有點多,要是嫌煩我就不知道怎麼辦了,可能需要先去治治懶
tk、tcl、unixODBC、ncurses*、gcc* make ncurses-devel libxslt xsltproc unzip xmlto zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel 我沒有找到libpcap-devel,只裝了libpcap
# yum -y install libxslt-1.1.26-2.el6_3.1.x86_64.rpm
# yum -y install xmlto-0.0.23-3.el6.x86_64.rpm
上面這兩個是單獨裝的,因為直接
# yum install -y libxslt* xmlto* 報錯
xmlto是rabbitmq編譯安裝時用
ODBC是erlang用的
(1)安裝ERLANG
1.1)下載erlang安裝包
首先,因為RabbitMQ由ERLANG實現,下載ERLANG 原始碼。
1.2)將安裝包scp到別的節點
[[email protected]
[[email protected] ~]# scp otp_src_19.2.tar.gz [email protected]:/root
[[email protected] ~]# scp otp_src_19.2.tar.gz [email protected]:/root
1.3)安裝erlang
每個節點:
# mkdir -p /usr/local/erlang
# tar -zxvf otp_src_19.2.tar.gz
# cd otp_src_19.2
# ./configure --prefix=/usr/local/erlang
# make
# make install
在 ./configure之後可能
報下面的東西(以wyt1為例)
[[email protected] otp_src_19.2]# ./configure --prefix=/usr/local/erlang
*********************************************************************
********************** APPLICATIONS INFORMATION *******************
*********************************************************************
wx : wxWidgets not found, wx will NOT be usable
*********************************************************************
*********************************************************************
********************** DOCUMENTATION INFORMATION ******************
*********************************************************************
documentation :
fop is missing.
Using fakefop to generate placeholder PDF files.
*********************************************************************
之後發現這個沒有影響,就是一些document巴拉巴拉的,詳見下面這篇blog,感謝博主!
反正沒裝那個wxWidgets庫也能裝好erlang,如果你是強迫症處女座,非要安裝,就看這個連結:http://www.tuicool.com/articles/iIruqyA (感謝網路爬蟲,更感謝博主)
1.4)新增erlang環境變數(4臺都做,下面以wyt1為例)
[[email protected] bin]# vim /etc/profile
ERLANG=/usr/local/erlang
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$GOROOT/bin:$ZOOKEEPER_HOME/bin:$GOPATH/bin:$GIT/bin:$MYSQL/bin:$MYSQL/lib:$ERLANG/bin
export GOROOT GOPATH JAVA_HOME JRE_HOME CLASSPATH PATH ZOOKEEPER_HOME GIT MYSQL MYCAT_HOME ERLANG
[[email protected] bin]# source /etc/profile
[[email protected] bin]# which erl
/usr/local/erlang/bin/erl
1.5)測試erlang(下面以wyt1為例)
[[email protected] ~]# erl
Erlang/OTP 19 [erts-8.2] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V8.2 (abort with ^G)
1> io:format("hello world ~n").
hello world --------安裝成功
ok
2> ---------------注意,這個地方是按快捷鍵Ctrl+C,然後選a就退出來了
BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
(v)ersion (k)ill (D)b-tables (d)istribution
a
[[email protected] ~]#
(2)安裝 python
CentOS 6.5的自帶python是2.6.6,
檢視python版本
# python -V
Python 2.6.6
用2.6以上的版本就不用安裝SampleJson,否則要安裝,
安裝samplejson方法(我之所以安裝是因為一開始不知道可以不用安裝,,,丟擲安裝方法拯救低版本的python,以wyt1為例)
[[email protected] ~]# cd simplejson-3.10.0
[[email protected] simplejson-3.10.0]# python setup.py install
(3)安裝 rabbitmq-server(無特殊指定步驟,下面的步驟每個節點都要進行)
3.1)下載二進位制免編譯的包
下載地址:http://www.rabbitmq.com/install-generic-unix.html
3.2)安裝
上傳安裝包到每臺虛擬機器
# tar -vxJf rabbitmq-server-generic-unix-3.6.6.tar.xz -C /usr/local/
# cd /usr/local/
# mv rabbitmq_server-3.6.6 rabbitmq
3.3)基本配置
上面內容大致的意思是可以自定義rabbitmq環境的環境變數,
位置和檔案是$RABBITMQ_HOME/etc/rabbitmq/rabbitmq-env.conf,
服務的元件也要配置,位置在$RABBITMQ_HOME/etc/rabbitmq/rabbitmq.config
並且這兩個檔案在安裝都不存在,需要自己建立。
3.3.1) 首先在profile中加入$RABBITMQ_HOME
# vim /etc/profile
# source /etc/profile
# tail /etc/profile
JRE_HOME=/usr/local/java/jdk/jre
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
ZOOKEEPER_HOME=/usr/local/zookeeper
GIT=/usr/local/git
MYSQL=/usr/local/mysql
ERLANG=/usr/local/erlang
RABBITMQ_HOME=/usr/local/rabbitmq
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$GOROOT/bin:$ZOOKEEPER_HOME/bin:$GOPATH/bin:$GIT/bin:$MYSQL/bin:$MYSQL/lib:$ERLANG/bin:$PYTHON/bin:$RABBITMQ_HOME/sbin
export GOROOT GOPATH JAVA_HOME JRE_HOME CLASSPATH PATH ZOOKEEPER_HOME GIT MYSQL MYCAT_HOME ERLANG RABBITMQ_HOME
3.3.2)建立兩個相應的檔案
# cd /usr/local/rabbitmq/etc/rabbitmq
# touch rabbitmq-env.conf
# touch rabbitmq.config
3.3.3)修改config檔案,加入下面的鍵值對,為了用web頁面管理rabbitmq時可以用guest通過非localhost登入
# vim rabbitmq.config
# cat rabbitmq.config
[{rabbit, [{loopback_users, []}]}].
3.4)修改使用者資源限制(啟動之前)
# ulimit -S -n
1024
# ulimit -S -n 4096
# ulimit -S -n
4096
3.5)檢查端口占用,保證下述埠沒有被用
(4)使用rabbitmq
4.1)啟動wyt1節點 ,先測試一下是否安裝成功,也是為了在$HOME下生成之後叢集用的 .erlang.cookie 檔案
[[email protected] ~]# cd /usr/local/rabbitmq/sbin
[[email protected] sbin]# ./rabbitmq-server start
RabbitMQ 3.6.6. Copyright (C) 2007-2016 Pivotal Software, Inc.
## ##
########## Logs: /usr/local/rabbitmq/var/log/rabbitmq/[email protected]
###### ## /usr/local/rabbitmq/var/log/rabbitmq/[email protected]
##########
Starting broker...
completed with 0 plugins.
[[email protected] ~]#
可以看到成功啟動後會生成log檔案和路徑 /usr/local/rabbitmq/var/log/rabbitmq/[email protected]
服務的埠也相應起來
4.2)啟用web管理外掛
[[email protected] sbin]$ ./rabbitmq-plugins list-----檢視一下啟動前的
[[email protected] sbin]$ ./rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
mochiweb
webmachine
rabbitmq_web_dispatch
amqp_client
rabbitmq_management_agent
rabbitmq_management
Applying plugin configuration to [email protected] started 6 plugins.
[[email protected] sbin]$ ./rabbitmq-plugins list-----啟動後再看一下
4.3)登入web管理介面
瀏覽器:http://192.168.6.11:15672
使用者:guest 密碼:guest
4.4)停止
[[email protected] sbin]$ ./rabbitmqctl stop
Stopping and halting node [email protected] ...
Gracefully halting Erlang VM
[[email protected] sbin]$
(5)rabbitmq叢集設定(我這裡只用wyt1和wyt2兩個節點,加上其餘的節點方法是一樣的)
5.1)確認一下hosts解析是否配好
(截圖wyt2為例),因為叢集的通訊是靠hostname的
官網解釋:
5.2)配置叢集前要保證參與叢集的node是能夠單點啟動的,所以先驗證一下wyt2節點是不是能夠啟動
[[email protected] sbin]# ./rabbitmq-server start
[[email protected] sbin]# ./rabbitmq-plugins enable rabbitmq_management
[[email protected] sbin]# ./rabbitmqctl stop
5.3)保證每個節點的.erlang.cookie檔案一致。
剛才wyt1節點啟動後會在root家目錄生成.erlang.cookie檔案,將這個檔案scp到別的節點root的家目錄下
5.3.1)刪掉wyt2節點的cookie檔案
[[email protected] ~]# rm -rf .erlang.cookie
5.3.2)將節點一的拷貝過去,也可以在wyt2節點啟動之前就將wyt1節點的cookie檔案放過去
[[email protected] ~]# scp .erlang.cookie [email protected]:/root
注意:這個檔案的許可權是400,我直接將wyt2節點啟動後的.erlang.cookie檔案刪了,如果想要修改,需要chmod 600 .erlang.cookie,修改之後還要再改回400許可權chmod 400 .erlang.cookie
5.4)將節點1和2放到後臺啟動:
[[email protected] sbin]# ./rabbitmq-server -detached
[[email protected] sbin]# ./rabbitmq-server –detached
詳見官網是以三個節點為例:
啟動時可以實時看到log檔案的記錄(我是習慣性的看看,萬一 有ERROR什麼的):
下面簡要取wyt2的日誌的內容
=INFO REPORT==== 8-Feb-2017::18:55:56 ===
Starting RabbitMQ 3.6.6 on Erlang 19.2
Copyright (C) 2007-2016 Pivotal Software, Inc.
=INFO REPORT==== 8-Feb-2017::18:55:56 ===
node : [email protected]
home dir : /root
config file(s) : /usr/local/rabbitmq/etc/rabbitmq/rabbitmq.config
cookie hash : iBUGZ1/RD/8OxjPAPuyi2Q==
log : /usr/local/rabbitmq/var/log/rabbitmq/[email protected]
sasl log : /usr/local/rabbitmq/var/log/rabbitmq/[email protected]
database dir : /usr/local/rabbitmq/var/lib/rabbitmq/mnesia/[email protected]
可以看一下狀態
5.5)叢集配置
5.5.1)加入叢集前檢視一下每個節點的叢集狀態,這個時候只有自己節點
[[email protected] sbin]# ./rabbitmqctl cluster_status
Cluster status of node [email protected] ...
[{nodes,[{disc,[[email protected]]}]},
{running_nodes,[[email protected]]},
{cluster_name,<<"[email protected]">>},
{partitions,[]},
{alarms,[{[email protected],[]}]}]
[[email protected] sbin]# ./rabbitmqctl cluster_status
Cluster status of node [email protected] ...
[{nodes,[{disc,[[email protected]]}]},
{running_nodes,[[email protected]]},
{cluster_name,<<"[email protected]">>},
{partitions,[]},
{alarms,[{[email protected],[]}]}]
5.5.2)將節點wyt2加入叢集
[[email protected] sbin]# ./rabbitmqctl stop_app (這裡是stop_app而不是直接關閉節點的stop)
Stopping node [email protected] ...
[[email protected] sbin]#
log日誌截圖
[[email protected] sbin]# ./rabbitmqctl join_cluster [email protected]
Clustering node [email protected] with [email protected] ...
[[email protected] sbin]#
log日誌截圖:
[[email protected] sbin]# ./rabbitmqctl start_app
Starting node [email protected] ...
RabbitMQ 3.6.6. Copyright (C) 2007-2016 Pivotal Software, Inc.
## ##
########## Logs: /usr/local/rabbitmq/var/log/rabbitmq/[email protected]
###### ## /usr/local/rabbitmq/var/log/rabbitmq/[email protected]
##########
Starting broker...
completed with 6 plugins.
[[email protected] sbin]#
5.5.3)檢視節點的叢集狀態
[[email protected] 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] 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],[]}]}]
可以看到管理介面是兩個節點了
詳見官網:
注:非root使用者的安裝唯一區別就是erlang和rabbitmq_home環境變數的位置改寫,文件要不要整理看我心情和時間。
[[email protected] ~]$ cat .bash_profile