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

news/2024/11/15 4:07:39/

如图所示: 前端采用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-openssl10yum install libnslyum install ncurses-compat-libs

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

yum install socatrpm -ivh erlang-20.3-1.el7.centos.x86_64.rpmrpm -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 PASSauth_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 TCPreal_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: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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上。


http://www.ppmy.cn/news/302689.html

相关文章

RS232和RS485的区别

RS232与RS485一直是弱电常见的接口 RS232接口图片 一、接口的物理结构 1、RS232接口&#xff1a; 计算机通讯接口之一&#xff0c;通常 RS-232 接口以9个引脚 (DB-9) 或是25个引脚 (DB-25) 的型态出现&#xff0c;一般个人计算机上会有两组 RS-232 接口&#xff0c;分别称为…

RS232 RS485 RS422 RJ45

1.从接线上&#xff0c;RS232是三线制&#xff0c;RS485是两线制&#xff1b; 2.从传输距离上&#xff0c;RS232只能传输15米&#xff0c;RS485最远可以传输1200米&#xff1b; 3.从速率上&#xff0c;RS232是全双工传输&#xff0c;RS485是半双工传输&#xff1b; 4.从协议…

RJ-48 和RJ-45 的区别

通常E1链路使用的接口是G.703标准的接口。   G.703接口有两种&#xff0c;一种非平衡采用75 欧姆细同轴电缆作为传输介质&#xff1b;另一种平衡采用120欧姆双绞线电缆作为传输介质。    在使用平衡传输方式时&#xff0c;你需要用一条两端都是RJ-48接头的双绞线电缆连接…

人工智能、机器学习及深度学习视频教程大合集

人工智能、机器学习及深度学习视频教程大合集 涵盖计算机视觉、强化学习、自然语言处理、自动驾驶等方向视频教程&#xff1b;同时包括Tensorflow、Pytorch、Keras等框架教程以及机器学习在遥感GIS、医疗领域等方向的应用教程&#xff0c;最后还包括机器学习方向面试教程。 计…

RS232、RS485、RS422、RJ45接口,终于弄明白了!

通讯端口都是串口&#xff0c;在以下几个方面有区别&#xff1a; 1、通讯距离 RS232口最大通讯距离是15米&#xff0c;而RS422/485最大通讯距离是1200米。 2、所连接设备个 RS232只能连接一个设备&#xff0c;而RS485可以连接多个设备。 3、端口的定义 RS232是标准接口&a…

经典颜色的RGB值

红 RED    品红Magenta&#xff08;热情&#xff09;    CMYK&#xff1a;C15 M100 Y20 K0   RGB: R207 G0 B112    洋红Carmine&#xff08;大胆&#xff09;   CMYK: C100 M0 Y60 K10   RGB: R215 G0 B64    宝石红Ruby&#xff08;富贵&#xff09;   CMYK…

FT232R转RS485电路图

FT232R芯片转RS485的电路图&#xff0c;注意的事项&#xff1a;如果按照官方原理图的设计方法&#xff0c;会存在的问题是&#xff1a;发出去的数据也被接收回来了&#xff0c;这个一般不满足我们平常的需求&#xff0c;所以要在官方的电路上调整下&#xff0c;具体参考下方电路…

RS232与RS485的比较

目录 一、RS2321、连接器2、线缆&#xff1a;三条线3、数据传输&#xff08;半双工或全双攻&#xff09;4、网络拓扑5、信号6、波形示例 二、RS4851、线缆&#xff1a;屏蔽双绞线2、双绞线规格3、数据传输&#xff08;半双工或全双攻&#xff09;4、网络拓扑5、信号6、波形示例…