zoukankan      html  css  js  c++  java
  • Rabbitmq-Peer Discovery on AWS (EC2)

    Rabbitmq-Peer Discovery on AWS (EC2)

    AWS上的对等发现(EC2)

    aws(ec2)特定发现机制可以通过插件获得,它为节点提供了两种发现其对等点的方法:

    1.使用ec2实例标记

    2.使用aws自动标度组成员

    这两种方法都依赖于aws特定的API,因此无法在其他IaaS环境中工作。

    一旦检索到集群成员实例列表,最终节点名称使用实例主机名或IP地址计算。

    使用AWS对等发现机制时,节点将延迟启动以获取随机选择的值,以降低初始群集形成期间竞争条件的可能性。

    1.创建角色和Accesskey

    在aws平台创建一个角色绑定一个用户,具体步骤不演示,角色权限如下图:

    内容:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "autoscaling:DescribeAutoScalingInstances",
                    "ec2:DescribeInstances"
                ],
                "Resource": [
                    "*"
                ]
            }
        ]
    }

     为上述角色绑定的用户创建访问密钥:

    请妥善保管密钥下面将使用密钥等信息

     2.Rabbitmq部署

    准备搭建Rabbitmq的镜像和机器,因为此对等发现只针对AWS-EC2,所以选用AWS的镜像

    启动实例选择镜像:

    Amazon Linux 2 AMI (HVM), SSD Volume Type - ami-b70554c8
    这里选用的Amazon Linux 2  也就是我们常用的Centos镜像,根据自己需求设置好相关安区组子网等选项启动实例。
    说明:通过插件可以获得更多的对等发现机制。从3.7.0开始,RabbitMQ附带对等发现插件,所以我们安装的Rabbitmq-server要选择大于等于3.7.0的版本

    3.配置AWS CLI

    对等发现机制及aws内部服务调用很多都是通过aws cli去调用API执行的,此步很重要。

    aws configure

    根据提示输入:

    AWS Access Key ID、密码、可用区、输出格式,这里的access key 信息就是之前在用户界面创建的。

    4.安装Erlang

    vim /etc/yum.repos.d/rabbitmq-erlang.repo
    [rabbitmq-erlang]
    name=rabbitmq-erlang
    baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/20/el/7
    gpgcheck=1
    gpgkey=https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
    repo_gpgcheck=0
    enabled=1
    
    yum install erlang -y
    

    5.安装Rabbitmq-server

    wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.6/rabbitmq-server-3.7.6-1.el7.noarch.rpm
    rpm --import https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
    yum install rabbitmq-server-3.7.6-1.el7.noarch.rpm -y
    

     6.启动插件并设计Rabbitmq开机启动

     rabbitmq-plugins --offline enable rabbitmq_peer_discovery_aws   #aws对等发现插件(一定在启动rabbitmq之前启动)
     rabbitmq-plugins enable rabbitmq_management (管理插件)
     systemctl enable rabbitmq-server
    

    7.修改Rabbitmq可用guest登录方式

    vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.7.6/ebin/rabbit.app
    #修改39行把[]里的内容去掉,修改后的结果如下:
    
    {loopback_users, []}, 
    

    8.优化系统限制

    运行生产工作负载的RabbitMQ安装可能需要系统限制和内核参数调整,以便处理更多的并发连接和队列。需要调整的主要设置是打开文件的最大数量,ulimit -n
    许多操作系统上的默认值太低(例如,在几个Linux发行版上为1024),个人建议在生产环境中为用户rabbitmq至少允许65536个文件描述符。
    有两个限制操作系统内核允许的最大打开文件数(fs.file-max)和每个用户限制(ulimit -n),前者必须高于后者

    fs.file-max设置

    echo 'fs.file-max = 65535' >> /etc/sysctl.conf

    解除 Linux 系统的最大进程数和最大文件打开数限制

    cat /etc/security/limits.conf
    
    root soft nofile 65535
    root hard nofile 65535
    * soft nofile 65535
    * hard nofile 65535
    ##以上4行在文档末尾添加
    =====================================
    #为了避免重启失效,加入rc.local
    echo 'ulimit -SHn 65535' > /etc/rc.local
    

     rabbitmq-server配置

    sed -i '11a LimitNOFILE=20000' /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service
    在[Service]模块中添加LimitNOFILE=20000 (具体参数根据需求调整)

    systemctl daemon-reload 修改完Rabbitmq服务需要重新加载服务

    9.修改.erlang.cookie 权限 

    cd /var/lib/rabbitmq/ && chown rabbitmq.rabbitmq .erlang.cookie

     默认安装完服务属主属组都是root,在启动rabbitmq时会报错,所以在启动前先修改一下,另外对等发现注册依赖于.erlang.cookie 所以注册节点必须和主节点的 cookie值必须一致,

     我们制作成镜像应用autoscaling自行扩展所以就不会存在cooke不一致的问题了。

    10.Rabbitmq配置文件

    vim /etc/rabbitmq/rabbitmq.conf
    #1.这部分设置了access_key等相关信息和告诉Rabbitmq后端的对等发现模式是 autoscaling_grou
    
    cluster_formation.peer_discovery_backend = rabbit_peer_discovery_aws
    cluster_formation.aws.region = us-east-1
    
    cluster_formation.aws.access_key_id = AKIAIMYGK*********
    
    cluster_formation.aws.secret_key = d9O6apD/Vyc9t*********************
    cluster_formation.aws.use_autoscaling_group = true
    
    #2.这部分设置了rabbitmq的一些基本优化
    
    listeners.tcp.default = 5672                      #要侦听AMQP连接的端口或主机名   
    vm_memory_high_watermark.relative = 0.8           #触发流控制的内存阈值。可以是绝对的,也可以是相对于操作系统可用的RAM数量
    cluster_partition_handling = pause_minority       #如何处理网络分区,默认值为ignore
    loopback_users = none                             #允许默认来宾用户远程连接 需要修改为none 默认值为localhost
    heartbeat = 60                                    #表示服务器在connection.tune帧中发送的心跳延迟(以秒为单位)的值。如果设置为0,则禁用心跳,禁用心跳可能会在具有大量连接的情况下提高性能,但可能会导致在存在关闭非活动连接的网络设备时连接中断。
    vm_memory_high_watermark_paging_ratio = 0.75      #队列开始将消息分页到磁盘以释放内存的高水位限制的分数
    disk_free_limit.absolute = 2GB                    #RabbitMQ存储数据的分区的磁盘可用空间限制。当可用磁盘空间低于此限制时,将触发流量控制。该值可以相对于RAM总量设置,也可以设置为绝对值(以字节为单位),或者以信息单位(例如“50MB”或“5GB”)设置
    collect_statistics = coarse                       #统计收集模式。主要与管理插件相关 这里选择粗略统计
    collect_statistics_interval = 2500                #统计信息收集间隔(毫秒)。主要与管理插件相关。单位:毫秒
    queue_master_locator = random                     #队列master策略,默认值:client-local 这里选择随机             
    cluster_keepalive_interval = 2500                 #节点应该多长时间向其他节点发送keepalive消息(以毫秒为单位)。请注意,这与net_ticktime不同;错过的keepalive消息不会导致节点被视为关闭。
    hipe_compile = true                               #设置为true以使用HiPE预编译RabbitMQ的部分,HiPE是Erlang的即时编译器。这将以增加启动时间为代价来增加服务器吞吐量。您可能会在启动时延迟几分钟后看到20-50%的性能提升。这些数字与工作负载和硬件有很大关系。
    
    #3.管理插件的一些优化参数
    
    management.sample_retention_policies.global.minute    = 5
    management.sample_retention_policies.global.hour  = 60
    management.sample_retention_policies.global.day = 1200
    
    management.sample_retention_policies.basic.minute   = 5
    management.sample_retention_policies.basic.hour = 60
    
    management.sample_retention_policies.detailed.10 = 5
    

      

    11.启动Rabbitmq-server

    systemctl start rabbitmq-server

    12.封装镜像

    在安装rabbitmq的创建AMI镜像,通过此镜像创建启动配置,创建auto scaling组验证结果

    13.创建启动配置和Auto Scaling组

    注意创建Auto Scaling组的安全组的时候,相关端口要设置允许,否则影响对等发现

    组大小设置为2,为了验证Auto Scaling创建的2个实例是否可以完成自动发现,自动注册并形成集群

    登录机器验证:

    [root@ip-172-31-11-83 ~]# rabbitmqctl cluster_status 
    Cluster status of node rabbit@ip-172-31-11-83 ...
    [{nodes,[{disc,['rabbit@ip-172-31-11-83','rabbit@ip-172-31-25-160']}]},
     {running_nodes,['rabbit@ip-172-31-25-160','rabbit@ip-172-31-11-83']},
     {cluster_name,<<"rabbit@ip-172-31-11-83.ec2.internal">>},
     {partitions,[]},
     {alarms,[{'rabbit@ip-172-31-25-160',[]},{'rabbit@ip-172-31-11-83',[]}]}]

    经过查看通过AutoScaling创建的2个主机自动注册发现实验成功,这样后续配合监控等相关信息,可以基于封装好AMI自动扩容,缩容了。

    也许世上本没有幸运二字,只有那些给自己提出严格的要求,并且以高度自律逼自己完成的人,才能得到别人眼里的心想事成。
  • 相关阅读:
    html float
    HTML:scrollLeft,scrollWidth,clientWidth,offsetWidth之完全详解
    FLEX 如何跳出警告对话框 Alert
    点击超链接,不改变滚动条位置
    HTML DOM CSS position的用法
    FLEX 动态添加事件
    html display
    php和swf通信
    html css float left与 float right的使用说明
    如何去除FLEX LINECHART 线条阴影
  • 原文地址:https://www.cnblogs.com/shigozsr/p/9412080.html
Copyright © 2011-2022 走看看