1. 程式人生 > >安裝rabbitmq以及叢集配置

安裝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]

~]# scp otp_src_19.2.tar.gz [email protected]:/root

[[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