码迷,mamicode.com
首页 > 其他好文 > 详细

RabbitMQ部署单机多实例镜像集群(测试使用)

时间:2020-12-30 11:19:58      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:时间   global   redis   nta   rabbit   load   gem   没有   消息   

主机规划:

    192.168.0.137    连接端口: 5672  web端口: 15672    rabbit1       磁盘存储

    192.168.0.137    连接端口: 5673  web端口: 15673    rabbit2  磁盘存储

    192.168.0.137    连接端口: 5674  web端口: 15674    rabbit3  内存存储

集群的概念;

RabbitMQ集群分为两种

  1.普通集群

    以两个节点(rabbit1、rabbit2)为例来进行说明。 rabbit1和rabbit2两个节点仅有相同的元数据,即队列的结构,但消息实体只存在于其中一个节点rabbit1(或者rabbit2)中。 当消息进入rabbit1节点的Queue后,consumer从rabbit2节点消费时,RabbitMQ会临时在rabbit1、rabbit2间进行消息传输,把A中的消息实体取出并经过B发送给consumer。 所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue。否则无论consumer连rabbit1或rabbit2,出口总在rabbit1,会产生瓶颈。当rabbit1节点故障后,rabbit2节点无法取到rabbit1节点中还未消费的消息实体。 如果做了消息持久化,那么得等rabbit1节点恢复,然后才可被消费;如果没有持久化的话,就会产生消息丢失的现象。

  2.镜像集群(基于普通集群)

    在普通集群的基础上,把需要的队列做成镜像队列,消息实体会主动在镜像节点间同步,而不是在客户端取数据时临时拉取,也就是说多少节点消息就会备份多少份。 该模式带来的副作用也很明显,除了降低系统性能外,如果镜像队列数量过多,加之大量的消息进入,集群内部的网络带宽将会被这种同步通讯大大消耗掉。 所以在对可靠性要求较高的场合中适用。由于镜像队列之间消息自动同步,且内部有选举master机制,即使master节点宕机也不会影响整个集群的使用,达到去中心化的目的,从而有效的防止消息丢失及服务不可用等问题。

 

  

一: 关于内存和磁盘节点:

内存节点:
   内存节点将所有的队列、交换机、绑定、用户、权限和 vhost 的元数据定义存储在内存中,好处是可以使得像交换机和队列声明等操作更加的快速。例外情况是:持久的 queue 的内容将被保存到磁盘。
磁盘节点:
    将元数据存储在磁盘中,单节点系统只允许磁盘类型的节点,防止重启 RabbitMQ 的时候,丢失系统的配置信息。
注意点:
   1、内存节点由于不进行磁盘读写,它的性能比磁盘节点高。
   2、集群中可以存在多个磁盘节点,磁盘节点越多整个集群可用性越好,但是集群整体性能不会线性增加,需要权衡考虑。
           3、RabbitMQ 要求在集群中至少有一个磁盘节点,所有其他节点可以是内存节点,当节点加入或者离开集群时,必须要将该变更通知到至少一个磁盘节点。如果集群中唯一的一个磁盘节点崩溃的话,集群仍然可以保持运行,但是无法进行其他操作(增删改查),直到节点恢复。 
          4、设置两个磁盘节点,至少有一个是可用的,可以保存元数据的更改。
 二: 安装部署单机多实例普通集群:
  
  1. 安装依赖包。
yum -y install make gcc gcc-c++ m4 ncurses-devel openssl-devel unixODBC-devel
  1. 安装erlang。
    1. 下载erlang安装包。
wget http://erlang.org/download/otp_src_19.3.tar.gz
    1. 解压缩erlang安装包。
tar xzf otp_src_19.3.tar.gz
    1. 创建一个文件夹。
mkdir /usr/local/erlang
    1. 编译并安装erlang。
依次执行以下命令。
cd otp_src_19.3 ./configure --prefix=/usr/local/erlang --without-javac
make && make install
  1. 修改profile配置文件。
    1. 运行以下命令打开profile配置文件。
vi /etc/profile
    1. 按下i键,然后在文件末尾处添加如下内容:
export PATH=$PATH:/usr/local/erlang/bin
    1. 按下Esc键,然后输入:wq并回车,保存并关闭文件。
  1. 生效环境变量并检查。
    1. 运行以下命令使环境变量生效。
source /etc/profile
    1. 运行以下命令检查安装结果。
erl -version
  1. 下载并安装RabbitMQ。
    1. 下载RabbitMQ安装包。
wget -P /root "https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.9/rabbitmq-server-3.6.9-1.el7.noarch.rpm"
    1. 导入签名密钥。
sudo rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
    1. 安装RabbitMQ Server。
cd /root sudo yum install rabbitmq-server-3.6.9-1.el7.noarch.rpm
6.为保证数据安全,建议您删除默认用户。
RabbitMQ默认的账号用户名和密码都是guest。
sudo rabbitmqctl delete_user guest
 
7. 搭建rabbitmq集群镜像模式
      7.1 搭建rabbitmq集群前提条件   删除/var/lib/rabbitmq/mnesia下所有内容   rm -rf /var/lib/rabbitmq/mnesia/*
      7.2 确保rabbitmq服务关闭   rabbitmqctl stop
      7.3 启动rabbitmq三个实例
                RABBITMQ_NODE_PORT=5672 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15672}] " RABBITMQ_NODENAME=rabbit1 rabbitmq-server -detached
                RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}] " RABBITMQ_NODENAME=rabbit2 rabbitmq-server -detached
                RABBITMQ_NODE_PORT=5674 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}] " RABBITMQ_NODENAME=rabbit3 rabbitmq-server -detached
     7.4 将rabbit2加入集群,rabbit1为主节点,rabbit2为磁盘节点
                rabbitmqctl -n rabbit2 stop_app
                rabbitmqctl -n rabbit2 reset
                rabbitmqctl -n rabbit2 join_cluster rabbit1@localhost
                rabbitmqctl -n rabbit2 start_app
  7.5 将rabbit3加入集群,rabbit1为主节点,rabbit3为RAM内存节点
                rabbitmqctl -n rabbit3 stop_app
                rabbitmqctl -n rabbit3 reset
                rabbitmqctl n rabbit3 join_cluster rabbit1@localhost --ram
                rabbitmqctl -n rabbit3 start_app
8.创建管理用户:
 8.1 添加用户  rabbitmqctl add_user -n 节点(rabbit1) 用户 密码
      8.2 添加权限  rabbitmqctl set_permissions -p "/" 用户 ".*" ".*" ".*"
      8.3 修改用户角色  rabbitmqctl set_user_tags 用户 administrator
9. 查看集群状态
        rabbitmqctl -n rabbit1 cluster_status

1.0. 主节点下设置策略:

[root@localhost haproxy]# rabbitmqctl -n rabbit1 set_policy -p my-vhost ha "^" ‘{"ha-mode":"all","ha-sync-mode":"automatic"}‘

三   基于普通集群部署镜像集群.
1.部署haproxy (要开启IP转发)
[root@localhost haproxy]# yum -y install haproxy
[root@localhost haproxy]# vim /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local2
 
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
defaults
mode tcp
log global
option tcplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
retries 3 ###3次连接失败就认为服务不可用,也可以通过后面设置
listen stats
bind 0.0.0.0:1080 #监听端口
mode http
option httplog
stats refresh 5s #统计页面自动刷新时间
stats uri /stats #统计页面url
stats realm Haproxy Manager #统计页面密码框上提示文本
stats auth admin:admin #统计页面用户名和密码设置
 
listen rabbitmq_cluster
bind 0.0.0.0:1234
mode tcp
option tcplog
balance roundrobin
server MQ1 192.168.0.137:5672 check inter 5000 rise 2 fall 3
server MQ2 192.168.0.137:5673 check inter 5000 rise 2 fall 3
server MQ3 192.168.0.137:5674 check inter 5000 rise 2 fall 3
listen rabbitmq_admin
bind 0.0.0.0:12345
server MQ1 192.168.0.137:15672
server MQ2 192.168.0.137:15673
server MQ3 192.168.0.137:15674
[root@localhost haproxy]#systemct start haproxy
2.配置镜像队列:
界面查看:
  技术图片

 

 

 

 

 
 
 
 
 
 

技术图片
技术图片
技术图片
技术图片

RabbitMQ部署单机多实例镜像集群(测试使用)

标签:时间   global   redis   nta   rabbit   load   gem   没有   消息   

原文地址:https://www.cnblogs.com/Bathing/p/14188709.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!