RabbitMQ 集群环境搭建

1. 使用集群的原因

最开始我们介绍了如何安装及运行 RabbitMQ 服务,不过这些是单机版的,无法满足目前真实应用的
要求。如果 RabbitMQ 服务器遇到内存崩溃、机器掉电或者主板故障等情况,该怎么办?单台 RabbitMQ
服务器可以满足每秒 1000 条消息的吞吐量,那么如果应用需要 RabbitMQ 服务满足每秒 10 万条消息的吞 吐量呢?购买昂贵的服务器来增强单机 RabbitMQ 务的性能显得捉襟见肘,搭建一个 RabbitMQ 集群才是
解决实际问题的关键 .

2. 搭建步骤

1. 修改 3 台机器的主机名称
vim /etc/hostname
2. 配置各个节点的 hosts 文件,让各个节点都能互相识别对方
vim /etc/hosts
10.211.55.74 node1
10.211.55.75 node2
10.211.55.76 node3
重启网络生效: /etc/init.d/network restart
3. 以确保各个节点的 cookie 文件使用的是同一个值
node1 上执行远程操作命令
scp /var/lib/rabbitmq/.erlang.cookie root@node2:/usr/local/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie root@node3:/usr/local/rabbitmq/.erlang.cookie

官方在介绍集群的文档中提到过.erlang.cookie一般会存在这两个地址:第一个是$home/.erlang.cookie;第二个地方就是/var/lib/rabbitmq/.erlang.cookie。

  • 如果我们使用解压缩方式安装部署的rabbitmq,那么这个文件会在${home}目录下,也就是$home/.erlang.cookie。
  • 如果我们使用rpm等安装包方式进行安装的,那么这个文件会在/var/lib/rabbitmq目录下。
特别注意:两个地方的cookie文件都要修改一致
4. 启动 RabbitMQ 服务 , 顺带启动 Erlang 虚拟机和 RbbitMQ 应用服务 ( 在三台节点上分别执行以
下命令 )
rabbitmq-server -detached
开放端口: 4369   25672端口
具体开放端口命令查看
一些Linux常用操作命令记录_qq837993702的博客-CSDN博客

5. 在节点 2 执行
rabbitmqctl stop_app (rabbitmqctl stop 会将 Erlang 虚拟机关闭, rabbitmqctl stop_app 只关闭 RabbitMQ 服务 )
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@node1
rabbitmqctl start_app( 只启动应用服务 )
6. 在节点 3 执行
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@node2
rabbitmqctl start_app
7. 集群状态
rabbitmqctl cluster_status
8. 需要重新设置用户
创建账号
rabbitmqctl add_user admin 123
设置用户角色
rabbitmqctl set_user_tags admin administrator
设置用户权限
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
9. 解除集群节点 (node2 node3 机器分别执行 )
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
rabbitmqctl cluster_status
rabbitmqctl forget_cluster_node rabbit@node2(node1 机器上执行 )

3、HAProxy负载均衡

HAProxy的特点是:
  1、HAProxy是支持虚拟主机的,,并能支持上万级别的连接;
  2、能够补充Nginx的一些缺点比如Session的保持,cookie的引导等工作;
  3、支持url检测后端的服务器出问题的检测会有很好的帮助;
  4、它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的;
  5、HAProxy可以对mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS
  6、能够提供4层,7层代理。HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮件服务器、内部协议通信服务器等),和7层(HTTP)。在4层模式 下,HAProxy仅在客户端和服务器之间转发双向流量,7层模式下,HAProxy会分析协议,并且能通过允许、拒绝、交换、增加、修改或者删除请求 (request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则;
  7、HAProxy负载均衡算法具体有如下几种:
     ①roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
     ②static-rr,表示根据权重;
     ③leastconn,表示最少连接者先处理;
     ④source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法;
     ⑤ri,表示根据请求的URI;
     ⑥rl_param,表示根据请求的URl参数'balance url_param' requires an URL parameter name;
     ⑦hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
     ⑧rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。

1、下载依赖包

yum install gcc

2、下载haproxy

yum install haproxy -y

3、编辑 haproxy 配置文件

vi /etc/haproxy/haproxy.cfg

新增listen内容,根据实际情况,修改default内容:

#---------------------------------------------------------------------
# Example configuration for a possible web application.  See the
# full configuration options online.
#
#   http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    #
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    #
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    #
    #    local2.*                       /var/log/haproxy.log
    #
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats
# haproxy统计页面配置段
listen stats
	# 指定统计页面监听的端口
	bind *:9188
	# 指定统计页面运行的模式
	mode http
	# 指定开启统计页面功能
	stats enable
	# 如果不设置URI,默认是/haproxy?stats
	stats uri /status
	# 指定登入是提示信息,\表示转义空白字符
	stats realm HAProxy\ statistics
	# 指定用户名和密码
	stats auth admin:admin123
	# 指定统计页面自动刷新的时长
	stats refresh 20
	# 如果用户认证成功,统计页面可以被访问
	stats admin if TRUE
	#隐藏统计页面上HAProxy的版本信息
	stats hide-version
	
listen rabbitmq_cluster
	bind *:5671
	option tcplog
	mode tcp
	timeout client 3h
	timeout server 3h
	balance roundrobin
	# inter 2000 是健康状态检测的时间间隔,rise 2:2次请求成功认为服务器可用,fall 3:3次请求不成功认为服务器不可用
	 server   node_206 10.10.240.206:5672 check inter 5s rise 2 fall 3   
	 server   node2_207 10.10.240.207:5672 check inter 5s rise 2 fall 3
	 server   node3_107 10.10.252.107:5672 check inter 5s rise 2 fall 3
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  main *:5000
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js

    use_backend static          if url_static
    default_backend             app

#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend static
    balance     roundrobin
    server      static 127.0.0.1:4331 check

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
    balance     roundrobin
    server  app1 127.0.0.1:5001 check
    server  app2 127.0.0.1:5002 check
    server  app3 127.0.0.1:5003 check
    server  app4 127.0.0.1:5004 check

4、启动haproxy

systemctl  start haproxy

5、错误记录

    HAProxy 报错(Starting proxy stats: cannot bind socket [0....:7777]

执行如下命令可解决

setsebool -P haproxy_connect_any=1

启动完成后可查看haproxy管理端:

http://10.10.252.107:9188/status

RabbitMQ 集群环境搭建_第1张图片

你可能感兴趣的:(rabbitmq,haproxy,负载均衡,rabbitmq,haproxy)