RabbitMQ + Keepalived + lvs高可用镜像集群

RabbitMQ + Keepalived + lvs高可用镜像集群_第1张图片

如图所示: 前端采用keepalived+lvs实现高可用负载均衡, RabbitMQ HA 队列(镜像队列)进行消息队列结构复制。本方案中搭建两个节点,并且都是磁盘节点(所有节点状态保持一致,节点完全对等),只要有任何一个节点能够工作,RabbitMQ 集群对外就能提供服务。任务处理进程同时监控每一太RabbitMQ节点(每个节点都相应部署一份任务处理模块)。这样一来,每一份任务处理模块只需要处理自己所监听的rabbitMQ-server接受的任务即可,两份任务处理模块功能完全一致,但相互不影响;当其中一台RabbitMQ宕机之后,与之对应的任务处理进程停止即可,不影响另外一个节点正常工作。

本例环境:

rabbitMQ1:192.168.86.224

rabbitMQ2:192.168.86.235

keepalived(master)+lvs:192.168.86.224

keepalived(backup)+lvs:192.168.86.235

VIP:192.168.86.14

一.安装mq

1.二台机器全部安装Erlang

yum install compat-openssl10

yum install libnsl

yum install ncurses-compat-libs

2.安装socat、erlang依赖包以及mq

yum install socat

rpm -ivh erlang-20.3-1.el7.centos.x86_64.rpm

rpm -ivh rabbitmq-server-3.7.4-1.el7.noarch.rpm


 二、集群镜像部署配置

1.关闭防火墙

查看防火墙状态      firewall-cmd --state

关闭防火墙              firewall-cmd stop firewalld.service

2.Rabbitmq相互通信需要修改主机名,修改并生效

vim /etc/hosts

插入

192.168.86.224 server224

192.168.86.235 server235

修改相应主机名称:执行命令 hostname set-hostname server224

3.设置开机启动:chkconfig

启动两个节点:systemctl start rabbitmq-server.service

在副节点(192.168.86.235)停止应用:rabbitmqctl stop_app

副节点复位:rabbitmqctl reset

4.同步 .erlang_cookie: cat /var/lib/rabbitmq/.erlang.cookie

(查看两台服务器的erlang_cookie是否相同)

5.设置集群,副节点执行命令:

rabbitmqctl join_cluster rabbit@server224

出现 Clustering node rabbit@server235 with rabbit@server224表示成功

6.副节点开始应用

rabbitmqctl start_app

7.两台机器检查集群镜像状态

rabbitmqctl cluster_status

[root@rabbit1 tmp] rabbitmqctl cluster_status
Cluster status of node rabbit@rabbit2
[{nodes,[{disc,[rabbit@rabbit1,rabbit@235,rabbit@224]}]},
 {running_nodes,[rabbit@rabbit1,rabbit@r235,rabbit@224]},
 {cluster_name,<<"rabbit@host9">>},
 {partitions,[]},
 {alarms,[{rabbit@235,[]},{rabbit@224,[]}]}]

三.启动rabbit

1.启动.停止.命令行

systemctl start/stop rabbitmq-server.service  开启/关闭 (开启就行,不用关闭)

rabbitmqctl shutdown 关闭 (不用执行)

2.两机器启动可视化ui界面

rabbitmq-plugins enable rabbitmq_management

浏览器打开访问:192.168.86.224:15762、192.168.86.235:15762

四.用户权限

1.创建vhost

rabbitmqctl add_vhost 管理员

2.创建用户

rabbitmqctl add_user 用户 密码

3.分配权限

设置管理员最大管理权限,可登录ui,默认的guser用户需要自行配置才能登录

设置权限:rabbitmqctl set_permissions -p / 用户名 ".*" ".*" ".*"

修改用户角色: rabbitmqctl set_user_tags 用户名 administrator

keepalived+lvs热备负载均衡

两台机器都需要做配置,只需修改个别配置参数,文档以192.168.86.224和192.168.86.235两台机器上部署rabbitmq为例

1. 两台机器安装所需要得应用

yum install keepalived

yum install ipvsadm #虚拟路由管理软件,几乎不用

2.两台机器设置开机启动

chkconfig keepalived on 或 systemctl enable keepalived.service

查看启动目录

/usr/lib/systemd/system/ | grep keepalived

4.配置keepalived启动文件

vim /etc/keepalived/keepalived.conf

192.168.86.224服务器配置

global_defs {
   notification_email {
   }
   router_id LVS_DEVEL #设置lvs的id,在一个网格内应该是唯一的
}

# 虚拟组
vrrp_instance VI_1 {
    state MASTER # 此处为`主`,备机是 `BACKUP`
    interface bond0 #检查网络的接口,ifconfig查询
    virtual_router_id 51 # 虚拟路由id,同一个组内需要相同
    priority 100 # 主机的优先权要比备机高
    advert_int 1 # 心跳检查频率,单位:秒
    authentication { # 认证,组内的要相同
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟ip,多个换行
    virtual_ipaddress {
        192.168.86.14
    }
}

virtual_server 192.168.86.14 5672 { #配置虚拟IP实例
delay_loop 6
lb_algo wrr #负载均衡调度算法
lb_kind DR #负载均衡法则
persistence_timeout 50
protocol TCP

real_server 192.168.86.224 5672 {#后端的realserver,即真正运行rabbitMQd 主机IP 及端口
weight 100
TCP_CHECK { #rabbitMQ端口检测
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 5672
}
}

real_server 192.168.86.235 5672 { #第二个rabbitMQ节点
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 5672
}
}
}
}

192.168.86.235 Backup服务配置修改:

将 state MASTER 改成 state BACKUP

priority 100 改成 priority 80

在 advert_int 1后加上 nopreempt 非抢占模式

5.启动keepalived

systemctl start keepalived

在主节点上查看,VIP是否绑定到主节点上的ethN网卡上: ip a

[root@initiator ~]# ip add
1: lo:  mtu 16436 qdisc noqueue state UNKNOWN 
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet 192.168.86.14/32 brd 192.168.86.14 scope global lo:0
inet6 ::1/128 scope host 
   valid_lft forever preferred_lft forever
2: eth1:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:50:56:27:b0:80 brd ff:ff:ff:ff:ff:ff
inet 192.168.86.224/24 brd 192.168.1.255 scope global eth1
inet 192.168.86.14/32 scope global eth1:0
inet6 fe80::250:56ff:fe27:b080/64 scope link 
   valid_lft forever preferred_lft forever

可以看到,VIP已经成功绑定到eth1上。

你可能感兴趣的:(运维开发)