请选择 进入手机版 | 继续访问电脑版

[ASP.NET] 运用.net core中实例讲解RabbitMQ高可用集群构建

[复制链接]
查看214 | 回复35 | 2021-9-15 07:45:37 | 显示全部楼层 |阅读模式
目次

一、集群架构简介

当单台 RabbitMQ 服务器的处理消息的本领 达到瓶颈时,此时可以通过 RabbitMQ 集群来举行 扩展,从而达到提拔 吞吐量的目标 。RabbitMQ 集群是一个或多个节点的逻辑分组,集群中的每个节点都是对等的,每个节点共享全部 的用户,假造 主机,队列,交换器,绑定关系,运行时参数和其他分布式状态等信息。一个高可用,负载均衡 的 RabbitMQ 集群架构应类似 下图:

运用.net core中实例讲解RabbitMQ高可用集群构建

分析 阐明 :

最下面层是RabbitMQ的集群,没有ha镜像时是平常 集群,平常 集群的缺点是挂了一个机器,以这个机器为根的队列就无法利用 了(一个队列的数据只会存在一个节点),无法实现高可用

以是 把队列变成镜像队列,如许 每个节点都会有一份完备 的数据,有节点挂了也不影响利用 ,实现了高可用,但RabbitMQ集群本身没有实现负载均衡 ,也就是说对于一个三节点的集群,

每个节点的负载大概 都是不雷同 的。

HAProxy层的作用就是为了实现RabbitMQ集群的负载均衡 ,但一个节点的话显然也不能高可用,以是 必要 两个HAProxy实现HaProxy的高可用,但没法实现自动 的故障转移,就是HAProxy1挂了,

必要 手动把ip地址改成HAProxy2的。

以是 必要 用到KeepAlived,它通常由一主一备两个节点构成 ,同一时间内只有主节点会提供对外服务,并同时提供一个假造 的 IP 地址 (Virtual Internet Protocol Address ,简称 VIP),可以避免暴露真实ip 。 假如 主节点故障,那么备份节点会自动 担当 VIP 并成为新的主节点 ,直到原有的主节点恢复。

生产环境架构应该为:

机器1:RabbitMQ1,机器2:RabbitMQ2,机器3:RabbitMQ3,机器4:HAProxy+keeplived(主),机器5(HAProxy+keeplived(备)。

这里资源缘故原由 只有3台机器,以是 搭建架构为:

172.16.2.84(rabbit1) RabbitMQ1,HAProxy+keeplived(主)
172.16.2.85(rabbit2) RabbitMQ2,HAProxy+keeplived(备)
172.16.2.86(rabbit3) RabbitMQ3

二、平常 集群搭建

2.1 各个节点分别安装RabbitMQ

这里前面的章节功能利用 是用的docker安装,这里集群不用docker,由于 docker安装会有很多的映射,很容易 扰乱,装有docker的rabbitmq的,必要 先把docker停掉。

这里预备 了3台机器,172.16.2.84(rabbit1),172.16.2.85(rabbit2),172.16.2.86(rabbit3),为了避免混淆,下面都会用rabbit1,rabbit2,rabbit3称呼。

rabbit1,rabbit2,rabbit3都实行 一遍下面的安装。

1)安装前,先修改hostname,由于 rabbitmq集群通讯必要 用hostname

rabbit1机器实行

  1. hostnamectl set-hostname rabbit1 --static
复制代码

rabbit2机器实行

  1. hostnamectl set-hostname rabbit2 --static
复制代码

rabbit3机器实行

  1.  hostnamectl set-hostname rabbit3 --static
复制代码

rabbit1,rabbit2,rabbit3实行 同样操作

  1. #修改hosts,因为rabbitmq通讯要通过hostname
  2. vi /etc/hosts
复制代码

2)把ip对应hostname添加到后面

172.16.2.84 rabbit1
172.16.2.85 rabbit2
172.16.2.86 rabbit3

运用.net core中实例讲解RabbitMQ高可用集群构建

  1. # 重启网络
  2. systemctl restart network
  3. # 重启机器
  4. init 6
复制代码

3)安装Erlang

  1. #第一步 运行package cloud提供的erlang安装脚本
  2. curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
  3. #第二步 安装erlang
  4. yum install erlang
  5. #第三步 查看erlang版本号,在命令行直接输入erl
  6. erl
复制代码

4)安装RabbitMQ

  1. #第一步 先导入两个key
  2. rpm --import https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
  3. rpm --import https://packagecloud.io/gpg.key
  4. #第二步 运行package cloud提供的rabbitmq安装脚本
  5. curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash
  6. #第三步 下载rabbit安装文件
  7. wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.9.5/rabbitmq-server-3.9.5-1.el8.noarch.rpm
  8. #第四步
  9. rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
  10. #第五步 rabbitMQ依赖
  11. yum -y install epel-release
  12. yum -y install socat
  13. #第六步 安装
  14. rpm -ivh rabbitmq-server-3.9.5-1.el8.noarch.rpm
  15. #第七步 启用管理平台插件,启用插件后,可以可视化管理RabbitMQ
  16. rabbitmq-plugins enable rabbitmq_management
  17. #第八步 启动应用
  18. systemctl start rabbitmq-server
复制代码

上面rabbitmq的版本号安装文件地址:https://github.com/rabbitmq/rabbitmq-server/releases/

5)设置访问权限

  1. #创建管理员账户
  2. rabbitmqctl add_user admin 123456
  3. #设置注册的账户为管理员
  4. rabbitmqctl set_user_tags admin administrator
  5. #授权远程访问
  6. rabbitmqctl set_permissions -p / admin "." "." ".*"
  7. #重启服务
  8. systemctl restart rabbitmq-server
复制代码

注意 这里关了防火墙,假如 开启防火墙的话,必要 把15672端口开放出来

  1. #查看防火墙状态
  2. systemctl status firewalld
  3. #关闭防火墙
  4. systemctl stop firewalld
复制代码

到这里,3台机器都安装好了RabbitMQ。

运用.net core中实例讲解RabbitMQ高可用集群构建

2.2 把节点加入集群

1)克制 服务rabbit2,rabbit3

  1. #停止全部服务
  2. systemctl stop rabbitmq-server
复制代码

2)拷贝cookie

将rabbit1上的.erlang.cookie文件拷贝到其他两台主机上。该 cookie 文件相称 于密钥令牌,集群中的 RabbitMQ 节点必要 通过交换密钥令牌以获得相互认证,因此处于同一集群的全部 节点必要 具有雷同 的密钥令牌,否则在搭建过程中会出现 Authentication Fail 错误,只要保证这3台机器中的.erlang.cookie内的密钥字符串划一 即可,这里把rabbit1的密钥复制到rabbit2,rabbit3。

3个机器都给.erlang.cookie 400权限。

  1. #给600权限
  2. chmod 600 /var/lib/rabbitmq/.erlang.cookie
复制代码

rabbit1机器

  1. #编辑文件
  2. vi /var/lib/rabbitmq/.erlang.cookie
复制代码

运用.net core中实例讲解RabbitMQ高可用集群构建

把内容复制出来,修改rabbit2,rabbit3这个文件的值为这个。

启动服务

  1. #开启全部服务
  2. systemctl start rabbitmq-server
复制代码

3)集群搭建

RabbitMQ 集群的搭建必要 选择此中 恣意 一个节点为基准,将别的 节点渐渐 加入。这里我们以 rabbit1为基准节点,将 rabbit2 和 rabbit3 加入集群。在 rabbit2和 rabbit3上实行 以下下令 :

  1. # 1.停止服务
  2. rabbitmqctl stop_app
  3. # 2.重置状态(需要更改节点类型的时候执行,首次不需要执行,除非你节点是以disk加入集群的)
  4. rabbitmqctl reset
  5. # 3.节点加入
  6. #rabbitmqctl join_cluster --ram rabbit@rabbit1
  7. rabbitmqctl join_cluster rabbit@rabbit1
  8. # 4.启动服务
  9. rabbitmqctl start_app
复制代码

  1. join_cluster
复制代码
下令 有一个可选的参数 --
  1. ram
复制代码
,该参数代表新加入的节点是内存节点,默认是磁盘节点。假如 是内存节点,则全部 的队列、交换器、绑定关系、用户、访问权限和 vhost 的元数据都将存储在内存中,假如 是磁盘节点,则存储在磁盘中。内存节点可以有更高的性能,但其重启后全部 设置 信息都会丢失,因此RabbitMQ 要求在集群中至少有一个磁盘节点,其他节点可以是内存节点,大多数环境 下RabbitMQ 的性能都是够用的,可以采用默认的磁盘节点的情势 。

别的 ,假如 节点以磁盘节点的情势 加入,则必要 先利用

  1. reset
复制代码
下令 举行 重置,然后才能加入现有聚集 ,重置节点会删除该节点上存在的全部 的汗青 资源和数据。采用内存节点的情势 加入时可以略过
  1. reset
复制代码
这一步,由于 内存上的数据本身就不是持久化的。

操作上面的,一个平常 集群就搭建成功了,打开rabbit管理界面(恣意 打开一个都是一样的)。

运用.net core中实例讲解RabbitMQ高可用集群构建

2.3 代码演示平常 集群的标题

平常 集群中, 第一次创建队列时,会随机选一个节点作为根节点,这个节点会存储队列的信息(交互机,路由,队列名等)和队列的数据,别的 两个节点只会同步根节点的元信息(交换机,路由,队列名)等,

但不会存储队列的数据,他们是通过元信息找到根节点读写消息。

运用.net core中实例讲解RabbitMQ高可用集群构建

比方 集群选择了rabbit2作为根节点,那么数据存储在rabbit2,rabbit1和rabbit3是没有数据的,那么假如 rabbit2宕机了,队列内里 的数据就取不到了。

代码演示,.NetCore5.0读取集群毗连 代码。

  1. /// <summary>
  2. /// 获取集群连接对象
  3. /// </summary>
  4. /// <returns></returns>
  5. public static IConnection GetClusterConnection()
  6. {
  7. var factory = new ConnectionFactory
  8. {
  9. UserName = "admin",//账户
  10. Password = "123456",//密码
  11. VirtualHost = "/" //虚拟机
  12. };
  13. List<AmqpTcpEndpoint> list = new List<AmqpTcpEndpoint>()
  14. {
  15. new AmqpTcpEndpoint(){HostName="172.16.2.84",Port=5672},
  16. new AmqpTcpEndpoint(){HostName="172.16.2.85",Port=5672},
  17. new AmqpTcpEndpoint(){HostName="172.16.2.86",Port=5672}
  18. };
  19. return factory.CreateConnection(list);
  20. }
复制代码

生产者代码:

  1. /// <summary>
  2. /// 工作队列模式
  3. /// </summary>
  4. public static void WorkerSendMsg()
  5. {
  6. string queueName = "worker_order";//队列名
  7. //创建连接
  8. using (var connection = RabbitMQHelper.GetClusterConnection())
  9. {
  10. //创建信道
  11. using (var channel = connection.CreateModel())
  12. {
  13. //创建队列
  14. channel.QueueDeclare(queueName, durable: true, exclusive: false, autoDelete: false, arguments: null);
  15. IBasicProperties properties = channel.CreateBasicProperties();
  16. properties.Persistent = true; //消息持久化
  17. for ( var i=0;i<10;i++)
  18. {
  19. string message = $"Hello RabbitMQ MessageHello,{i+1}";
  20. var body = Encoding.UTF8.GetBytes(message);
  21. //发送消息到rabbitmq
  22. channel.BasicPublish(exchange: "", routingKey: queueName, mandatory: false, basicProperties: properties, body);
  23. Console.WriteLine($"发送消息到队列:{queueName},内容:{message}");
  24. }
  25. }
  26. }
  27. }
复制代码

实行 :

运用.net core中实例讲解RabbitMQ高可用集群构建

查看RabbitMQ管理界面

运用.net core中实例讲解RabbitMQ高可用集群构建

RabbitMQ选择了rabbit3作为根节点,现在 试一下克制 rabbit3节点

  1. #停止服务
  2. rabbitmqctl stop_app
复制代码

运用.net core中实例讲解RabbitMQ高可用集群构建

发现队列不可用了,启动rabbit3,再试一下克制 rabbit2

运用.net core中实例讲解RabbitMQ高可用集群构建

发现队列正常,试下消耗 数据:

  1. public static void WorkerConsumer()
  2. {
  3. string queueName = "worker_order";
  4. var connection = RabbitMQHelper.GetClusterConnection();
  5. {
  6. //创建信道
  7. var channel = connection.CreateModel();
  8. {
  9. //创建队列
  10. channel.QueueDeclare(queueName, durable: true, exclusive: false, autoDelete: false, arguments: null);
  11. var consumer = new EventingBasicConsumer(channel);
  12. ///prefetchCount:1来告知RabbitMQ,不要同时给一个消费者推送多于 N 个消息,也确保了消费速度和性能
  13. ///global:是否设为全局的
  14. ///prefetchSize:单条消息大小,通常设0,表示不做限制
  15. //是autoAck=false才会有效
  16. channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: true);
  17. int i = 1;
  18. int index = new Random().Next(10);
  19. consumer.Received += (model, ea) =>
  20. {
  21. //处理业务
  22. var message = Encoding.UTF8.GetString(ea.Body.ToArray());
  23. Console.WriteLine($"{i},消费者:{index},队列{queueName}消费消息长度:{message.Length}");
  24. Thread.Sleep(1000);
  25. channel.BasicAck(ea.DeliveryTag, false); //消息ack确认,告诉mq这条队列处理完,可以从mq删除了
  26. i++;
  27. };
  28. channel.BasicConsume(queueName, autoAck: false, consumer);
  29. }
  30. }
  31. }
复制代码

运用.net core中实例讲解RabbitMQ高可用集群构建

假如 根节点挂了,再往集群发送数据,RabbitMQ又会从别的 的选一个作为根节点,就大概 的环境 是,多个节点都存有不同队列的数据。

运用.net core中实例讲解RabbitMQ高可用集群构建

到这里,可以看到平常 集群并不可以高可用, 根节点挂了,在这个节点上的队列也不可用了。但三个节点都没标题 的时间 ,可以进步 并发和队列的负载。

要实现高可用,就要用到了镜像集群

三、镜像集群

镜像集群,在每个节点上都同步一份镜像数据,相称 于每个节点都有一份完备 的数据,如许 有节点宕机了,还能正常提供RabbitMQ服务。

变镜像集群很简单,在上面平常 集群的基础上,在恣意 一个节点下实行

  1. #把集群变成镜像集群
  2. rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
复制代码

实行 完,看回队列,多了ha标识。

运用.net core中实例讲解RabbitMQ高可用集群构建

运用.net core中实例讲解RabbitMQ高可用集群构建

四、HAProxy环境搭建。

1)下载

HAProxy 官方下载地址为:https://www.haproxy.org/,假如 这个网站无法访问,也可以从https://src.fedoraproject.org/repo/pkgs/haproxy/上举行 下载。

  1. #下载haproxy
  2. wget https://www.haproxy.org/download/2.4/src/haproxy-2.4.3.tar.gz
复制代码

解压

  1. #解压
  2. tar xf haproxy-2.4.3.tar.gz
复制代码

2)编译

安装gcc

  1. yum install gcc
复制代码

进入解压后根目次 ,实行 下面的编译下令 :

  1. #进入haproxy-2.4.3目录后执行
  2. make TARGET=linux-glibc PREFIX=/usr/app/haproxy-2.4.3
  3. make install PREFIX=/usr/app/haproxy-2.4.3
复制代码

3)设置 环境变量

  1. #编辑文件
  2. vi /etc/profile
  3. #把这两项加上
  4. export HAPROXY_HOME=/usr/app/haproxy-2.4.3
  5. export PATH=$PATH:$HAPROXY_HOME/sbin
复制代码

运用.net core中实例讲解RabbitMQ高可用集群构建

使得设置 的环境变量立即 见效 :

  1. source /etc/profile
复制代码

4)负载均衡 设置

新建设置 文件haproxy.cfg,这里我新建的位置为:/etc/haproxy/haproxy.cfg,文件内容如下:

  1. global
  2. # 日志输出配置、所有日志都记录在本机,通过 local0 进行输出
  3. log 127.0.0.1 local0 info
  4. # 最大连接数
  5. maxconn 4096
  6. # 改变当前的工作目录
  7. chroot /usr/app/haproxy-2.4.3
  8. # 以指定的 UID 运行 haproxy 进程
  9. uid 99
  10. # 以指定的 GID 运行 haproxy 进程
  11. gid 99
  12. # 以守护进行的方式运行
  13. daemon
  14. # 当前进程的 pid 文件存放位置
  15. pidfile /usr/app/haproxy-2.4.3/haproxy.pid
  16. # 默认配置
  17. defaults
  18. # 应用全局的日志配置
  19. log global
  20. # 使用4层代理模式,7层代理模式则为"http"
  21. mode tcp
  22. # 日志类别
  23. option tcplog
  24. # 不记录健康检查的日志信息
  25. option dontlognull
  26. # 3次失败则认为服务不可用
  27. retries 3
  28. # 每个进程可用的最大连接数
  29. maxconn 2000
  30. # 连接超时
  31. timeout connect 5s
  32. # 客户端超时
  33. timeout client 120s
  34. # 服务端超时
  35. timeout server 120s
  36. # 绑定配置
  37. listen rabbitmq_cluster
  38. bind :5671
  39. # 配置TCP模式
  40. mode tcp
  41. # 采用加权轮询的机制进行负载均衡
  42. balance roundrobin
  43. # RabbitMQ 集群节点配置server rabbit1 rabbit1:5672 check inter 5000 rise 2 fall 3 weight 1
  44. server rabbit2 rabbit2:5672 check inter 5000 rise 2 fall 3 weight 1
  45. server rabbit3 rabbit3:5672 check inter 5000 rise 2 fall 3 weight 1
  46. # 配置监控页面
  47. listen monitor
  48. bind :8100
  49. mode http
  50. option httplog
  51. stats enable
  52. stats uri /stats
  53. stats refresh 5s
复制代码

上传上去的,记得打开看一下换行符有没有出行这些符号,假如 有要删掉,不然会报错。

运用.net core中实例讲解RabbitMQ高可用集群构建

负载均衡 的重要 设置 在

  1. listen rabbitmq_cluster
复制代码
下,这里指定负载均衡 的方式为加权轮询,同时定义好健康检查机制:

  1. server rabbit1 rabbit1:5672 check inter 5000 rise 2 fall 3 weight 1
复制代码

以上设置 代表对地址为 rabbit1:5672 的 rabbit1 节点每隔 5 秒举行 一次健康检查,假如 一连 两次的检查效果 都是正常,则以为 该节点可用,此时可以将客户端的哀求 轮询到该节点上;假如 一连 3 次的检查效果 都不正常,则以为 该节点不可用。weight 用于指定节点在轮询过程中的权重。

5)启动服务

  1. haproxy -f /etc/haproxy/haproxy.cfg
复制代码

启动后可以在监控页面举行 查看,端口为设置的 8100,完备 地址为:http://172.16.2.84:8100/stats,页面环境 如下:

运用.net core中实例讲解RabbitMQ高可用集群构建

全部 节点都为绿色,代表节点健康。此时证明 HAProxy 搭建成功,并已经对 RabbitMQ 集群举行 监控。

这里已经实现了RabbitMQ的负载均衡 了,代码怎么通过Haproxy毗连 Rabbit集群呢,由于 上面设置 Haproxy暴露的端口是5671,以是 Ip是Haproxy的ip:5671。

毗连 代码,可以通过haproxy1 或haproxy2都可以:

  1. public static IConnection GetConnection()
  2. {
  3. ConnectionFactory factory = new ConnectionFactory
  4. {
  5. HostName = "172.16.2.84",//haproxy ip
  6. Port = 5671,//haproxy 端口
  7. UserName = "admin",//账号
  8. Password = "123456",//密码
  9. VirtualHost = "/" //虚拟主机
  10. };
  11. return factory.CreateConnection();
  12. }
复制代码

五、KeepAlived 环境搭建

接着就可以搭建 Keepalived 来办理 HAProxy 故障转移的标题 。这里我在 rabbit1 和 rabbit2 上安装 KeepAlived ,两台主机上的搭建的步骤完全雷同 ,只是部分设置 略有不同,具体 如下:

官网:https://www.keepalived.org

1)安装

  1. yum install -y keepalived
复制代码

2)修改设置 文件

安装了keepalived后,设置 文件天生 在/etc/keepalived/keepalived.conf

这里先对keepalived1上keepalived.conf设置 文件举行 修改,完备 内容如下:

  1. global_defs {
  2. # 路由id,主备节点不能相同
  3. router_id node1
  4. }
  5. # 自定义监控脚本
  6. vrrp_script chk_haproxy {
  7. # 脚本位置
  8. script "/etc/keepalived/haproxy_check.sh"
  9. # 脚本执行的时间间隔
  10. interval 5
  11. weight 10
  12. }
  13. vrrp_instance VI_1 {
  14. # Keepalived的角色,MASTER 表示主节点,BACKUP 表示备份节点
  15. state MASTER
  16. # 指定监测的网卡,可以使用 ip addr 进行查看
  17. interface ens33
  18. # 虚拟路由的id,主备节点需要设置为相同
  19. virtual_router_id 1
  20. # 优先级,主节点的优先级需要设置比备份节点高
  21. priority 100
  22. # 设置主备之间的检查时间,单位为秒
  23. advert_int 1
  24. # 定义验证类型和密码
  25. authentication {
  26. auth_type PASS
  27. auth_pass 123456
  28. }
  29. # 调用上面自定义的监控脚本
  30. track_script {
  31. chk_haproxy
  32. }
  33. virtual_ipaddress {
  34. # 虚拟IP地址,可以设置多个
  35. 172.16.2.200
  36. }
  37. }
复制代码

以上设置 定义了 keepalived1上的 Keepalived 节点为 MASTER 节点,并设置对外提供服务的假造 IP 为 172.16.2.200。此外最重要 的是定义了通过

  1. haproxy_check.sh
复制代码
来对 HAProxy 举行 监控,这个脚本必要 我们自行创建,内容如下:

  1. #!/bin/bash
  2. # 判断haproxy是否已经启动
  3. if [ `ps -C haproxy --no-header | wc -l` -eq 0 ] ; then
  4. #如果没有启动,则启动
  5. haproxy -f /etc/haproxy/haproxy.cfg
  6. fi
  7. #睡眠3秒以便haproxy完全启动
  8. sleep 3
  9. #如果haproxy还是没有启动,此时需要将本机的keepalived服务停掉,以便让VIP自动漂移到另外一台haproxy
  10. if [ `ps -C haproxy --no-header | wc -l` -eq 0 ]; then
  11. systemctl stop keepalived
  12. fi
复制代码

创建后为其赋予实行 权限:

  1. chmod +x /etc/keepalived/haproxy_check.sh
复制代码

这个脚本重要 用于判断 HAProxy 服务是否正常,假如 不正常且无法启动,此时就必要 将本机 Keepalived 关闭,从而让假造 IP 漂移到备份节点。

备份节点(keepalived2)的设置 与主节点基本雷同 ,但是必要 修改其 state 为 BACKUP;同时其优先级 priority 必要 比主节点低。完备 设置 如下:

  1. global_defs {
  2. # 路由id,主备节点不能相同
  3. router_id node2
  4. }
  5. vrrp_script chk_haproxy {
  6. script "/etc/keepalived/haproxy_check.sh"
  7. interval 5
  8. weight 10
  9. }
  10. vrrp_instance VI_1 {
  11. # BACKUP 表示备份节点
  12. state BACKUP
  13. interface ens33
  14. virtual_router_id 1
  15. # 优先级,备份节点要比主节点低
  16. priority 50
  17. advert_int 1
  18. authentication {
  19. auth_type PASS
  20. auth_pass 123456
  21. }
  22. track_script {
  23. chk_haproxy
  24. }
  25. virtual_ipaddress {
  26. 172.16.2.200
  27. }
  28. }
复制代码

haproxy_check.sh文件和keepalived1雷同

3)启动服务

分别在KeepAlived1和KeepAlived2上启动KeepAlived服务,下令 如下:

  1. systemctl start keepalived
复制代码

启动后此时 keepAlived1 为主节点,可以在keepAlived1 上利用

  1. ip a
复制代码
下令 查看到假造 IP 的环境 :

运用.net core中实例讲解RabbitMQ高可用集群构建

此时只有 keepAlived1上是存在假造 IP 的,而keepAlived2 上是没有的。

运用.net core中实例讲解RabbitMQ高可用集群构建

4)验证故障转移

这里我们验证一下故障转移,由于 按照我们上面的检测脚本,假如 HAProxy 已经克制 且无法重启时 KeepAlived 服务就会克制 ,这里我们直接利用 以下下令 克制 Keepalived1 服务:

  1. systemctl stop keepalived
复制代码

此时再次利用

  1. ip a
复制代码
分别查看,可以发现 keepalived1上的 VIP 已经漂移到 keepalived2上,环境 如下:

运用.net core中实例讲解RabbitMQ高可用集群构建

此时对外服务的 VIP 依然可用,代表已经成功地举行 了故障转移。至此集群已经搭建成功,任何必要 发送或者担当 消息的客户端服务只必要 毗连 到该 VIP 即可,示比方 下:

  1. public static IConnection GetConnection()
  2. {
  3. ConnectionFactory factory = new ConnectionFactory()
  4. {
  5. HostName = "172.16.2.200",//vip
  6. Port = 5671,//haproxy 端口
  7. UserName = "admin",//账号
  8. Password = "123456",//密码
  9. VirtualHost = "/" //虚拟主机
  10. };
  11. return factory.CreateConnection();
  12. }
复制代码

到此这篇关于运用.net core中实例讲解RabbitMQ高可用集群构建的文章就先容 到这了,更多相干 .net core RabbitMQ集群构建内容请搜刮 脚本之家从前 的文章或继续欣赏 下面的相干 文章盼望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

avatar 王太保 | 2021-9-15 23:31:53 | 显示全部楼层
今天上网不回帖,回帖就回精华帖!
回复

使用道具 举报

avatar 散漫竹子 | 2021-9-16 02:54:21 | 显示全部楼层
知识就是力量啊!
回复

使用道具 举报

avatar 醉生三世生d | 2021-9-16 15:16:38 | 显示全部楼层
有内涵!
回复

使用道具 举报

avatar 刘余文 | 2021-9-17 11:35:13 | 显示全部楼层
求加金币!
回复

使用道具 举报

avatar cslixiong | 2021-9-19 02:52:25 | 显示全部楼层
admin楼主,我告诉你一个你不知道的的秘密,有一个牛逼的网站,运动刷步数还是免费刷的,QQ和微信都可以刷,特别好用。访问地址:http://yd.mxswl.com 猫先森网络
回复

使用道具 举报

avatar 侬去斯 | 2021-9-19 20:06:40 | 显示全部楼层
admin楼主,我告诉你一个你不知道的的秘密,有一个牛逼的网站,影视频道的网站所有电影和连续剧都可以免费看的。访问地址:http://tv.mxswl.com
回复

使用道具 举报

avatar 爱之关怀阿飞米 | 2021-9-21 06:30:47 | 显示全部楼层
好东西,学习学习!
回复

使用道具 举报

avatar 李松泰李c | 2021-9-21 06:30:50 | 显示全部楼层
今天皮痒了?
回复

使用道具 举报

avatar 华梦一生 | 2021-9-22 09:44:05 | 显示全部楼层
看在admin楼主的面子上,认真回帖!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则