linux Haproxy+rabbitMQ 鏡像集羣安裝

rabbitMQ 安裝需要安裝erlang,erlang 需要 c++編譯處理。因此安裝步驟如下:

多說一句,爲了以後集羣方便知道 rabbitmq在那個主機,建議修改hostname。具體修改方法請參考其他網友解決方案

如:http://blog.csdn.net/yangshangwei/article/details/52878530

我分別給兩臺服務器修改了hostname, 修改後的ip和hostname 分別爲:

172.17.209.21 zqadmin

172.17.209.22 zaweb

下一步分別給兩臺主機分別安裝rabbitmq

一、c++ 安裝

yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC unixODBC-devel httpd python-simplejson
二、erlang 安裝

 1.下載erlang

wget http://erlang.org/download/otp_src_19.2.tar.gz
 2.解壓

tar -xzvf otp_src_19.2.tar.gz
 3.進入目錄

cd otp_src_19.2
 4.編譯erlang環境

  ./configure  --prefix=/usr/local/erlang --enable-smp-support  --enable-threads  --enable-sctp --enable-kernel-poll --enable-hipe  --with-ssl --without-javac
 參數說明:

–prefix 指定安裝目錄 
–enable-smp-support啓用對稱多處理支持(Symmetric Multi-Processing對稱多處理結構的簡稱)
–enable-threads啓用異步線程支持
–enable-sctp啓用流控制協議支持(Stream Control Transmission Protocol,流控制傳輸協議)
–enable-kernel-poll啓用Linux內核poll
–enable-hipe啓用高性能Erlang –with-ssl 啓用ssl包 –without-javac 不用java編譯
 5.編譯

make && make install 

到這就編譯完成

 6.配置erlang環境變量

6.1  vim /etc/profile
6.2 在文件末尾添加:export PATH=/usr/local/erlang/bin:$PATH
6.3 是環境變量生效:source /etc/profile
6.4 檢驗是否安裝完成:在 erlang 目錄執行 erl

 出現上圖結果、則表明已安裝完成。然後 ctrl+c 回車;a 退出即可。

三、rabbitmq安裝

 1、下載rabbitmq安裝包

wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.9/rabbitmq-server-generic-unix-3.6.9.tar.xz
 2、解壓縮

tar -xvf rabbitmq-server-generic-unix-3.6.9.tar.xz
3、將解壓後的文件放到 usr/local中,爲了方便 重命名爲 rabbitmq

 mv rabbitmq_server-3.6.9/ /usr/local/rabbitmq
4、配置環境變量
vim /etc/profile
文件最後加上
export PATH=/usr/local/rabbitmq/sbin:$PATH 
5、使環境變量生效

source /etc/profile
6、安裝管理插件

rabbitmq-plugins enable rabbitmq_management

7、啓動rabbitmq服務(-detached 爲後臺啓動)

./usr/local/rabbitmq/sbin/rabbitmq-server -detached

8、添加用戶權限(rabbitmq安裝完之後默認有guest賬號,如果在windows中可以用guest賬號登錄,密碼也是guest)

./usr/local/rabbitmq/sbin/rabbitmqctl add_user admin admin

9、添加權限(以下命令都需要再 rabbitmq目錄中 sbin中執行)

rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
10、修改用戶角色

rabbitmqctl set_user_tags admin administrator
此時如果服務器沒有防火牆就可以訪問啦 http://ip:15672(15672:爲默認http端口號,程序連接默認端口號爲 5672)。


有關 rabbitMQ 相關命令請移步:rabbitMQ ——windows安裝(rabbitmq之一)

按照以上步驟再安裝另外一臺rabbitmq,需要注意的是,如果有防火牆切記需要開啓訪問端口、否則無法訪問了

四、修改hosts文件,同步.erlang.cookie,將rabbitmq服務器的ip hostname分別添加到各個主機中,比如我的:

 1、用vi /ect/hosts hosts文件

  在172.17.209.21

  172.17.209.21 zqadmin
   172.17.209.22 zqweb
 在172.17.209.22 中

 172.17.209.22 zqweb
 172.17.209.21 zqadmin
2、同步.erlang.cooke文件(rabbitmq集羣之前使用cookie互通),將任一一臺服務器的cookie文件拷貝到其他服務器中
 2-1.我將zqadmin中的cookie拷貝到zqweb中(如有多臺,全部複製即可)
 2-2. cookie文件所在目錄
 如果是通過源安裝rabbitmq,此文件在 /var/lib/rabbitmq/.erlang.cookie
如果通過源碼安裝,此文件在 $HOME/.erlang.cookie (隱藏文件,我用root安裝所以在 /root/.erlang.cookie)
 2-3.將被覆蓋服務器中的.erlang.cookie文件設置權限爲 777

  chmod 777 .erlang.cookie

2-4.拷貝文件

   scp-P 5898  .erlang.cookie  root@zqweb:/root/.erlang.cookie

   然後輸入服務器密碼即可,標紅是因爲我把服務器ssh端口號改爲5898了。如果還是默認22,去掉即可。

2-5.恢復文件權限(源文件權限爲400)

 chmod 400 .erlang.cookie

2-6.查看服務器所有 .erlang.cookie文件內容、以確保所有服務器的文件統一


五、rabbitmq集羣設置

 1、先查看一下各服務器rabbitmq狀態

 rabbitmqctl status

2、如果已啓動?停止重啓:啓動

 停止:rabbtimqctl stop

 啓動:rabbitmq-service -detached(後臺啓動)

 查看狀態:rabbitmqctl status

3、集羣配置 命令 join_cluster(集羣配置中,需要至少有一個節點爲磁盤節點也就是將數據存儲在磁盤,rabbitmq默認磁盤節點)

 3-1、rabbitmq-service啓動rabbitmq會啓動節點和應用,要配置集羣需要將應用停掉

 3-2、選一個rabbitmq作爲cluster

  然後再其他rabbitmq中使用:rabbitmqctl stop_app 此命令只會停應用、不停節點。

  我這就兩臺。我選擇zqadmin作爲主cluster,zqweb加入到zqadmin中。

 3-3、在zqweb中執行:(使用 join_cluster --ram 把zqweb作爲內存節點,也就是存在內存中)

  

  3-4、查看內存節點狀態(任意機器都可以)

 

 看見看到 nodes中 disc(磁盤節點)的 rabbit@zqadmin 以及 ram(內存節點)的 rabbit@zqweb

  同時也可以在web 管理端查看,如下:


  3-5、鏡像策略配置

  a).rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

   設置各個節點的所有狀態全部一致

  b).也可以在頁面端設置 admin-policies 中設置

到此rabbitMQ的鏡像安裝完成了。下一步安裝haproxy

六、haproxy負載均衡安裝。

本文采用安裝包的方式安裝。

1.下載安裝包:

地址HA下載,我下載的是:1.7.9版本。

2.解壓壓縮包:

tar -zxvf haproxy-1.7.9.tar.gz;進入HA文件夾:cd haproxy/

3.安裝:

make TARGET=linux26 ARCH=x86_64 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy

參數說明
TARGET=linux26 #內核版本,使用uname -r查看內核,如:2.6.32-431.23.3.el6.x86_64,此時該參數就爲linux26;kernel 大於2.6.28的用:TARGET=linux2628
ARCH=x86_64 #系統位數
PREFIX=/usr/local/haprpxy #/usr/local/haprpxy爲haprpxy安裝路徑

最終安裝完的目錄結構爲:


4.編寫配置文件

在haproxy 中創建一個文件夾 conf 在conf中創建haproxy.cfg配置文件

haproxy.cfg文件內容爲:

###########全局配置#########
global
    log 127.0.0.1 local0 #[日誌輸出配置,所有日誌都記錄在本機,通過local0輸出]
    chroot /usr/local/haproxy     # 改變當前工作目錄
    pidfile  /var/run/haproxy.pid   # haproxy的pid存放路徑,啓動進程的用戶必須有權限訪問此文件 
    maxconn  4000                   # 最大連接數,默認4000
    daemon                          # 創建1個進程進入deamon模式運行。此參數要求將運行模式設置爲"daemon




###########默認配置#########
defaults
    log     127.0.0.1       local3		#日誌文件的輸出定向
    mode    http                                # 默認的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK
    option  httplog                             # 採用http日誌格式
    option  dontlognull                         # 啓用該項,日誌中將不會記錄空連接。所謂空連接就是在上游的負載均衡器
                                                # 或者監控系統爲了探測該 服務是否存活可用時,需要定期的連接或者獲取某
                                                # 一固定的組件或頁面,或者探測掃描端口是否在監聽或開放等動作被稱爲空連接;
                                                # 官方文檔中標註,如果該服務上游沒有其他的負載均衡器的話,建議不要使用
                                                # 該參數,因爲互聯網上的惡意掃描或其他動作就不會被記錄下來
   
  
    option  httpclose       # 每次請求完畢後主動關閉http通道 
    #option  forwardfor      # 如果後端服務器需要獲得客戶端真實ip需要配置的參數,可以從Http Header中獲得客戶端ip  
    option  redispatch      # serverId對應的服務器掛掉後,強制定向到其他健康的服務器
    timeout connect 5000                    # 連接超時時間
    timeout client  50000                   # 客戶端連接超時時間
    timeout server  50000                   # 服務器端連接超時時間
    timeout connect 10000   # default 10 second timeout if a backend is not found
    maxconn     60000       # 最大連接數
    retries     3           # 3次連接失敗就認爲服務不可用,也可以通過後面設置 
####################################################################
listen http_front
        bind 0.0.0.0:1080           #監聽端口  
        stats refresh 30s           #統計頁面自動刷新時間  
        stats uri /haproxy?stats            #統計頁面url  
        stats realm Haproxy Manager #統計頁面密碼框上提示文本  
        stats auth admin:admin      #統計頁面用戶名和密碼設置  
        #stats hide-version         #隱藏統計頁面上HAProxy的版本信息




######################RabbitMQ監控##############################################
listen rabbitmq_cluster 
    bind 0.0.0.0:8100
    option tcplog
    mode tcp
    timeout client  3h
    timeout server  3h
    option          clitcpka
    balance roundrobin      #負載均衡算法(#banlance roundrobin 輪詢,balance source 保存session值,支持static-rr,leastconn,first,uri等參數)
    #balance url_param userid
    #balance url_param session_id check_post 64
    #balance hdr(User-Agent)
    #balance hdr(host)
    #balance hdr(Host) use_domain_only
    #balance rdp-cookie
    #balance leastconn
    #balance source //ip
    server   zqadmin 172.17.209.21:5672 check inter 5s rise 2 fall 3   #check inter 2000 是檢測心跳頻率,rise 2是2次正確認爲服務器可用,fall 3是3次失敗認爲服務器不可用
    server   zqweb 172.17.209.22:5672 check inter 5s rise 2 fall 3
5、日誌設置

5-1、修改系統日誌配置文件

 vim  /etc/sysconfig/rsyslog

 修改爲:將#SYSLOGD_OPTIONS="-c 5" 修改爲:SYSLOGD_OPTIONS="-c 2 -r -m 0"


5-2、增加日誌設備

  vi /etc/rsyslog.conf 

 在最下面添加:

 

5-3、重啓rsyslog

service rsyslog restart

6、開機啓動

 創建腳本:vim /etc/rc.d/init.d/haproxy,內容爲:

#! /bin/sh
# chkconfig: 2345 10 90 
# description: myservice ....
set -e


PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/haproxy/sbin
PROGDIR=/usr/local/haproxy
PROGNAME=haproxy
DAEMON=$PROGDIR/sbin/$PROGNAME
CONFIG=$PROGDIR/conf/$PROGNAME.cfg
PIDFILE=/var/run/$PROGNAME.pid
DESC="HAProxy daemon"
SCRIPTNAME=/etc/init.d/$PROGNAME


# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0


start()
{
       echo -n "Starting $DESC: $PROGNAME"
       $DAEMON -f $CONFIG
       echo "."
}


stop()
{
       echo -n "Stopping $DESC: $PROGNAME"
       haproxy_pid=cat $PIDFILE
       kill $haproxy_pid
       echo "."
}


restart()
{
       echo -n "Restarting $DESC: $PROGNAME"
       $DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE)
       echo "."
}


case "$1" in
 start)
       start
       ;;
 stop)
       stop
       ;;
 restart)
       restart
       ;;
 *)
       echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
       exit 1
       ;;
esac
exit 0

賦予執行權限: chmod +x /etc/rc.d/init.d/haproxy

添加開機啓動:chkconfig --add haproxy

注:腳本第2/3 行用於開機啓動、否則回報錯誤,如下:


第二行告訴chkconfig缺省啓動的運行級以及啓動和停止的優先級。如果某服務缺省不在任何運行級啓動,那麼使用 - 代替運行級。

第二行對服務進行描述,可以用\ 跨行註釋。

其中2345是默認啓動級別,級別有0-6共7個級別。
  等級0表示:表示關機   
  等級1表示:單用戶模式   
  等級2表示:無網絡連接的多用戶命令行模式   
  等級3表示:有網絡連接的多用戶命令行模式   
  等級4表示:不可用   
  等級5表示:帶圖形界面的多用戶模式   
  等級6表示:重新啓動
10是啓動優先級,90是停止優先級,優先級範圍是0-100,數字越大,優先級越低。

特別注意的是:服務腳本必須存放在/etc/ini.d/目錄下

參考文獻:

https://www.cnblogs.com/lion.net/p/5725474.html

http://www.linuxidc.com/Linux/2016-10/136492.htm

http://blog.51cto.com/johnsz/715922
 http://www.mamicode.com/info-detail-1425092.html

到此HA+RMQ就基本完成了。稍後再做一下RMQ開機啓動。







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章