• 安装RabbitMQ单机和集群


    安装单机MQ

    官网

    https://www.rabbitmq.com/download.html
    ## Ubuntu
    https://www.rabbitmq.com/install-debian.html
    

    更新源

    [root@mq1 ~]# apt-get update -y
    

    安装软件

    [root@mq1 ~]# sudo apt-get install curl gnupg debian-keyring debian-archive-keyring apt-transport-https -y
    

    下载

    [root@mq1 ~]# curl -fsSL https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc | sudo apt-key add -
    

    下载

    [root@mq1 ~]# sudo apt-get install curl gnupg debian-keyring debian-archive-keyring apt-transport-https -y
    

    导入key

    [root@mq1 ~]# sudo apt-key adv --keyserver "hkps://keys.openpgp.org" --recv-keys "0x0A9AF2115F4687BD29803A206B73A36E6026DFCA"
    

    导入key

    [root@mq1 ~]# sudo apt-key adv --keyserver "keyserver.ubuntu.com" --recv-keys "F77F1EDA57EBB1CC"
    

    下载

    [root@mq1 ~]# curl -1sLf 'https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey' | sudo apt-key add -
    

    添加源

    [root@mq1 ~]# sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
    # Provides modern Erlang/OTP releases
    #
    # "bionic" as distribution name should work for any reasonably recent Ubuntu or Debian release.
    # See the release to distribution mapping table in RabbitMQ doc guides to learn more.
    deb http://ppa.launchpad.net/rabbitmq/rabbitmq-erlang/ubuntu bionic main
    deb-src http://ppa.launchpad.net/rabbitmq/rabbitmq-erlang/ubuntu bionic main
    # Provides RabbitMQ
    #
    # "bionic" as distribution name should work for any reasonably recent Ubuntu or Debian release.
    # See the release to distribution mapping table in RabbitMQ doc guides to learn more.
    deb https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ bionic main
    deb-src https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ bionic main
    EOF
    

    更新源

    [root@mq1 ~]# sudo apt-get update -y
    

    安装erlang

    [root@mq1 ~]# sudo apt-get install -y erlang-base erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key erlang-runtime-tools erlang-snmp erlang-ssl erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl
    

    安装mq

    [root@mq1 ~]# sudo apt-get install rabbitmq-server -y --fix-missing
    

    查看安装的版本

    [root@mq1 ~]# rabbitmqctl version
    

    查看服务状态

    [root@mq1 ~]# systemctl status rabbitmq-server.service
    

    查看服务端口

    [root@mq1 ~]# ss -tanl
    
    5672:消费者访问的端口
    15672:web界面管理端口
    25672:集群状态通信端口
    

    查看插件

    [root@mq1 ~]# rabbitmq-plugins list
    

    开启mq的web界面

    [root@mq1 ~]# rabbitmq-plugins enable rabbitmq_management
    

    创建用户和密码

    [root@mq1 ~]# rabbitmqctl add_user longge 123456
    

    列出用户

    [root@mq1 ~]# rabbitmqctl list_users
    

    使用命令授权给用户

    [root@mq1 ~]# rabbitmqctl set_user_tags longge administrator
    

    查看授权的用户

    [root@mq1 ~]# rabbitmqctl list_users
    Listing users ...
    user    tags
    guest   [administrator]
    longge  [administrator]
    

    常见命令

    #创建 vhost
    root@mq-server1:~# rabbitmqctl add_vhost m44
    
    Adding vhost "m44" ... #列出所有 vhost
    
    root@mq-server1:~# rabbitmqctl list_vhosts
    
    Listing vhosts ... name
    m44
    /
    
    #列出所有队列
    root@mq-server1:~# rabbitmqctl list_queues
    
    Timeout: 60.0 seconds ... Listing queues for vhost / ...
    
    #删除指定 vhost
    root@mq-server1:~# rabbitmqctl delete_vhost m44
    
    Deleting vhost "m44" ... #添加账户 long 密码为 123456
    
    root@mq-server1:~# rabbitmqctl add_user long 123456
    
    Adding user "long" ...
    
    #更改用户密码
    root@mq-server1:~# rabbitmqctl change_password long 654321
    
    Changing password for user "long" ... #设置 jack 用户对 m44 的 vhost 有读写权限,三个点为配置正则、读和写
    
    root@mq-server1:~# rabbitmqctl set_permissions -p m44 long ".*" ".*" ".*" 
    
    Setting permissions for user "long" in vhost "m44" ...
    

    MQ集群

    Rabbitmq 集群分为二种方式:

    普通模式:创建好 RabbitMQ 集群之后的默认模式。
    镜像模式:把需要的队列做成镜像队列。
    

    普通集群模式:

    queue 创建之后,如果没有其它 policy,消息实体只存在于其中
    一个节点,A、B 两个 Rabbitmq 节点仅有相同的元数据,即队列结构,但队列的
    数据仅保存有一份,即创建该队列的 rabbitmq 节点(A 节点),当消息进入 A 节
    点的 Queue 中后,consumer 从 B 节点拉取时,RabbitMQ 会临时在 A、B 间进行
    消息传输,把 A 中的消息实体取出并经过 B 发送给 consumer,所以 consumer
    可以连接每一个节点,从中取消息,该模式存在一个问题就是当 A 节点故障后,
    B 节点无法取到 A 节点中还未消费的消息实体。
    

    镜像集群模式:

    把需要的队列做成镜像队列,存在于多个节点,属于 RabbitMQ 的 HA 方案(镜
    像模式是在普通模式的基础上,增加一些镜像策略)
    该模式解决了普通模式中的数据丢失问题,其实质和普通模式不同之处在于,消
    息实体会主动在镜像节点间同步,而不是在 consumer 取数据时临时拉取,该模
    式带来的副作用也很明显,除了降低系统性能外,如果镜像队列数量过多,加之
    大量的消息进入,集群内部的网络带宽将会被这种同步通讯大大消耗掉,所以在
    对可靠性要求较高的场合中适用,一个队列想做成镜像队列,需要先设置 policy,
    然后客户端创建队列的时候,rabbitmq 集群根据“队列名称”自动设置是普通集
    群模式或镜像队列
    

    集群中有两种节点类型:

    内存节点:只将数据保存到内存
    磁盘节点:保存数据到内存和磁盘。
    内存节点虽然不写入磁盘,但是它执行比磁盘节点要好,集群中,只需要一个磁
    盘节点来保存数据就足够了如果集群中只有内存节点,那么不能全部停止它们,
    否则所有数据消息在服务器全部停机之后都会丢失。
    

    推荐设计架构:

    在一个 rabbitmq 集群里,有 3 台或以上机器,其中 1 台使用磁盘模式,其它节
    点使用内存模式,内存节点无访问速度更快,由于磁盘 IO 相对较慢,因此可作
    为数据备份使用。
    

    创建 RabbitMQ 集群:

    Rabbitmq 的集群是依赖于 erlang 的集群来工作的,所以必须先构建起 erlang 的
    集群环境,而 Erlang 的集群中各节点是通过一个 magic cookie 来实现的,这个
    cookie 存放在 /var/lib/rabbitmq/.erlang.cookie 中,文件是 400 的权限,所以必须
    保证各节点 cookie 保持一致,否则节点之间就无法通信。
    

    Ubuntu 1804 安装集群版 RabbitMQ:

    集群环境,三台服务器,具体 IP 如下:
    172.31.2.41
    172.31.2.42
    172.31.2.43
    

    主机名解析配置:

    各 MQ 服务器配置本地主机名解析:

    [root@mq1 ~]# vim /etc/hosts
    
    172.31.2.41 mq1.exmple.local mq1
    172.31.2.42 mq2.exmple.local mq2
    172.31.2.43 mq3.exmple.local mq3
    

    各服务器安装 RabbitMQ:
    看上面的单机

    全部都要启动 RabbitMQ 服务:

    [root@mq1 ~]# systemctl start rabbitmq-server.service
    [root@mq1 ~]# systemctl enable rabbitmq-server.service
    

    先各服务器关闭 RabbitMQ

    [root@mq1 ~]# systemctl stop rabbitmq-server
    [root@mq2 ~]# systemctl stop rabbitmq-server
    [root@mq3 ~]# systemctl stop rabbitmq-server
    

    在 mq-server1 同步.erlang.cookie 至其他两台服务器:

    [root@mq1 ~]# scp /var/lib/rabbitmq/.erlang.cookie 172.31.2.42:/var/lib/rabbitmq/.erlang.cookie
    
    [root@mq1 ~]# scp /var/lib/rabbitmq/.erlang.cookie 172.31.2.43:/var/lib/rabbitmq/.erlang.cookie
    

    各服务器启动 RabbitMQ:

    [root@mq1 ~]# systemctl start rabbitmq-server.service
    [root@mq2 ~]# systemctl start rabbitmq-server.service
    [root@mq3 ~]# systemctl start rabbitmq-server.service
    

    查看当前集群状态:

    [root@mq1 ~]# rabbitmqctl cluster_status
    

    其他的机器开启web界面

    [root@mq2 ~]# rabbitmq-plugins enable rabbitmq_management
    [root@mq3 ~]# rabbitmq-plugins enable rabbitmq_management
    

    创建 RabbitMQ 集群:

    在 mq-server1 作为内存节点添加到 mq-server3,并作为内存节点,在 mq-server1
    执行以下命令:停止 app 服务

    [root@mq1 ~]# rabbitmqctl stop_app
    
    

    清空元数据

    [root@mq1 ~]# rabbitmqctl reset
    

    将 rabbitmq-server1 添加到集群当中,并成为内存节点,不加--ram 默认是磁盘节点

    [root@mq1 ~]# rabbitmqctl join_cluster rabbit@mq3 --ram
    

    启动服务

    [root@mq1 ~]# rabbitmqctl start_app
    

    在 mq-server2 作为内存节点添加到 mq-server3,并作为内存节点,在 mq-server2
    执行以下命令:

    [root@mq2 ~]# rabbitmqctl join_cluster rabbit@mq3 --ram
    

    启动服务

    [root@mq2 ~]# rabbitmqctl start_app
    

    mq3查看集群

    [root@mq3 ~]# rabbitmqctl cluster_status
    Cluster status of node rabbit@mq3 ...
    Basics
    
    Cluster name: rabbit@mq3.exmple.local
    
    Disk Nodes
    
    rabbit@mq3
    
    RAM Nodes
    
    rabbit@mq1
    rabbit@mq2
    
    Running Nodes
    
    rabbit@mq1
    rabbit@mq2
    rabbit@mq3
    
    Versions
    
    rabbit@mq1: RabbitMQ 3.9.3 on Erlang 24.0.5
    rabbit@mq2: RabbitMQ 3.9.3 on Erlang 24.0.5
    rabbit@mq3: RabbitMQ 3.9.3 on Erlang 24.0.5
    
    Maintenance status
    
    Node: rabbit@mq1, status: not under maintenance
    Node: rabbit@mq2, status: not under maintenance
    Node: rabbit@mq3, status: not under maintenance
    ...
    

    将集群设置为镜像模式:

    只要在其中一台节点执行以下命令即可:

    [root@mq3 ~]# rabbitmqctl set_policy ha-all "#" '{"ha-mode":"all"}'
    

    创建登录账户

    [root@mq3 ~]# rabbitmqctl add_user longge 123456
    
    [root@mq3 ~]# rabbitmqctl set_user_tags longge administrator
    

    API 用于监控

    https://rawcdn.githack.com/rabbitmq/rabbitmq-management/v3.8.9/priv/www/api/index.html
    
  • 相关阅读:
    量化投资:第3节 滑点策略与交易手续费
    量化投资:第2节 择时策略的优化
    量化投资: 第1节 择时策略的开发
    一步一步,完成sparkMLlib对日志文件的处理(1)
    JAVA接口与抽象类区别
    HDU1877 又一版 A+B
    HDU4548 美素数
    超级楼梯 HDU2041
    HDU2013 蟠桃记【递推】
    HDU1262 寻找素数对
  • 原文地址:https://www.cnblogs.com/xuanlv-0413/p/15168186.html
Copyright © 2020-2023  润新知