中间件——(七)RabbitMQ集群搭建

RabbitMQ集群搭建

【一】前言

允许消费者和生产者在RabbitMQ节点崩溃的情况下继续运行,通过增加更多的节点来扩展消息通信的吞吐量.

集群中的节点一般有两种,一种是内存节点,一种是磁盘节点,内存节点由于没有磁盘读写,性能比磁盘节点好,磁盘节点可以将状态持久化到磁盘,可用性比内存节点好,需要权衡考虑.本次打算用一台作为磁盘节点,做数据备份,两台内存节点,用于提高性能.

Rabbitmq要求在集群中至少有一个磁盘节点,所有其他节点可以是内存节点,当节点加入或者离开集群时,必须要将该变更通知到至少一个磁盘节点.如果集群中唯一的磁盘节点崩溃的话,集群仍然可以保持运行,但是无法进行其他的操作(增删改查),直到节点恢复.

【二】RabbitMQ集群搭建

  • 修改节点的hosts文件
    修改/etc/hosts文件
192.168.179.131 bhz131

192.168.179.132 bhz132

192.168.179.133 bhz133
  • 配置相同的cookie
    Erlang Cookie是保证不同节点可以互相通信的秘钥,要保证集群中的不同节点互相通信必须共享相同的Erlang Cookie,具体存放在/var/lib/rabbitmq/.erlang.cookie.

使用命名把cookie文件上传到其他的几个节点中:

scp /var/lib/rabbitmq/.erlang.cookie 192.168.179.132:/var/lib/rabbitmq/
  • 组建集群
    停掉所有节点上的rabbitmq服务,然后使用-detached独立运行各个节点,这步很关键,尤其是增加节点停止节点后再次启动遇到无法启动时都可以参照这个顺序进行
// 1、停止rabbitmq服务
rabbitmqctl stop

// 2、以特殊的启动方式启动3个节点
rabbitmq-server -detached

// 3、除了主节(131)点不停,其他的节点都停止
rabbitmqctl stop_app

// 4、添加到集群
rabbitmqctl join_cluster rabbit@bhz131
(注意:以内存节点的形式加入集群的命令:
rabbitmqctl join_cluster --ram rabbit@rabbitmq1
)

// 5、启动添加到集群的节点
rabbitmqctl start_app

  • 查询集群状态
rabbitmqctl cluster_status

在管控台界面也可以查看到具体的集群信息.
  • 设置镜像队列策略:
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
  • 其它命名
// 1、移除节点
rabbitmqctl forget_cluster_node rabbit@bhz133

rabbitmqctl stop_app

rabbitmqctl reset

rabbitmqctl start_app

【三】Hapoxy和Keepalived做到高可用

1、Hapoxy负载均衡

//下载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
  • hapoxy配置
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
  • 启动hapoxy
/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg

//查看haproxy进程状态
ps -ef | grep haproxy
  • 管控台查看
    具体的查看地址,这个需要看配置文件中设置的是什么
rmq节点进行监控:http://192.168.1.27:8100/rabbitmq-stats

在这里插入图片描述

2、Keepalived做高可用

Keepalived,它是一个高性能的服务器高可用或热备解决方案,Keepalived主要来防止服务器单点故障的发生问题,可以通过其与Nginx、Haproxy等反向代理的负载均衡服务器配合实现web服务端的高可用。Keepalived以VRRP协议为实现基础,用VRRP协议来实现高可用性(HA).VRRP(Virtual Router Redundancy Protocol)协议是用于实现路由器冗余的协议,VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个)。

//安装所需软件包
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
  • Keepalived的配置
vim /etc/keepalived/keepalived.conf

主节点(79)文件的具体配置:

! 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)具体配置:

! 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,可以指定多个
    }
}
  • 执行脚本编写
    添加:
vim /etc/keepalived/haproxy_check.sh

文件的具体内容:

#!/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
  • 执行脚本赋权
chmod +x /etc/keepalived/haproxy_check.sh
  • 启动keepalived
    当我们启动俩个haproxy节点以后,我们可以启动keepalived服务程序:
//启动两台机器的keepalived
service keepalived start | stop | status | restart

//查看状态
ps -ef | grep haproxy
ps -ef | grep keepalived

【四】链接

发布了130 篇原创文章 · 获赞 88 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/wenge1477/article/details/102593916