威尼斯人线上娱乐

陆做负载均衡,RabbitMQ概念及条件搭建

7 4月 , 2019  

参考链接:

测试环境:VMS0078一 VMS007八二 VMS0038陆 (centos伍.8)
1.先在三台机械上个别安装RabbitMQ Server

目录

[TOC]

一、前言
线上的
RabbitMQ用的是单节点,前段时间由于机械内部存款和储蓄器不足,暴发了OOM,业务受到了震慑,故打算换成RabbitMQ集群。RabbitMQ情势有三种,分别是:单一格局、普通方式、镜像格局,镜像形式才是RabbitMQ真正的HA方案,关于更详细的简绍,请移步到官网:
,下边是关于RabbitMQ集群的配备进程:

 

2.读取中间1个节点的cookie,并复制到别的节点(节点间通过cookie明确互相是或不是可通讯)
双方之一均可:
sudo vim /var/lib/rabbitmq/.erlang.cookie
sudo vim $HOME/.erlang.cookie

一、基本概念

二、环境
erlang版本:
erlang-19.0.4-1.el7.CentOS.x86_64

整套手续和参考链接相同。

3.每一种运转节点
sudo service rabbitmq-server start

一.一、RabbitMQ集群概述

  通过 Erlang 的分布式个性(通过 magic cookie 认证节点)进行 RabbitMQ
集群,各 RabbitMQ
服务为对等节点,即种种节点都提供劳动给客户端连接,实行新闻发送与选拔。

  这么些节点通过 RabbitMQ HA
队列(镜像队列)进行音信队列结构复制。本方案中搭建
3个节点,并且都是磁盘节点(全数节点状态保持一致,节点完全对等),只要有其余3个节点能够工作,RabbitMQ
集群对外就能提供劳务。

rabbitmq版本:
rabbitmq-server-3.6.6

 

四.查看各节点中的RabbitMQ brokers
sudo rabbitmqctl cluster_status

一.2、软件负载均衡器HAProxy

  HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,援助虚拟主机,它是免费、飞速并且可信赖的壹种缓解方案。根据官方数据,其最高极限协助十G的出现。HAProxy帮忙从肆层至七层的网络沟通,即覆盖全部的TCP协议。正是说,Haproxy
甚至还协理 Mysql 的均匀负载。

  HAProxy的特点是:
  一、HAProxy是永葆虚拟主机的,,并能扶助上万级其他连日;
  贰、能够填补Nginx的有的缺陷比如Session的涵养,cookie的带领等工作;
  3、支持url检查评定后端的服务器出难点的检验会有很好的救助;
  4、它跟LVS一样,自己只是就只是1款负载均衡软件;单纯从效用上来讲HAProxy更会比Nginx有越来越美艳的负载均衡速度,在出现处理上也是特别减价Nginx的;
  伍、HAProxy能够对mysql读实行负荷均衡,对后端的MySQL节点开始展览检查评定和负载均衡,可是在后端的MySQL
slaves数量超过十台时品质不及LVS,所以笔者向大家推荐LVS+Keepalived;
  六、能够提供四层,7层代理。HAProxy支持三种首要的代办形式:”tcp”也即4层(大多用于邮件服务器、内部协议通讯服务器等),和柒层(HTTP)。在4层方式下,HAProxy仅在客户端和服务器之间转载双向流量,7层情势下,HAProxy会分析协议,并且能通过同意、拒绝、交换、扩展、修改恐怕去除请求
(request)恐怕回应(response)里钦定内容来控制协议,那种操作要依据特定规则;
  7、HAProxy的算法未来也进一步多了,具体有如下八种:
  
  一roundrobin,表示不难的轮询,这几个不多说,这一个是负载均衡基本都存有的;
     贰static-rr,表示依照权重,建议关心;
     三leastconn,表示最少连接者先处理,建议关切;
  
  肆source,表示根据请求源IP,那个跟Nginx的IP_hash机制类似,大家用其看成消除session难点的一种方法,提出关心;
     伍ri,表示依照请求的UMuranoI;
     ⑥rl_param,表示依照请求的U中华Vl参数’balance url_param’ requires an
URL parameter name;
     7hdr(name),表示依据HTTP请求头来锁定每三次HTTP请求;
  
  8rdp-cookie(name),表示依据据cookie(name)来锁定并哈希每3次TCP请求。

服务器主机名:
ip-17贰-3一-一三-11四  磁盘节点
ip-17贰-3一-1伍-12四 内存节点
ip-172-3一-1一-21陆 内部存储器节点

前8部都符合规律,在第八步会报错Error: unable to perform an operation on
node ‘rabbit一@ClusterNode一’,具体如下图:

5.建集群
分别在VMS00386、VMS00782 上执行
sudo rabbitmqctl stop_app
sudo rabbitmqctl join_cluster –ram rabbit@VMS00781
sudo rabbitmqctl start_app
sudo rabbitmqctl stop_app
sudo rabbitmqctl join_cluster rabbit@VMS00781
sudo rabbitmqctl start_app

2、RabbitMQ的陈设步骤

三、安装
1、erlang安装
a、wget

rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
b、rpm –import

c、Add the following lines to some file in /etc/yum.repos.d/:
[erlang-solutions]
name=Centos $releasever – $basearch – Erlang Solutions
baseurl=
gpgcheck=1
gpgkey=
enabled=1
d、yum install erlang esl-erlang

威尼斯人线上娱乐 1

6.排错
建集群进程中遇见如下错误:
sudo rabbitmqctl join_cluster –ram rabbit@VMS00386
Clustering node rabbit@VMS00782 with rabbit@VMS00386 …
Error: unable to connect to nodes [rabbit@VMS00386]: nodedown

2.1、安装 Erlang、RabbitMQ

  参考文章Ubuntu1四.04+RabbitMQ3.陆.3+Golang的一级实践

2、RabbitMQ 安装
a、 wget

b、tar -xvf rabbitmq-server-generic-unix-3.6.6.tar.xz
c、 mv rabbitmq_server-3.6.6 /data/rabbitmq
d、cd /data/rabbitmq/;./sbin/rabbitmq-server -detached

ping ClusterNode一结果正常:

DIAGNOSTICS

attempted to contact: [rabbit@VMS00386]
rabbit@VMS00386:
  * unable to connect to epmd (port 4369) on VMS00386: nxdomain
(non-existing domain)
current node details:

  • node name: ‘rabbitmqctl-8666@VMS00782’
  • home dir: /var/lib/rabbitmq
  • cookie hash: 50YO3zK+HJHos0tab1vHjg==
    消除之道:
    集群节点间需能相互走访,故各类集群节点的hosts文件应包涵集群内全体节点的音讯以管教相互解析
    vim /etc/hosts
    781’s IP   VMS00781
    782’s IP   VMS00782
    386’s IP   vms00386
    随后重启各节点中的rabbitmq

七.别的题材

cluster搭建起来后若在web管理工科具中rabbitmq_management的Overview的Nodes部分来看“Node statistics not
available”的消息,表达在该节点上web管理插件还未启用。

直接在体现提醒新闻的节点上运维sudo
rabbitmq-plugins enable rabbitmq_management即可。

Error: mnesia_unexpectedly_running
原因:忘记先截止stop_app
解决:sudo rabbitmqctl stop_app

若rabbitmq-server第1回开发银行后hostname不能够被解析也许产生了改动则会导致运营失利
需实施如下操作
sudo rm -rf /var/lib/rabbitmq/mnesia(因为有关新闻会记录在此数据库)
重装RabbitMQ Server

#####################################################
RabbitMQ cluster 管理
#####################################################
1.翻看集群状态
可个别在集群中逐一节点执行
sudo rabbitmqctl cluster_status

二.更改节点类型(内部存款和储蓄器型或磁盘型)
sudo rabbitmqctl stop_app
sudo rabbitmqctl change_cluster_node_type disc

sudo rabbitmqctl change_cluster_node_type ram
sudo rabbitmqctl start_app

3.重启cluster中的节点
悬停某些节点依然节点down掉剩余节点不受影响
[op1@vms00386 ~]$ sudo rabbitmqctl stop
Stopping and halting node rabbit@vms00386 …

[op1@VMS00781 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@VMS00781 …
[{nodes,[{disc,[rabbit@VMS00781,rabbit@VMS00782,rabbit@vms00386]}]},
 {running_nodes,[rabbit@VMS00782,rabbit@VMS00781]},
 {cluster_name,<<“rabbit@VMS00781”>>},
 {partitions,[]}]

[op1@VMS00782 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@VMS00782 …
[{nodes,[{disc,[陆做负载均衡,RabbitMQ概念及条件搭建。rabbit@VMS00781,rabbit@VMS00782,rabbit@vms00386]}]},
 {running_nodes,[rabbit@VMS00781,rabbit@VMS00782]},
 {cluster_name,<<“rabbit@VMS00781”>>},
 {partitions,[]}]

[op1@VMS00782 ~]$ sudo rabbitmqctl stop
Stopping and halting node rabbit@VMS00782 …

[op1@VMS00781 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@VMS00781 …
[{nodes,[{disc,[rabbit@VMS00781,rabbit@VMS00782,rabbit@vms00386]}]},
 {running_nodes,[rabbit@VMS00781]},
 {cluster_name,<<“rabbit@VMS00781”>>},
 {partitions,[]}]

待节点重启后活动追上其余节点
[op1@vms00386 ~]$ sudo service rabbitmq-server start
Starting rabbitmq-server: SUCCESS
rabbitmq-server.

[op1@VMS00781 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@VMS00781 …
[{nodes,[{disc,[rabbit@VMS00781,rabbit@VMS00782,rabbit@vms00386]}]},
 {running_nodes,[rabbit@vms00386,rabbit@VMS00781]},
 {cluster_name,<<“rabbit@VMS00781”>>},
 {partitions,[]}]

[op1@VMS00782 ~]$ sudo service rabbitmq-server start
Starting rabbitmq-server: SUCCESS
rabbitmq-server.

[op1@VMS00781 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@VMS00781 …
[{nodes,[{disc,[rabbit@VMS00781,rabbit@VMS00782,rabbit@vms00386]}]},
 {running_nodes,[rabbit@VMS00782,rabbit@vms00386,rabbit@VMS00781]},
 {cluster_name,<<“rabbit@VMS00781”>>},
 {partitions,[]}]

[op1@VMS00782 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@VMS00782 …
[{nodes,[{disc,[rabbit@VMS00781,rabbit@VMS00782,rabbit@vms00386]}]},
 {running_nodes,[rabbit@VMS00781,rabbit@vms00386,rabbit@VMS00782]},
 {cluster_name,<<“rabbit@VMS00781”>>},
 {partitions,[]}]

[op1@vms00386 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@vms00386 …
[{nodes,[{disc,[rabbit@VMS00781,rabbit@VMS00782,rabbit@vms00386]}]},
 {running_nodes,[rabbit@VMS00782,rabbit@VMS00781,rabbit@vms00386]},
 {cluster_name,<<“rabbit@VMS00781”>>},
 {partitions,[]}]

几点注意:
保障集群中至少有贰个磁盘类型的节点以免数据丢失,在改变节点类型时尤其要专注。
若一切集群被停掉了,应保险最终二个down掉的节点被第叁运转,若不能够则要运用forget_cluster_node命令将其移出集群
若集群中节点大约同时以不可控的措施down了此时在内部一个节点使用force_boot命令重启节点

4.从集群移除节点
[op1@vms00386 ~]$ sudo rabbitmqctl stop_app
Stopping node rabbit@vms00386 …
[op1@vms00386 ~]$ sudo rabbitmqctl reset
Resetting node rabbit@vms00386 …
[op1@vms00386 ~]$ sudo rabbitmqctl start_app
Starting node rabbit@vms00386 …

[op1@vms00386 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@vms00386 …
[{nodes,[{disc,[rabbit@vms00386]}]},
 {running_nodes,[rabbit@vms00386]},
 {cluster_name,<<“rabbit@vms00386”>>},
 {partitions,[]}]

[op1@VMS00781 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@VMS00781 …
[{nodes,[{disc,[rabbit@VMS00781,rabbit@VMS00782]}]},
 {running_nodes,[rabbit@VMS00782,rabbit@VMS00781]},
 {cluster_name,<<“rabbit@VMS00781”>>},
 {partitions,[]}]

[op1@VMS00782 威尼斯人线上娱乐,~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@VMS00782 …
[{nodes,[{disc,[rabbit@VMS00781,rabbit@VMS00782]}]},
 {running_nodes,[rabbit@VMS00781,rabbit@VMS00782]},
 {cluster_name,<<“rabbit@VMS00781”>>},
 {partitions,[]}]
可知rabbit@vms003八陆化为了单独的节点,原集群只剩rabbit@VMS007捌一,rabbit@VMS007八二了

也可在某些节点移除集群中别的节点
如延续在rabbit@VMS007八一上移除rabbit@VMS007八2
[op1@VMS00781 ~]$ sudo rabbitmqctl forget_cluster_node
rabbit@VMS00782
Removing node rabbit@VMS00782 from cluster …

[op1@VMS00781 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@VMS00781 …
[{nodes,[{disc,[rabbit@VMS00781]}]},
 {running_nodes,[rabbit@VMS00781]},
 {cluster_name,<<“rabbit@VMS00781”>>},
 {partitions,[]}]

看得出集群只剩rabbit@VMS007810个节点了

此地有个难题,在长距离别的节点中被移除的节点会自以为仍属于集群

[op1@VMS00782 ~]$ sudo rabbitmqctl start_app
Starting node rabbit@VMS00782 …

2.2、修改 /etc/hosts

  参预集群 三 个节点的呼应关系:

192.168.0.31 node1
192.168.0.32 node2
192.168.0.33 node3

四、配置
一、须求配置host,不然集群没用艺术成立,笔者那里用的aws的ec贰,用的私下认可主机名,这里就不改动了
二、拷贝.erlang.cookie,RabbitMQ集群正视erlang集群才能做事,所以要求先营造erlang集群,.erlang.cookie文件在起步用户的家目录下,笔者这边是用work用户运转的RabbitMQ,拷贝壹台服务器的/home/work/.erlang.cookie到其他机器并设置权限
chown work:work  /home/work/.erlang.cookie
chmod 400 /home/work/.erlang.cookie

威尼斯人线上娱乐 2

BOOT FAILED

Error description:
   {error,{inconsistent_cluster,”Node rabbit@VMS00782 thinks it’s
clustered with node rabbit@VMS00781, but rabbit@VMS00781 disagrees”}}
Log files (may contain more information):
   /var/log/rabbitmq/rabbit@VMS00782.log
   /var/log/rabbitmq/rabbit@VMS00782-sasl.log
Stack trace:
   [{rabbit_mnesia,check_cluster_consistency,0},
    {rabbit,’-start/0-fun-0-‘,0},
    {rabbit,start_it,1},
    {rpc,’-handle_call_call/6-fun-0-‘,5}]
Error: {rabbit,failure_during_boot,
           {error,
               {inconsistent_cluster,
                   “Node rabbit@VMS00782 thinks it’s clustered with node
rabbit@VMS00781, but rabbit@VMS00781 disagrees”}}}
亟需重置一下
[op1@VMS00782 ~]$ sudo rabbitmqctl reset
Resetting node rabbit@VMS00782 …
[op1@VMS00782 ~]$ sudo rabbitmqctl start_app
Starting node rabbit@VMS00782 …

这会儿四个节点均已化作独立的节点
内部rabbit@vms003捌陆、rabbit@VMS007捌二均被重置为了新的RabbitMQ
broker而rabbit@VMS007捌一还保留着原cluster的残留情状可透过如下步骤重置
[op1@VMS00781 ~]$ sudo rabbitmqctl stop_app
Stopping node rabbit@VMS00781 …
[op1@VMS00781 ~]$ sudo rabbitmqctl reset
Resetting node rabbit@VMS00781 …
[op1@VMS00781 ~]$ sudo rabbitmqctl start_app
Starting node rabbit@VMS00781 …

5.自动配置cluster
综上可得,那是因此安顿文件而非命令行工具进行的
率先重置各节点
[op1@VMS00781 ~]$ sudo rabbitmqctl stop_app
Stopping node rabbit@VMS00781 …
[op1@VMS00781 ~]$ sudo rabbitmqctl reset
Resetting node rabbit@VMS00781 …

说不上调整布置文件
[{rabbit,
  [{cluster_nodes, {[‘rabbit@VMS00781’, ‘rabbit@VMS00782’,
‘rabbit@vms00386’], disc}}]}].

后来运转各节点
[op1@VMS00781 ~]$ sudo service rabbitmq-server start
Starting rabbitmq-server: SUCCESS
rabbitmq-server.

翻看集群状态
[op1@VMS00781 ~]$ sudo rabbitmqctl cluster_status

几点注意:
任由通过命令行依然经过计划文件配置,请确认保障各节点上Erlang和RabbitMQ版本相同
布署文件仅对特别节点有效,也即被reset大概第3回运营的节点。由此在重启节点后自动化集群进度并不会发出。也觉得那通过rabbitmq进行的更改优先于自动化集群配置。

在一台机器上配置集群,一般用户测试集群性情
那里的显若是已今非昔比的端口可节点名称运维七个rabbitmq-server实例,别的进程同多机器上配置集群类似

任何注意事项:
如防火墙策略等

参考:

2.2、设置 Erlang Cookie

  RabbitMQ节点之间和下令行工具 (e.g.
rabbitmqctl)是应用Cookie互通的,Cookie是1组自由的数字+字母的字符串。当RabbitMQ服务器运转的时候,Erlang
VM会自动创立3个即兴内容的Cookie文件。假设是通过源安装RabbitMQ的话,Erlang
Cookie
文件在/var/lib/rabbitmq/.erlang.cookie。假使是经过源码安装的RabbitMQ,Erlang
Cookie文件$HOME/.erlang.cookie。

  本文演示的实例是用源码安装,由于这一个文件权限是 400,所以需求先修改
node贰、node三 中的该文件权限为 77七:

lion@node1:~$ chmod 777 .erlang.cookie

  然后将文件复制到node二、node三下面。

node2:

lion@node2:~$ chmod 777 .erlang.cookie
lion@node2:~$ scp -r node1:/home/lion/.erlang.cookie ~/
lion@node1's password:
.erlang.cookie                                                                                     100%   20     0.0KB/s   00:00

node3:

lion@node3:~$ chmod 777 .erlang.cookie
lion@node3:~$ scp -r node1:/home/lion/.erlang.cookie ~/
lion@node1's password:
.erlang.cookie                                                                                     100%   20     0.0KB/s   00:00

  分别在node一、node贰、node3将权力恢复生机过来:

lion@node1:~$ chmod 400 .erlang.cookie

  最终分别在确认三台机械上的.erlang.cookie的值是同样的

lion@node1:~$ cat .erlang.cookie
VORMVSAAOFOFEQKTNWBA

lion@node2:~$ cat .erlang.cookie
VORMVSAAOFOFEQKTNWBA

lion@node3:~$ cat .erlang.cookie
VORMVSAAOFOFEQKTNWBA

3、设置集群的形式:镜像
rabbitmqctl set_policy ha-all “^” ‘{“ha-mode”:”all”}’

rabbitmqctl-ClusterNode一.bat运作命令基本都会报与stop_app相同的错误。

2.3、使用detached参数,在后台运维Rabbit Node

  要先截至现有的Rabbitmq-server,再重复在后台支行

lion@node1:~$ rabbitmqctl stop
Stopping and halting node rabbit@node1 ...
Gracefully halting Erlang VM
lion@node1:~$ rabbitmq-server -detached

  通过rabbitmqctl
cluster_status命令,可以查看和个节点的情景,节点的名称是rabbit@shorthostname,

node1:

lion@node1:~$ rabbitmqctl cluster_status
Cluster status of node rabbit@node1 ...
[{nodes,[{disc,[rabbit@node1]}]},
 {running_nodes,[rabbit@node1]},
 {cluster_name,<<"rabbit@node1">>},
 {partitions,[]},
 {alarms,[{rabbit@node1,[]}]}]

node2:

lion@node2:~$ rabbitmqctl cluster_status
Cluster status of node rabbit@node2 ...
[{nodes,[{disc,[rabbit@node2]}]},
 {running_nodes,[rabbit@node2]},
 {cluster_name,<<"rabbit@node2">>},
 {partitions,[]},
 {alarms,[{rabbit@node2,[]}]}]

node3:

lion@node3:~$ rabbitmqctl cluster_status
Cluster status of node rabbit@node3 ...
[{nodes,[{disc,[rabbit@node3]}]},
 {running_nodes,[rabbit@node3]},
 {cluster_name,<<"rabbit@node3">>},
 {partitions,[]},
 {alarms,[{rabbit@node3,[]}]}]

PS:
在随意二个节点操作即可,这里在ip-172-3一-壹三-11四上操作
四、参预集群(ip-172-3一-①伍-1贰四 、ip-17二-31-1一-21陆 )
rabbitmqctl stop_app
rabbitmqctl join_cluster –ram rabbit@ip-172-31-13-114
rabbitmqctl start_app

 

二.4、将node一、node二、node三组成集群

  因为rabbitmq-server运营时,会联合运维节点和行使,它预先安装RabbitMQ应用为standalone形式。要将三个节点参加到存活的集群中,你必要结束那个动用并将节点设置为本来状态,然后就为到场集群准备好了。借使使用./rabbitmqctl
stop,应用和节点都将被关闭。所以采取rabbitmqctl stop_app仅仅关闭应用。

node2:

lion@node2:~$ rabbitmqctl stop_app
Stopping node rabbit@node2 ...
lion@node2:~$ rabbitmqctl join_cluster rabbit@node1
Clustering node rabbit@node2 with rabbit@node1 ...
lion@node2:~$ rabbitmqctl start_app
Starting node rabbit@node2 ...

node3:

lion@node3:~$ rabbitmqctl stop_app
Stopping node rabbit@node3 ...
lion@node3:~$ rabbitmqctl join_cluster rabbit@node1
Clustering node rabbit@node3 with rabbit@node1 ...
lion@node3:~$ rabbitmqctl start_app
Starting node rabbit@node3 ...

  此时 node二 与 node3 也会活动建立连接。

  若是要运用内存节点,则能够利用以下命令:

lion@node2:~$ rabbitmqctl join_cluster --ram rabbit@node1

  集群配置好后,能够在 RabbitMQ 任意节点上推行 rabbitmqctl
cluster_status 来查看是不是集群配置成功。

node1:

lion@node1:~$ rabbitmqctl cluster_status
Cluster status of node rabbit@node1 ...
[{nodes,[{disc,[rabbit@node1,rabbit@node2,rabbit@node3]}]},
 {running_nodes,[rabbit@node1]},
 {cluster_name,<<"rabbit@node1">>},
 {partitions,[]},
 {alarms,[{rabbit@node1,[]}]}]

node2:

lion@node2:~$ rabbitmqctl cluster_status
Cluster status of node rabbit@node2 ...
[{nodes,[{disc,[rabbit@node1,rabbit@node2]}]},{alarms,[{rabbit@node1,[]}]}]

node3:

lion@node3:~$ rabbitmqctl cluster_status
Cluster status of node rabbit@node3 ...
[{nodes,[{disc,[rabbit@node1,rabbit@node2,rabbit@node3]}]},
 {alarms,[{rabbit@node1,[]}]}]

  同时在Web管理工科具中也能够看来效果

PS:
–ram 钦定内部存款和储蓄器节点类型,–disc钦定磁盘节点类型

查网上erlang.cookie修改没用,因为四个erlang.cookie本来正是同1的。查阅了大气有关材质后,他们的缓解方案基本都没用。

二.五、RabbitMQ镜像功效

  使用Rabbit镜像功能,需要基于RabbitMQ策略来落实,策略是用来支配和改动群集范围的某部vhost队列行为和Exchange行为

lion@node2:~$ rabbitmqctl set_policy -p hrsystem ha-allqueue"^" '{"ha-mode":"all"}'

那行命令在vhost名叫hrsystem创设了三个国策,策略名叫ha-allqueue,策略情势为
all 即复制到全数节点,蕴含新增节点,策略正则表明式为 “^”
表示拥有相称全部队列名称。

  例如下边包车型的士命令,^message
这几个规则要依据自个儿修改,这些是指同步”message”早先的行列名称,我们配备时选拔的使用于全体队列,所以表达式为”^”。

lion@node2:~$ rabbitmqctl set_policy -p hrsystem ha-allqueue "^message" '{"ha-mode":"all"}'

  更多set_policy说明:

5、查看集群
rabbitmqctl cluster_status

 

二.陆、安装软件负载均衡器HAProxy1.陆

  由于Ubuntu的敏捷腾飞,官方的源大概不是最新的版本,大部分时候安装大概是1.肆.2四,能够由此以下命令,查询官方提供的版本号:

lion@node4:~$ sudo apt-cache showpkg haproxy

node4是壹台新的机器 ,IP地址是192.16八.0.3四

  在写本文的时候,官方包是未有一.陆版本的,大家得以由此以下命令来设置 :

lion@node4:~$ sudo add-apt-repository ppa:vbernat/haproxy-1.6
lion@node4:~$ sudo apt-get update
lion@node4:~$ sudo apt-get install haproxy

  安装完之后,能够透过以下命令,查看安装的本子

lion@node4:~$ haproxy -v
HA-Proxy version 1.6.7 2016/07/13
Copyright 2000-2016 Willy Tarreau <willy@haproxy.org>

  安装完事后,配置文件的目录在/etc/haproxy/haproxy.cfg,以下是本人修改后的配置文件

###########全局配置#########
global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy     # 改变当前工作目录
    stats socket /run/haproxy/admin.sock mode 660 level admin   # 创建监控所用的套接字目录
    pidfile  /var/run/haproxy.pid   # haproxy的pid存放路径,启动进程的用户必须有权限访问此文件 
    maxconn  4000                   # 最大连接数,默认4000
    user   haproxy                  # 默认用户
    group   haproxy                 # 默认用户组
    daemon                          # 创建1个进程进入deamon模式运行。此参数要求将运行模式设置为"daemon

    # Default SSL material locations
    ca-base /etc/ssl/certs
    crt-base /etc/ssl/private

    # Default ciphers to use on SSL-enabled listening sockets.
    # For more information, see ciphers(1SSL). This list is from:
    #  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
    ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
    ssl-default-bind-options no-sslv3

###########默认配置#########
defaults
    log global
    mode    http                                # 默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
    option  httplog                             # 采用http日志格式
    option  dontlognull                         # 启用该项,日志中将不会记录空连接。所谓空连接就是在上游的负载均衡器
                                                # 或者监控系统为了探测该 服务是否存活可用时,需要定期的连接或者获取某
                                                # 一固定的组件或页面,或者探测扫描端口是否在监听或开放等动作被称为空连接;
                                                # 官方文档中标注,如果该服务上游没有其他的负载均衡器的话,建议不要使用
                                                # 该参数,因为互联网上的恶意扫描或其他动作就不会被记录下来
    timeout connect 5000                    # 连接超时时间
    timeout client  50000                   # 客户端连接超时时间
    timeout server  50000                   # 服务器端连接超时时间
    option  httpclose       # 每次请求完毕后主动关闭http通道 
    option  httplog         # 日志类别http日志格式 
    #option  forwardfor      # 如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip  
    option  redispatch      # serverId对应的服务器挂掉后,强制定向到其他健康的服务器
    timeout connect 10000   # default 10 second timeout if a backend is not found
    maxconn     60000       # 最大连接数
    retries     3           # 3次连接失败就认为服务不可用,也可以通过后面设置 
    errorfile 400 /etc/haproxy/errors/400.http
    errorfile 403 /etc/haproxy/errors/403.http
    errorfile 408 /etc/haproxy/errors/408.http
    errorfile 500 /etc/haproxy/errors/500.http
    errorfile 502 /etc/haproxy/errors/502.http
    errorfile 503 /etc/haproxy/errors/503.http
    errorfile 504 /etc/haproxy/errors/504.http
####################################################################
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的管理界面也放在HAProxy后面了###############################
listen rabbitmq_admin 
    bind 0.0.0.0:8004
    server node1 192.168.0.31:15672
    server node2 192.168.0.32:15672
    server node3 192.168.0.33:15672
####################################################################
listen rabbitmq_cluster 
    bind 0.0.0.0:5672
    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   node1 192.168.0.31:5672 check inter 5s rise 2 fall 3   #check inter 2000 是检测心跳频率,rise 2是2次正确认为服务器可用,fall 3是3次失败认为服务器不可用
    server   node2 192.168.0.32:5672 check inter 5s rise 2 fall 3
    server   node3 192.168.0.33:5672 check inter 5s rise 2 fall 3

  更加多Haproxy的安排文件介绍参考:

  重新启航HAProxy

lion@node4:~$ sudo service haproxy restart
 * Restarting haproxy haproxy                                                                                                 [ OK ]

  然后用浏览器输入

  

六、启用管理和监理模块
rabbitmq-plugins enable rabbitmq_management

往往检讨后本人猛然发现HTTP端操作寻常,正是不能用rabbitmqctl-ClusterNode一.bat展开操作。

二.7、测试结果 ,向HAProxy发送消息

  使用Ubuntu1四.0肆+RabbitMQ三.陆.三+Golang的特级实践中的代码来发送信息,
在node三上大家将新闻发送到node肆(1玖2.16八.0.34)上

原先默许的guest用户是不准长途访问的,假如要选用lion帐号访问,须求在web管控德雷斯顿打开lion对Virtual
Host访问

Console1(node3):

lion@node3:~/_code/_rabbitmq/_golang$ go run producer_hello.go
2016/07/29 12:46:50 dialing "amqp://lion:123456@192.168.0.34:5672/"
2016/07/29 12:46:50 got Connection, getting Channel
2016/07/29 12:46:50 got queue, declaring "test-idoall-queues"
2016/07/29 12:46:50 declared queue, publishing 16B body ("hello idoall.org")
2016/07/29 12:46:50 published 16B OK

Console(node1):

lion@node1:~/_code/_rabbitmq/_golang$ go run consumer_hello.go
2016/07/25 17:37:12 dialing "amqp://guest:guest@localhost:5672/"
2016/07/25 17:37:12 got Connection, getting Channel
2016/07/25 17:37:12 got queue, declaring "test-idoall-queues"
2016/07/25 17:37:12 Queue bound to Exchange, starting Consume
2016/07/25 17:37:12  [*] Waiting for messages. To exit press CTRL+C
2016/07/25 17:37:12 Received a message: hello idoall.org

  在上边的代码中,大家能够见到在node三是向192.16八.0.34那台HAProxy上发送音讯,然后在node一上得以健康接收。

7、设置集群的名字
rabbitmqctl set_cluster_name my_mq

 

3、参考阅读

Haproxy
配置项\安排实例

How to Install HAProxy Load Balancer on
Ubuntu

Can’t access RabbitMQ web management interface after fresh
install

Nginx/LVS/HAProxy负载均衡软件的利弊详解


博文我:迦一
博客地址:RabbitMQ三.陆.三集群搭建+HAProxy一.陆做负载均衡
转发注解:能够转发,
但必须以超链接情势表明文章原来出处和作者新闻及版权注明,感激合营!


八、添加用户:
rabbitmqctl add_user spider spider

接下来,小编在HTTP端用Export
definitions导出RabbitMQ的主干新闻,发现内部有一条”global_parameters”:[{“name”:”cluster_name”,”value”:”rabbit1@PC-20180525AWWA”}]信息。

九、设置用户权限策略
rabbitmqctl set_user_tags spider administrator

就此本身就合计是否相应不要ClusterNode一,而是一向动用暗中同意的本机名。

10、vhost授权
rabbitmqctl set_permissions -p / spider ‘.*’ ‘.*’ ‘.*’

 

11、改变节点类型为磁盘节点
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type disc
rabbitmqctl start_app

正巧作者看见
localhost。

1二、将节点移出集群
将节点ip-17二-3一-1一-21陆 移出集群前,先要stop_app,然后reset节点
[root@ip-172-31-11-216 ~]# rabbitmqctl stop_app
Stopping node rabbit@ip-172-31-11-216 …
[root@ip-172-31-11-216 ~]# rabbitmqctl reset
Resetting node rabbit@ip-172-31-11-216 …

 

CentOS7下安装RabbitMQ 
http://www.linuxidc.com/Linux/2016-11/136812.htm

所以本身就将hosts中的12七.0.0.一 ClusterNode1诠释。

高可用RabbitMQ集群安装配备
http://www.linuxidc.com/Linux/2016-10/136492.htm

威尼斯人线上娱乐 3

CentOS 七.2 下 RabbitMQ 集群搭建 
http://www.linuxidc.com/Linux/2016-12/137812.htm

同时,在rabbitmq-env-ClusterNode1.bat中对RABBITMQ_NODENAME进行改动,具体如下。

RabbitMQ 学习初入门 
http://www.linuxidc.com/Linux/2016-11/136813.htm

威尼斯人线上娱乐 4

CentOS七环境设置使用正式的新闻队列产品RabbitMQ
http://www.linuxidc.com/Linux/2016-11/13673.htm

若出现ERROR: node with name “rabbit1” already running on “loaclhost”,则

布局与管理RabbitMQ 
http://www.linuxidc.com/Linux/2016-11/136815.htm

在职务管理器中把erl.exe进度全部得了,并在治本中重启RabbitMQ服务。然后遵照以下步骤执行:

RabbitMQ概念及环境搭建 http://www.linuxidc.com/Linux/2014-12/110449.htm

一、运转节点

RabbitMQ入门教程 
http://www.linuxidc.com/Linux/2015-02/113983.htm

rabbitmq-server-ClusterNode1 -detached

RabbitMQ
的事无巨细介绍
:请点那里
RabbitMQ
的下载地址
:请点那里 

二、形成集群

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-05/143687.htm

rabbitmqctl-ClusterNode1 stop_app

威尼斯人线上娱乐 5

rabbitmqctl-ClusterNode1 join_cluster rabbit

rabbitmqctl-ClusterNode1 start_app

威尼斯人线上娱乐 6

3、查看集群状态

rabbitmqctl cluster_status

威尼斯人线上娱乐 7

4、通过监督页面,查看节点新闻

威尼斯人线上娱乐 8


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图