RabbitMQ学习笔记-第五章下、RabbitMQ集群的搭建

5.1基础知识的补充

1.集群总体概述

  • Rabbitmq Broker集群是多个erlang节点的逻辑组,每个节点运行Rabbitmq应用,他们之间共享用户、虚拟主机、队列、exchange、绑定和运行时参数。

2.集群复制信息

  • 除了message queue(存在一个节点,从其他节点都可见、访问该队列,要实现queue的复制就需要做queue的HA)之外,任何一个Rabbitmq broker上的所有操作的data和state都会在所有的节点之间进行复制。

3.集群运行前提

  • 集群所有节点必须运行相同的erlang及Rabbitmq版本。
  • hostname解析,节点之间通过域名相互通信,本文为3个node的集群,采用配置hosts的形式。

4.集群互通方式

  • 集群所有节点必须运行相同的erlang及Rabbitmq版本hostname解析,节点之间通过域名相互通信,本文为3个node的集群,采用配置hosts的形式。

5.端口及其用途

  • 5672 客户端连接端口。
  • 15672 web管控台端口。
  • 25672 集群通信端口。

6.集群配置方式

  • 通过rabbitmqctl手工配置的方式。

7.集群故障处理

  • rabbitmq broker集群允许个体节点宕机。
  • 对应集群的的网络分区问题(network partitions)集群推荐用于LAN环境,不适用WAN环境;要通过WAN连接broker,Shovel or Federation插件是最佳解决方案(Shovel or Federation不同于集群:注Shovel为中心服务远程异步复制机制,稍后会有介绍)。

8.节点运行模式

  • 为保证数据持久性,目前所有node节点跑在disk模式,如果今后压力大,需要提高性能,考虑采用ram模式。

9.集群认证方式

  • 通过Erlang Cookie,相当于共享秘钥的概念,长度任意,只要所有节点都一致即可。rabbitmq server在启动的时候,erlang VM会自动创建一个随机的cookie文件。cookie文件的位置: /var/lib/rabbitmq/.erlang.cookie 或者/root/.erlang.cookie。我们的为保证cookie的完全一致,采用从一个节点copy的方式,实现各个节点的cookie文件一致。

5.2集群搭建

一、节点安装

1、安装依赖包

yum install build-essential openssl openssl-devel unixODBC unixODBC-devel 
make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz

2、下载安装包

wget www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm
wget http://repo.iotti.biz/CentOS/7/x86_64/socat-1.7.3.2-5.el7.lux.x86_64.rpm
wget www.rabbitmq.com/releases/rabbitmq-server/v3.6.5/rabbitmq-server-3.6.5-1.noarch.rpm

3、安装服务命令

rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm 
rpm -ivh socat-1.7.3.2-5.el7.lux.x86_64.rpm
rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm

4、修改集群用户与连接心跳检测

注意修改vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app文件
修改:loopback_users 中的 <<"guest">>,只保留guest
修改:heartbeat 为1

5、安装管理插件

//首先启动服务
/etc/init.d/rabbitmq-server start stop status restart
//查看服务有没有启动: lsof -i:5672
rabbitmq-plugins enable rabbitmq_management
//可查看管理端口有没有启动: lsof -i:15672 或者 netstat -tnlp|grep 15672

二、文件同步步骤

  • 选择76、77、78任意一个节点为Master(这里选择76为Master),也就是说我们需要把76的Cookie文件同步到77、78节点上去,进入/var/lib/rabbitmq目录下,把/var/lib/rabbitmq/.erlang.cookie文件的权限修改为777,原来是400;然后把.erlang.cookie文件copy到各个节点下;最后把所有cookie文件权限还原为400即可。
/etc/init.d/rabbitmq-server stop 
//进入目录修改权限;远程copy77、78节点,比如:
scp /var/lib/rabbitmq/.erlang.cookie 192.168.11.77:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie 192.168.11.78:/var/lib/rabbitmq/

三、组成集群步骤

1、停止MQ服务

  • 我们首先停止3个节点的服务
rabbitmqctl stop

2、组成集群操作

  • 接下来我们就可以使用集群命令,配置76、77、78为集群模式,3个节点(76、77、78)执行启动命令,后续启动集群使用此命令即可。
rabbitmq-server -detached

3、slave加入集群操作(重新加入集群也是如此,以最开始的主节点为加入节点)

//注意做这个步骤的时候:需要配置/etc/hosts 必须相互能够寻址到
bhz77:rabbitmqctl stop_app
bhz77:rabbitmqctl join_cluster --ram rabbit@bhz76
bhz77:rabbitmqctl start_app
bhz78:rabbitmqctl stop_app
bhz78:rabbitmqctl join_cluster rabbit@bhz76
bhz78:rabbitmqctl start_app
//在另外其他节点上操作要移除的集群节点
rabbitmqctl forget_cluster_node rabbit@bhz24

4、修改集群名称

  • 修改集群名称(默认为第一个node名称):
rabbitmqctl set_cluster_name rabbitmq_cluster1

5、查看集群状态

  • 最后在集群的任意一个节点执行命令:查看集群状态
rabbitmqctl cluster_status

在这里插入图片描述在这里插入图片描述

四、配置镜像队列

  • 设置镜像队列策略(在任意一个节点上执行)
  • 将所有队列设置为镜像队列,即队列会被复制到各个节点,各个节点状态一致,RabbitMQ高可用集群就已经搭建好了,我们可以重启服务,查看其队列是否在从节点同步。
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

五、安装HaProxy

1、Haproxy简介

  • HAProxy是一款提供高可用、负载均衡以及基于TCP和HTTP应用的代理软件,支持虚拟主机、免费快速可靠。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,可以支持数万并发连接,并且它的运行模式使得它可以很简单安全的整合进自己的架构,同时保持web服务器不被暴露在网络上

Haproxy性能最大化

  • 单进程、事件驱动模型显著降低了上下文切换的开销及内存占用
  • 在任何可用的情况下,单缓冲机制能以不复制任何数据的方式完成读写操作,这会节约大量的CPU时钟周期及内存带宽
  • 借助于Linux2.6上splice()系统调用,HAProxy可以实现零复制转发,Linux3.5以上的OS中还可实现零复制启动
  • 内存分配器在固定大小的内存池中可实现即时内存分配,这能显著减少创建一个会话的时长
  • 树形存储:侧重于使用作者多年前开发的弹性二叉树,实现了以O(logN)的低开销来保持计时器命令,保持运行队列命令及管理轮询及最少连接队列

2、Haproxy安装

  • 79、80节点同时安装Haproxy,下面步骤统一
//下载依赖包
yum install gcc vim wget
//下载haproxy
wget http://www.haproxy.org/download/1.6/src/haproxy-1.6.5.tar.gz
//解压
tar -zxvf haproxy-1.6.5.tar.gz -C /usr/local
//进入目录、进行编译、安装
cd /usr/local/haproxy-1.6.5
make TARGET=linux31 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
mkdir /etc/haproxy
//赋权
groupadd -r -g 149 haproxy
useradd -g haproxy -r -s /sbin/nologin -u 149 haproxy
//创建haproxy配置文件
touch /etc/haproxy/haproxy.cfg

3、Haproxy配置

vim /etc/haproxy/haproxy.cfg
#logging options
global
	log 127.0.0.1 local0 info
	maxconn 5120
	chroot /usr/local/haproxy
	uid 99
	gid 99
	daemon
	quiet
	nbproc 20
	pidfile /var/run/haproxy.pid

defaults
	log global
	#使用4层代理模式,”mode http”为7层代理模式
	mode tcp
	#if you set mode to tcp,then you nust change tcplog into httplog
	option tcplog
	option dontlognull
	retries 3
	option redispatch
	maxconn 2000
	contimeout 5s
     ##客户端空闲超时时间为 60秒 则HA 发起重连机制
     clitimeout 60s
     ##服务器端链接超时时间为 15秒 则HA 发起重连机制
     srvtimeout 15s	
#front-end IP for consumers and producters

listen rabbitmq_cluster
	bind 0.0.0.0:5672
	#配置TCP模式
	mode tcp
	#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
	#简单的轮询
	balance roundrobin
	#rabbitmq集群节点配置 #inter 每隔五秒对mq集群做健康检查, 2次正确证明服务器可用,2次失败证明服务器不可用,并且配置主备机制
        server bhz76 192.168.11.76:5672 check inter 5000 rise 2 fall 2
        server bhz77 192.168.11.77:5672 check inter 5000 rise 2 fall 2
        server bhz78 192.168.11.78:5672 check inter 5000 rise 2 fall 2
#配置haproxy web监控,查看统计信息
listen stats
	bind 192.168.11.79:8100
	mode http
	option httplog
	stats enable
	#设置haproxy监控地址为http://localhost:8100/rabbitmq-stats
	stats uri /rabbitmq-stats
	stats refresh 5s

4、启动HaProxy

/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
//查看haproxy进程状态
ps -ef | grep haproxy

5、访问haproxy

  • 访问如下地址可以对rmq节点进行监控:http://192.168.1.27:8100/rabbitmq-stats
    在这里插入图片描述在这里插入图片描述

六、安装keepAlived

1、Keepalived简介

  • keepAlived软件主要是通过VRRP协议实现高可用功能,VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断运行,所以KeepAlive一方面具有配置管理LVS的功能,同时具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能

KeepAlived服务三个重要功能

  • 管理LVS负载均衡软件
  • 实现LVS集群节点的健康检查
  • 作为系统网络服务的高可用性(failover)

KeepAlived高可用原理

  • KeepAlived高可用服务对之间的故障切换转移,通过VRRP(虚拟路由协议)实现,在KeepAlived服务正常工作时。主Master节点会不断地向备节点发送(多播)心跳信息,用以告诉备Backup节点自己还活着,当主节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测来自主Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的IP资源及服务、而当Master节点恢复时,备BackUp节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色

2、Keepalived安装

//安装所需软件包
yum install -y openssl openssl-devel
//下载
wget http://www.keepalived.org/software/keepalived-1.2.18.tar.gz
//解压、编译、安装
tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/
cd keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived
make && make install
//将keepalived安装成Linux系统服务,因为没有使用keepalived的默认安装路径(默认路径:/usr/local),安装完成之后,需要做一些修改工作
//首先创建文件夹,将keepalived配置文件进行复制:
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
//然后复制keepalived脚本文件:
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/sbin/keepalived /usr/sbin/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
//可以设置开机启动:chkconfig keepalived on,到此我们安装完毕!
chkconfig keepalived on

3、Keepalived配置

vim /etc/keepalived/keepalived.conf
  • 79节点(Master)配置如下
! Configuration File for keepalived

global_defs {
   router_id bhz79  ##标识节点的字符串,通常为hostname

}

vrrp_script chk_haproxy {
    script "/etc/keepalived/haproxy_check.sh"  ##执行脚本位置
    interval 2  ##检测时间间隔
    weight -20  ##如果条件成立则权重减20
}

vrrp_instance VI_1 {
    state MASTER  ## 主节点为MASTER,备份节点为BACKUP
    interface eth0 ## 绑定虚拟IP的网络接口(网卡),与本机IP地址所在的网络接口相同(我这里是eth0)
    virtual_router_id 79  ## 虚拟路由ID号(主备节点一定要相同)
    mcast_src_ip 192.168.11.79 ## 本机ip地址
    priority 100  ##优先级配置(0-254的值)
    nopreempt
    advert_int 1  ## 组播信息发送间隔,俩个节点必须配置一致,默认1s
authentication {  ## 认证匹配
        auth_type PASS
        auth_pass bhz
    }

    track_script {
        chk_haproxy
    }

    virtual_ipaddress {
        192.168.11.70  ## 虚拟ip,可以指定多个
    }
}
  • 80节点(Master)配置如下
! Configuration File for keepalived

global_defs {
   router_id bhz80  ##标识节点的字符串,通常为hostname

}

vrrp_script chk_haproxy {
    script "/etc/keepalived/haproxy_check.sh"  ##执行脚本位置
    interval 2  ##检测时间间隔
    weight -20  ##如果条件成立则权重减20
}

vrrp_instance VI_1 {
    state BACKUP  ## 主节点为MASTER,备份节点为BACKUP
    interface eno16777736 ## 绑定虚拟IP的网络接口(网卡),与本机IP地址所在的网络接口相同(我这里是eno16777736)
    virtual_router_id 79  ## 虚拟路由ID号(主备节点一定要相同)
    mcast_src_ip 192.168.11.80  ## 本机ip地址
    priority 90  ##优先级配置(0-254的值)
    nopreempt
    advert_int 1  ## 组播信息发送间隔,俩个节点必须配置一致,默认1s
authentication {  ## 认证匹配
        auth_type PASS
        auth_pass bhz
    }

    track_script {
        chk_haproxy
    }

    virtual_ipaddress {
        192.168.1.70  ## 虚拟ip,可以指定多个
    }
}

4、执行脚本编写

  • 添加文件位置为/etc/keepalived/haproxy_check.sh(79、80两个节点文件内容一致即可)
#!/bin/bash
COUNT=`ps -C haproxy --no-header |wc -l`
if [ $COUNT -eq 0 ];then
    /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
    sleep 2
    if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

5、执行脚本赋权

  • haproxy_check.sh脚本授权,赋予可执行权限.
chmod +x /etc/keepalived/haproxy_check.sh

6、启动keepalived

  • 当我们启动俩个haproxy节点以后,我们可以启动keepalived服务程
//启动两台机器的keepalived
service keepalived start | stop | status | restart
//查看状态
ps -ef | grep haproxy
ps -ef | grep keepalived

7、高可用测试

  • vip在27节点上
    在这里插入图片描述

  • 27节点宕机测试:停掉27的keepalived服务即可。
    在这里插入图片描述- 查看28节点状态:我们发现VIP漂移到了28节点上,那么28节点的haproxy可以继续对外提供服务!

在这里插入图片描述

七、集群配置文件

  • 创建如下配置文件位于:/etc/rabbitmq目录下(这个目录需要自己创建)
  • 环境变量配置文件:rabbitmq-env.conf
  • 配置信息配置文件:rabbitmq.config(可以不创建和配置,修改)

rabbitmq-env.conf配置文件:

  • 关键参数配置
RABBITMQ_NODE_IP_ADDRESS=本机IP地址
RABBITMQ_NODE_PORT=5672
RABBITMQ_LOG_BASE=/var/lib/rabbitmq/log
RABBITMQ_MNESIA_BASE=/var/lib/rabbitmq/mnesia
  • 配置参考参数如下:
RABBITMQ_NODENAME=FZTEC-240088 节点名称
RABBITMQ_NODE_IP_ADDRESS=127.0.0.1 监听IP
RABBITMQ_NODE_PORT=5672 监听端口
RABBITMQ_LOG_BASE=/data/rabbitmq/log 日志目录
RABBITMQ_PLUGINS_DIR=/data/rabbitmq/plugins 插件目录
RABBITMQ_MNESIA_BASE=/data/rabbitmq/mnesia 后端存储目录
更详细的配置参见: http://www.rabbitmq.com/configure.html#configuration-file
  • 配置文件信息修改:
/usr/lib/rabbitmq/lib/rabbitmq_server-3.6.4/ebin/rabbit.app和rabbitmq.config配置文件配置任意一个即可,我们进行配置如下:
vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.4/ebin/rabbit.app
  • 关键参数配置
tcp_listerners 设置rabbimq的监听端口,默认为[5672]。
disk_free_limit 磁盘低水位线,若磁盘容量低于指定值则停止接收数据,默认值为{mem_relative, 1.0},即与内存相关联11,也可定制为多少byte.
vm_memory_high_watermark,设置内存低水位线,若低于该水位线,则开启流控机制,默认值是0.4,即内存总量的40%。
hipe_compile 将部分rabbimq代码用High Performance Erlang compiler编译,可提升性能,该参数是实验性,若出现erlang vm segfaults,应关掉。
force_fine_statistics, 该参数属于rabbimq_management,若为true则进行精细化的统计,但会影响性能
更详细的配置参见:http://www.rabbitmq.com/configure.html

5.3节点信息说明

  • RabbitMQ集群环境节点说明
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值