rabbitmq叢集搭建高可用+負載均衡

一。 環境準備

1)關閉所有主機防火牆

[root@localhost ~]# systemctl stop firewalld

1。)修改主機名

[root@localhost ~]# hostnamectl set-hostname uat_rabbit1[root@localhost ~]# hostnamectl set-hostname uat_rabbit2[root@localhost ~]# hostnamectl set-hostname uat_rabbit3

2。)修改hosts檔案

[root@uat_rabbit1 ~]# cat >> /etc/hosts <

3。)準備目錄

[root@uat_rabbit1 ~]# mkdir -pv /data/log/rabbitmq[root@uat_rabbit1 ~]# mkdir -pv /data/rabbitmq/{mnes,mnesia}[root@uat_rabbit1 ~]# chmod -R 777 /data/rabbitmq/[root@uat_rabbit1 ~]# chmod -R 777 /data/log/

二、rabbitmq安裝【三節點都執行】

1

。 透過指令碼設定安裝新增【二選一】

#完成erlang、RabbitMQ的前置條件配置#https://packagecloud。io/rabbitmq/erlang/install#bash-rpm[root@uat_rabbit1 ~]# curl -s https://packagecloud。io/install/repositories/rabbitmq/erlang/script。rpm。sh | sudo bash [root@uat_rabbit1 ~]# curl -s https://packagecloud。io/install/repositories/rabbitmq/rabbitmq-server/script。rpm。sh | sudo bash

2

。 手動設定安裝源【二選一】

[root@uat_rabbit1 ~]# cat >> /etc/yum。repos。d/rabbitmq_erlang。repo << EOF[rabbitmq_erlang]name=rabbitmq_erlangbaseurl=https://packagecloud。io/rabbitmq/erlang/el/7/$basearchrepo_gpgcheck=1gpgcheck=0enabled=1gpgkey=https://packagecloud。io/rabbitmq/erlang/gpgkeysslverify=1sslcacert=/etc/pki/tls/certs/ca-bundle。crtmetadata_expire=300[rabbitmq_erlang-source]name=rabbitmq_erlang-sourcebaseurl=https://packagecloud。io/rabbitmq/erlang/el/7/SRPMSrepo_gpgcheck=1gpgcheck=0enabled=1gpgkey=https://packagecloud。io/rabbitmq/erlang/gpgkeysslverify=1sslcacert=/etc/pki/tls/certs/ca-bundle。crtmetadata_expire=300EOF[root@uat_rabbit1 ~]# cat >> /etc/yum。repos。d/rabbitmq。repo << EOF[bintray-rabbitmq-server]name=bintray-rabbitmq-rpmbaseurl=https://dl。bintray。com/rabbitmq/rpm/rabbitmq-server/v3。8。x/el/7/gpgcheck=0repo_gpgcheck=0enabled=1EOF[root@uat_rabbit1 ~]# rpm ——import https://github。com/rabbitmq/signing-keys/releases/download/2。0/rabbitmq-release-signing-key。asc

3。 rabbitmq安裝

#安裝erlang並檢查版本號[root@uat_rabbit1 ~]# yum install erlang-23。3。4。5[root@uat_rabbit1 ~]# erl[root@uat_rabbit1 ~]# yum install rabbitmq-server-3。8。9 -y[root@uat_rabbit1 ~]# cat >> /etc/rabbitmq/rabbitmq-env。conf <

4。 管理介面安裝

#檢視外掛安裝情況[root@uat_rabbit1 ~]# rabbitmq-plugins list#啟用rabbitmq_management服務[root@uat_rabbit1 ~]# rabbitmq-plugins enable rabbitmq_managementhttp://192。168。10。210:15672/

5。 新增賬號設定許可權

[root@uat_rabbit1 ~]# rabbitmqctl add_user admin 123456[root@uat_rabbit1 ~]# rabbitmqctl set_user_tags admin administrator[root@uat_rabbit1 ~]# rabbitmqctl set_permissions -p / admin “。*” “。*” “。*”

三、叢集加入

1。 保證三個節點的erlang。cookie一致

[root@uat_rabbit1 ~]# scp /var/lib/rabbitmq/。erlang。cookie root@192。168。10。211:/var/lib/rabbitmq/。erlang。cookie[root@uat_rabbit2 ~]# chmod 400 /var/lib/rabbitmq/。erlang。cookie

2。 node2、node3加入叢集

[root@uat_rabbit2 ~]# systemctl restart rabbitmq-server[root@uat_rabbit2 ~]# rabbitmqctl stop_app[root@uat_rabbit2 ~]# rabbitmqctl join_cluster ——ram rabbit@uat_rabbit1[root@uat_rabbit2 ~]# rabbitmqctl start_app[root@uat_rabbit2 ~]# rabbitmqctl cluster_status

[root@uat_rabbit3 ~]# systemctl restart rabbitmq-server[root@uat_rabbit3 ~]# rabbitmqctl stop_app[root@uat_rabbit3 ~]# rabbitmqctl join_cluster ——ram rabbit@uat_rabbit1[root@uat_rabbit3 ~]# rabbitmqctl start_app[root@uat_rabbit3 ~]# rabbitmqctl cluster_status

(1)預設rabbitmq啟動後是磁碟節點,在這個cluster命令下,mq02和mq03是記憶體節點,mq01是磁碟節點。 (2)如果要使node2、node3都是磁碟節點,去掉–ram引數即可。 (3)如果想要更改節點型別,可以使用命令

rabbitmqctl change_cluster_node_type disc(ram)

,前提是必須停掉rabbit應用

(4)在RabbitMQ叢集叢集中,必須至少有一個磁碟節點,否則佇列元資料無法寫入到叢集中,當磁碟節點宕掉時,叢集將無法寫入新的佇列元資料資訊。

3。 設定映象叢集佇列高可用

#任意節點執行均可如下命令:將所有佇列設定為映象佇列,即佇列會被複制到各個節點,各個節點狀態保持一直;#可透過命令檢視:rabbitmqctl list_policies;#映象佇列相關解釋與設定&操作等請見:http://www。ywnds。com/?p=4741[root@uat_rabbit1 ~]# rabbitmqctl set_policy ha-all “^” ‘{“ha-mode”:“all”}’Setting policy “ha-all” for pattern “^” to “{”ha-mode“:”all“}” with priority “0” for vhost “/” 。。。[root@uat_rabbit1 ~]# rabbitmqctl list_policiesListing policies for vhost “/” 。。。vhost name pattern apply-to definition priority/ ha-all ^ all {“ha-mode”:“all”} 0

四、nginx反向代理rabbitmq做負載均衡

#nginx 安裝[root@uat_nginx ~]# mkdir -pv /var/log/nginx[root@uat_nginx ~]# chmod 755 /var/log/nginx[root@uat_nginx ~]# yum install epel-release[root@uat_nginx ~]# yum install gcc gcc-c++ make openssl-devel pcre-devel gd-devel crontabs iproute net-tools telnet curl logrotate[root@uat_nginx soft]# tar -zxvf nginx-1。18。0。tar。gz [root@uat_nginx soft]# cd nginx-1。18。0#必須開啟——with-stream,TCP代理[root@uat_nginx nginx-1。18。0]# 。/configure ——prefix=/usr/local/nginx ——with-http_ssl_module ——with-http_stub_status_module ——with-http_realip_module ——with-stream[root@uat_nginx nginx-1。18。0]# make -j 4 && make install[root@uat_nginx nginx-1。18。0]# cd /usr/local/nginx/conf[root@uat_nginx conf]# vim nginx。confuser nginx;worker_processes auto;error_log /var/log/nginx/error。log;pid /run/nginx。pid;events { worker_connections 1024;}http { log_format main ‘$remote_addr - $remote_user [$time_local] “$request” ’ ‘$status $body_bytes_sent “$http_referer” ’ ‘“$http_user_agent” “$http_x_forwarded_for”’; access_log /var/log/nginx/access。log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include mime。types; default_type application/octet-stream; #管理頁代理 upstream rabbitmqManage{ server 192。168。10。210:15672 max_fails=2 fail_timeout=3s weight=2; server 192。168。10。211:15672 max_fails=2 fail_timeout=3s weight=2; server 192。168。10。212:15672 max_fails=2 fail_timeout=3s weight=2; } server { listen 15672; location / { proxy_pass http://rabbitmqManage; } }}#rabbtmq TCP代理stream{ log_format proxy ‘$remote_addr [$time_local] ’ ‘$protocol $status $bytes_sent $bytes_received ’ ‘$session_time “$upstream_addr” ’ ‘“$upstream_bytes_sent” “$upstream_bytes_received” “$upstream_connect_time”’; access_log /var/log/nginx/tcp-access。log proxy ; open_log_file_cache off; upstream rabbitmq_pools{ server 192。168。10。210:5672 max_fails=2 fail_timeout=3s weight=2; server 192。168。10。211:5672 max_fails=2 fail_timeout=3s weight=2; server 192。168。10。212:5672 max_fails=2 fail_timeout=3s weight=2; } server { listen 5672; proxy_connect_timeout 3s; proxy_pass rabbitmq_pools; }}[root@uat_nginx ~]# /usr/local/nginx/sbin/nginx -t[root@uat_nginx ~]# /usr/local/nginx/sbin/nginx