Rabbitmq高可用集群搭建-镜像模式

1. 官网地址
rabbitmq官网:https://www.rabbitmq.com/download.html
Elang官网:http://www.erlang.org/downloads
我用的是 erlang-21.3-1.el7.x86_64.rpm 和 rabbitmq-server-3.8.8-1.el7.noarch.rpm,下载好后上传服务器

首先准备5台服务器,其中,node1、node2、node3三台服务器安装RabbitMQ服务,node4和node5安装HA-proxy和Keepalived。

192.168.110.100  node1
192.168.110.101  node2
192.168.110.102  node3
192.168.110.103  node4
192.168.110.104  node5

2. 安装文件(分别按照以下顺序安装)
rpm -ivh erlang-21.3-1.el7.x86_64.rpm 
yum install socat -y 
rpm -ivh rabbitmq-server-3.8.8-1.el7.noarch.rpm

3. 常用命令(按照以下顺序执行) 
添加开机启动 RabbitMQ 服务 
chkconfig rabbitmq-server on 
启动服务
/sbin/service rabbitmq-server start 
查看服务状态 
/sbin/service rabbitmq-server status
停止服务(选择执行) 
/sbin/service rabbitmq-server stop 
开启 web 管理插件 
rabbitmq-plugins enable rabbitmq_management 
用默认账号密码(guest)访问地址 http://19.168.110.126:15672/出现权限问题

4. 添加一个新的用户 
创建账号 
rabbitmqctl add_user chengzl 123456
设置用户角色 
rabbitmqctl set_user_tags chengzl administrator 
设置用户权限 
set_permissions [-p <vhostpath>] <user> <conf> <write> <read> 
rabbitmqctl set_permissions -p "/" chengzl ".*" ".*" ".*" 
用户 user_admin 具有/vhost1 这个 virtual host 中所有资源的配置、写、读权限 
当前用户和角色
rabbitmqctl list_users 

 5. 再次登陆chengzl用户

重置命令:

关闭应用的命令为 
rabbitmqctl stop_app 
清除的命令为
rabbitmqctl reset 
重新启动命令为 
rabbitmqctl start_app

 三台服务器:100、101、103分别按以上步骤安装。

6. RabbitMQ集群配置

这里以node1为master节点,node2和node3为slave节点。

A》首先配置5个服务器hosts文件:
192.168.110.100  node1
192.168.110.101  node2
192.168.110.102  node3
192.168.110.103  node4
192.168.110.104  node5

B》修改5台服务器的主机名(node1 ~ node5)

        vim /etc/hostname

C》停止MQ服务
        rabbimqctl stop

以确保各个节点的 cookie 文件使用的是同一个值 
在 node1 上执行远程操作命令 
scp /root/.erlang.cookie root@node2:/root/.erlang.cookie
scp /root/.erlang.cookie root@node3:/root/.erlang.cookie

7. 启动 RabbitMQ 服务,顺带启动 Erlang 虚拟机和 RbbitMQ 应用服务(在三台节点上分别执行以下命令) 
rabbitmq-server -detached 

8. slave加入集群,对node2和node3分别执行下面操作
rabbitmqctl stop_app 
(rabbitmqctl stop 会将 Erlang 虚拟机关闭,rabbitmqctl stop_app 只关闭 RabbitMQ 服务) 
rabbitmqctl join_cluster rabbit@node1 
rabbitmqctl start_app(只启动应用服务) 

A> 如果需要移除集群节点,执行下面命令:
rabbitmqctl forget_cluster_node rabbit@node2(具体节点)
B> 修改集群名称(任意一个节点操作,默认为master node名称)
rabbitmqctl set_cluster_name rabbitmq_cluster1
C> 查看集群状态(任意一个节点操作)
rabbitmqctl cluster_status
D> 设置镜像队列策略(任意一个节点操作)
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

ha-mode:指明镜像队列的模式,有效值为all、exactly、nodes,默认为all。all表示在集群中所有的节点上进行镜像;exactly表示在指定个数的节点上进行镜像,节点个数由ha-params指定;nodes表示在指定节点上进行镜像,节点名称通过ha-params指定,节点的名称通常类似于rabbit@hostname
ha-params:不同的ha-mode配置中需要用到的参数
ha-sync-mode:队列中消息的同步方式,有效值为automatic和manual


E> 将所有队列设置为镜像队列,即队列会被复制到各个节点,各个节点状态一致。
此时看rabbitmq管控台,Nodes会有三个节点:

9. 安装 Haproxy(node4和node5)
 

A》下载haproxy
        yum install haproxy -y

B》编辑 haproxy 配置文件
        vi /etc/haproxy/haproxy.cfg

新增listen内容,根据实际情况,修改default内容:
#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
    # 使用四层代理模式,"mode http" 为7层代理模式
    mode tcp
    # if you set mode to tcp,then you must change tcplog into httplog
    option tcplog
    option dontlognull
    retries 3
    option redispatch
    maxconn 2000
    contimeout 5s
    # 客户端空闲超时时间为60秒,过了该时间,HA发起重连机制
    clitimeout 60s
    # 服务端连接超时时间为15秒,过了该时间,HA发起重连机制
    srvtimeout 15s

listen rabbitmq_cluster
    # 定义监听地址和端口,本机的5672端口
    bind 0.0.0.0:5672
    # 配置 tcp 模式
    mode tcp
    # balance url_param userid
    # balance url_param session_id check_post 64
    # 简单的轮询
    balance roundrobin
    #rabbitmq集群节点配置 #inter 每隔五秒对mq集群做健康检查,2次正确证明服务器可用,
    #2次失败证明服务器不可用,并且配置主备机制
    server node1 192.168.110.100:5672 check inter 5000 rise 2 fall 2
    server node2 192.168.110.101:5672 check inter 5000 rise 2 fall 2
    server node3 192.168.110.102:5672 check inter 5000 rise 2 fall 2

        
# 配置 haproxy web 监控,查看统计信息
listen stats
    bind *:8100
    mode http
    option httplog
    stats enable
    # 设置 haproxy 监控地址为:http://localhost:8100/rabbitmq-stats
    stats uri /rabbitmq-stats
    stats refresh 5s

10. 启动haproxy
        haproxy -f /etc/haproxy/haproxy.cfg

        重启haproxy:service haproxy restart
        至此,haproxy配置成功,可以访问:http://192.168.174.13:8100/rabbitmq-stats

11. 安装 Keepalived(node4和node5)
我这里将node4作为keepalived的主节点,node5为备用节点。


A、安装所需软件包
yum install -y openssl openssl-devel

B、下载 keepalived
wget http://www.keepalived.org/software/keepalived-1.2.18.tar.gz

C、解压、编译、安装
tar -xvf keepalived-1.2.18.tar.gz
cd keepalived-1.2.18
./configure --prefix=/usr/local/keepalived
make && make install

D、创建文件夹,将keepalived配置文件进行复制
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig

E、创建软连接,如果存在则进行删除
ln -s /usr/local/sbin/keepalived /usr/sbin
ln -s /usr/local/keepalived/sbin/keepalived /sbin

F、设置开机启动
chkconfig keepalived on

G、编辑 keepalived 配置文件(编辑node4和node5)
vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global defs {
    router_id node4 ##标识节点的字符串,通常为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 ens33 ##绑定虚拟ip的网络接口(网卡)
    virtual_router_id 13    ##虚拟路由id号,主备节点相同
    mcast_src_ip 192.168.174.13 ##本机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.174.70 ##虚拟ip,可以指定多个
    }
}

! Configuration File for keepalived
global defs {
    router_id node5 ##标识节点的字符串,通常为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 ens33 ##绑定虚拟ip的网络接口(网卡)
    virtual_router_id 13    ##虚拟路由id号,主备节点相同
    mcast_src_ip 192.168.174.14 ##本机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.174.70 ##虚拟ip,可以指定多个
    }
}

vrrp_instance 的 interface 为VIP需要挂载的网卡上,我这里都放在虚拟机的ens33上。 node4 的 state 为 MASTER,node5 为 BACKUP ,priority 要保证node4大于node5,这样就能实现node4宕机之后恢复服务,能够从node5抢回VIP;如果需要实现不抢回VIP,则node4和node5的state都设置为BACKUP,并且vrrp_instance 都添加nopreempt,表示不抢夺VIP(实际上已经加了)。

12. 添加执行脚本 haproxy_check.sh

vi /etc/keepalived/haproxy_check.sh

内容如下(node4和node5一样):

#!/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

13、赋予脚本执行权限

        chmod +x haproxy_check.sh

14、启动keepalived

        service keepalived start

至此,基于Keepalived和Haproxy的rabbitmq集群,已经搭接完成。
 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值