aws 可用区_多个AWS可用区中的RabbitMQ

aws 可用区

在使用AWS时,为了具有高度可用的设置,一次必须在多个可用区域(AZ≈数据中心)中拥有实例。 如果一个可用区死亡(可能会发生),则您的应用程序应继续处理请求。

在多个可用区中设置应用程序节点很简单(如果将它们正确地编写为无状态的话),但是对于数据库,消息队列和所有有状态的对象来说,这比较麻烦。 因此,让我们看看如何配置RabbitMQ。 第一步不仅与RabbitMQ有关,而且与任何持久数据解决方案都无关。

首先(无论使用CloudFormation还是手动设置),您必须:

  • 有一个VPC。 没有VPC可能有可能,但是我无法保证,尤其是如下所述的DNS主机名
  • 声明专用子网(对于每个可用区)
  • 使用以下方法声明RabbitMQ自动缩放组(建议有一个)来跨越多个可用区:
    "AvailabilityZones" : { 
              "Fn::GetAZs" : {
                "Ref": "AWS::Region"
              }
            }
  • 使用VPCZoneIdentifier属性声明RabbitMQ自动缩放组以跨越多个子网
  • 在RabbitMQ节点之前声明LoadBalancer(这是确保将负载平均分配到Rabbit集群的最简单方法),以覆盖所有子网
  • 将LoadBalancer声明为"CrossZone": true

然后是特定的RabbitMQ配置。 通常,您有两种选择:

在WAN的情况下,不建议使用群集,但是可用区域之间的连接可以被视为LAN(可能有些乐观)( 本详细文章假定是其他情况,但是该线程暗示在多个可用区上使用群集是可以的)。

使用联合身份验证,您可以声明交换将它们收到的所有消息发送到另一个节点的交换。 这在广域网中很有用,在广域网中,网络断开很常见,而速度并不是那么重要。 但是它可能仍然适用于多可用区场景,因此值得研究。 这是一个示例 ,其中包含要执行的确切命令,以及如何使用federation plugin实现该命令的示例 。 联合身份验证的棘手部分是自动缩放-每当需要添加新节点时,都应修改(某些)现有节点配置,以便将新节点设置为上游节点。 您可能还需要允许其他计算机以访客身份连接到Rabbitmq(rabbitmq conf文件中的[{rabbit, [{loopback_users, []}]}] ),或找到一种方法来配置用于联盟的自定义用户名/密码对上班。

使用群集时,它有所不同,并且实际上更易于设置。 您要做的就是编写一个脚本,在启动时自动加入集群。 这可能是使用AWS开发工具包的Shell脚本或python脚本。 这样的脚本的主要步骤(坦白地说,不是那么简单):

  • 在RabbitMQ自动扩展组中查找所有正在运行的实例(使用AWS API过滤选项)
  • 如果这是第一个节点(顺序是随机的,没关系),请假定它是集群的“种子”节点,所有其他节点都将连接到该节点
  • 如果这不是第一个节点,请连接到第一个节点(使用rabbitmqctl join_cluster rabbit@{node} ),其中{node}是实例私有DNS名称(可通过SDK获得)
  • 完成所有配置时,请停止RabbitMQ,完成后再启动它

在所有情况下(集群或联合),RabbitMQ都依赖域名。 使它工作最简单的方法是在VPC中启用DNS主机名: "EnableDnsHostnames": true 。 这里有一个小技巧,当它表示要加入集群时– AWS API可能会返回完全限定的域名,除了ip-xxx-xxx之外,还包括“ .eu-west-1.compute.internal”之类的内容。 -xxx-xxx部分。 因此,在加入RabbitMQ集群时,应删除该后缀,否则它将不起作用。

最终结果应该允许一个群集,如果一个节点死亡而又产生了一个节点(通过自动缩放组),则该群集应该能够正常运行。

将这两种方法与PerfTest进行比较,可以为集群选项提供更好的吞吐量-联合处理的消息大约减少了1/3,并且延迟也有所增加。 测试应从应用程序节点向RabbitMQ ELB执行(否则,您仅测试一个节点)。 您可以获取PerfTest并执行类似的操作(其中amqp地址是RabbitMQ负载均衡器的DNS名称):

wget http://www.rabbitmq.com/releases/rabbitmq-java-client/v3.3.4/rabbitmq-java-client-bin-3.3.4.tar.gz
tar -xvf rabbitmq-java-client-bin-3.3.4.tar.gz
cd rabbitmq-java-client-bin-3.3.4
sudo sh runjava.sh com.rabbitmq.examples.PerfTest -x 10 -y 10 -z 10 -h amqp://internal-foo-RabbitMQEl-1GM6IW33O-1097824.eu-west-1.elb.amazonaws.com:5672

您将采用两种方法中的哪一种取决于您的特定情况,但是我通常会建议使用群集选项。 性能更高,在云环境中的设置和支持也更容易,节点经常产生和死亡。

翻译自: https://www.javacodegeeks.com/2014/07/rabbitmq-in-multiple-aws-availability-zones.html

aws 可用区

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值