1. 程式人生 > >centos7 rabbitMQ叢集搭建

centos7 rabbitMQ叢集搭建

資料參考網址

http://blog.csdn.net/woogeyu/article/details/51119101
http://www.cnblogs.com/lion.net/p/5725474.html
https://segmentfault.com/a/1190000010693696#articleHeader4
https://segmentfault.com/a/1190000010702020

rabbitMQ叢集搭建注意問題

不同於單機多節點的情況,在多機環境,如果要在cluster叢集內部署多個節點,需要注意兩個方面:
  1  保證需要部署的這幾個節點在同一個區域網內
  2  需要有相同的Erlang Cookie,否則不能進行通訊,為保證cookie的完全一致,採用從一個節點copy的方式複製到其他節點。

時間同步:

yum install ntpdate
ntpdate time.nist.gov	

環境準備

192.168.138.131 centos-01
192.168.138.132 centos-02
192.168.138.133 centos-03

各節點都要安裝RabbitMQ(叢集前提) RabbitMQ 安裝需要依賴 Erlang 環境

    yum install wget
	$ cd /opt
	$ wget http://www.rabbitmq.com/releases/erlang/erlang-19.0.4-1.el7.centos.x86_64.rpm
	$ yum install erlang-19.0.4-1.el7.centos.x86_64.rpm

安裝 RabbitMQ

$ cd /opt
$ wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.10/rabbitmq-server-3.6.10-1.el7.noarch.rpm
$ yum install rabbitmq-server-3.6.10-1.el7.noarch.rpm
cd /sbin/
rabbitmq-plugins enable rabbitmq_management  (管理介面開啟)
rabbitmq-server -detached (後臺啟動)或者 service rabbitmq-server start
service rabbitmq-server status
rabbitmqctl stop	

放開5672與15672埠

firewall-cmd --permanent --zone=public --add-port=5672/tcp
firewall-cmd --permanent --zone=public --add-port=15672/tcp
systemctl restart firewalld.service	 

訪問http://ip:15672/ 賬戶:guest 密碼: guest登陸不進去解決

cd  /var/log/rabbitmq/ 
less [email protected]
這裡顯示的是沒有找到配置檔案,我們可以自己建立這個檔案
config file(s) : /etc/rabbitmq/rabbitmq.config (not found)
建立rabbitmq.config
cd /etc/rabbitmq/
touch rabbitmq.config
vi rabbitmq.config
編輯內容如下:
[{rabbit, [{loopback_users, []}]}].
注意:這裡的意思是開放使用,rabbitmq預設建立的使用者guest,密碼也是guest,這個使用者預設只能是本機訪問,localhost或者127.0.0.1,從外部訪問需要新增上面的配置。

開機自啟動

chkconfig rabbitmq-server on

設定不同節點間同一認證的Erlang Cookie 使用以下命令將centos-01中的/var/lib/rabbitmq/.erlang.cookie 複製到其他節點。在centos-01節點執行以下命令:

cd /var/lib/rabbitmq/
ll -a .erlang.cookie  (該檔案是隱藏檔案)
scp /var/lib/rabbitmq/.erlang.cookie  [email protected]:/var/lib/rabbitmq/.erlang.cookie 
scp /var/lib/rabbitmq/.erlang.cookie  [email protected]:/var/lib/rabbitmq/.erlang.cookie 
會提示輸入yes 和 密碼

由於檔案是400的許可權,所以在centos-02以及centos-03節點執行以下命令:
chmod 600  /var/lib/rabbitmq/.erlang.cookie 	

介面

在centos-01節點增加使用者,並且為使用者賦予許可權
rabbitmqctl add_user pyps pyps
rabbitmqctl set_user_tags pyps administrator
rabbitmqctl set_permissions -p /  pyps '.*' '.*' '.*'
通過http://192.168.138.131:15672 使用者名稱為:pyps 密碼為:pyps聯入第一臺配置成功的RabbitMQ伺服器。其他節點暫不配置	

組成叢集

這個centos-01節點也可以不執行,直接在節點伺服器執行下邊的指令碼,不過得保證這個rabbitmq服務是正常啟動的
	centos-01 $ rabbitmqctl stop_app	

按照順序執行 先centos-02,centos-03
centos-02 $ rabbitmqctl stop_app            				# 停止rabbitmq服務
centos-02 $ rabbitmqctl join_cluster [email protected]    		# centos-02和centos-01構成叢集, centos-02必須能通過centos-01的主機名ping通
centos-02 $ rabbitmqctl start_app            				# 開啟rabbitmq服務
	  
centos-03 $ rabbitmqctl stop_app            				# 停止rabbitmq服務
centos-03 $ rabbitmqctl join_cluster [email protected]   		 # centos-03和centos-01構成叢集, centos-02必須能通過centos-01的主機名ping通
centos-03 $ rabbitmqctl start_app   

#要複製佇列內容到叢集裡的每個節點,需要建立映象佇列
	RabbitMQ映象功能:(在普通叢集的中任意節點啟用策略,策略會自動同步到叢集節點)
	rabbitmqctl set_policy -p hrsystem ha-allqueue"^" '{"ha-mode":"all"}'
	例如下面的命令,^message 這個規則要根據自己修改,這個是指同步"message"開頭的佇列名稱,我們配置時使用的應用於所有佇列,所以表示式為"^"。
	rabbitmqctl set_policy -p hrsystem ha-allqueue "^message" '{"ha-mode":"all"}'

分別檢視下每個節點

rabbitmqctl cluster_status
每個節點
firewall-cmd --permanent --zone=public --add-port=25672/tcp
systemctl restart firewalld.service
或者關閉防火牆
systemctl stop firewalld.service

安裝HAProxy

選擇開源的HAProxy為RabbitMQ叢集做負載均衡器,在CentOS 7.0中安裝HAProxy。
	1安裝epel(清華大學開源軟體映象站)
	 rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/epel/6/x86_64/epel-release-6-8.noarch.rpm

	2 安裝HAProxy
	yum list |grep haproxy
	yum -y install haproxy.x86_64 

	HA-Proxy version 1.5.18 
3 配置HAProxy(這臺機器centos-03 192.168.138.133)
	cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak (備份)
	vi /etc/haproxy/haproxy.cfg	
	####################################################################
listen private_monitoring 
    bind 192.168.138.133:8989           
    mode http
    option  httplog
    log  global
    stats enable
    stats refresh 30s 
    stats show-node		 
    stats uri /haproxy?stats    
    stats realm Haproxy\ Statistics
    stats auth admin:admin            
####################################################################
listen  rabbitmq_local_cluster 
    bind 192.168.138.133:5670
    option tcplog
    mode tcp
    timeout client  3h
    timeout server  3h
    option  clitcpka
    balance roundrobin     
    server rabbit131 192.168.138.131:5672 check inter 5s rise 2 fall 3
    server rabbit132 192.168.138.132:5672 check inter 5s rise 2 fall 3
    server rabbit133 192.168.138.133:5672 check inter 5s rise 2 fall 3



啟動訪問http://192.168.138.133:8989/haproxy?stats無顯示頁面 解決辦法
 (當前版本HA-Proxy version 1.5.18) 低於1.7.5版本需要執行
 vi /etc/sysconfig/selinux 
	SELINUX=disabled
    :wq! #儲存退出
	reboot

放開5670與8989埠

firewall-cmd --permanent --zone=public --add-port=5670/tcp
firewall-cmd --permanent --zone=public --add-port=8989/tcp
firewall-cmd --permanent --zone=public --list-ports
systemctl restart firewalld.service	

service haproxy status #檢視狀態
service haproxy start #啟動
service haproxy stop  #關閉
service haproxy restart  #重啟
chkconfig haproxy on  #設定開機啟動	

各節點 啟用stomp plugin命令程式碼 websocket使用了rabbitmq stomp協議 需要啟動他

rabbitmq-plugins enable rabbitmq_web_stomp  
rabbitmq-plugins enable rabbitmq_web_stomp_examples