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端口
具体开放端口命令查看
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