Centos7搭建RabbitMQ集群及单机多节点部署

31 篇文章 1 订阅

 

安装基本环境

yum -y install wget vim bash-completion lrzsz nmap telnet tree net-tools bind-utils lsof ntpdate iotop

erlang环境

wget -O/etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

安装rabbitmq:

yum -y install erlang
yum -y install rabbitmq-server

检查安装结果:

rpm -qa | grep rabbitmq

启动和查看状态:

systemctl status rabbitmq-server                #查看rabbitmq转态
systemctl start rabbitmq-server                  #启动rabbitmq
systemctl stop rabbitmq-server 

rabbitmq很多情况下使用systemctl restart rabbitmq-server是没有效果的,必须要stop后在start

开启Web管理页面:

rabbitmq-plugins enable rabbitmq_management

开启MQTT协议:

rabbitmq-plugins enable rabbitmq_mqtt
AMQP协议端口默认:5672
Web页面默认端口:15672
MQTT协议默认端口:1883
默认登录用户名(admin权限):guest
默认登录密码:guest

如果想安装单节点到此就结束了,如果想安装集群的请继续往下走


首先讲解的是单机多节点部署rabbitmq集群:

首先按照上面的步骤安装个rabbitmq,在进行一下操作:

确定rabbitmq节点是关闭状态:
rabbitmqctl stop

方法一:

设置环境变量指定端口和节点名称:

RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit

后台启动节点:

rabbitmq-server -detached

重复上面的操作,但是端口和rabbitmq节点名不可一样:

RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=rabbit_01
rabbitmq-server -detached
RABBITMQ_NODE_PORT=5674 RABBITMQ_NODENAME=rabbit_02
rabbitmq-server -detached

方法二:
通过编写主配置文件进行启动:(rabbitmq默认是没有主配置文件的)

vim /etc/rabbitmq/rabbitmq-env.conf
NODE_PORT=5672
NODENAME=rabbit
NODE_PORT=5673
NODENAME=rabbit_01
NODE_PORT=5674
NODENAME=rabbit_03
systemctl start rabbitmq-server

不论前面是采用哪种方式,但加入集群的方式一样的:
先听掉节点上的应用:

#停掉rabbit_01节点应用
rabbitmqctl -n@localhost rabbit_01 stop_app
#将rabbit_01添加到rabbit节点中
rabbitmqctl -n@localhost rabbit_01 join_cluster rabbit@localhost

#停掉rabbit_02节点应用
rabbitmqctl -n@localhost rabbit_02 stop_app
#将rabbit_02添加到rabbit节点中
rabbitmqctl -n@localhost rabbit_02 join_cluster rabbit@localhost

查看节点信息:

#注:此处只显示了集群中只有两个信息,如果按照上面操作添加,会显示三个节点信息
Cluster status of node rabbit@localhost ...
[{nodes,[{disc,[rabbit@localhost,rabbit_01@localhost]}]},
 {running_nodes,[rabbit@localhost]},
 {cluster_name,<<"rabbit@localhost">>},
 {partitions,[]},
 {alarms,[{rabbit@localhost,[]}]}]

这里将介绍多节点部署:

*注:多节点不同与单节点的情况,在多机环境,如果要在cluster集群内部署多个节点,需要注意两个方面:

  • 保证需要部署的这几个节点在同一个局域网内
  • 需要有相同的Erlang Cookie,否则不能进行通信,为保证cookie的完全一致,采用从一个节点copy的方式

正题:


IP主机名rabbitmq节点名
192.168.3.10node1rabbitmq1
192.168.3.100node3rabbitmq2
192.168.3.205node4rabbitmq3

都点尴尬,主机里面的hosts文件已经配好了,所以难得改了,就这么用把,但是你们看的时候要注意,我这里面没有node2


关闭防火墙,或者配置防火墙规则,否则后面加入集群会出现问题

  1. 配置node1主机hosts文件:(确保可以解析主机名)

    vim /etc/hosts
    192.168.3.10         node1
    192.168.3.100       node3
    192.168.3.205       node4
    scp /etc/hosts root@192.168.3.100:/etc/hosts
    scp /etc/hosts root@192.168.3.205:/etc/hosts
  2. 安装rabbitmq(三台上面同样操作):

    yum -y install wget vim bash-completion lrzsz nmap telnet tree net-tools bind-utils lsof ntpdate iotop
    wget -O/etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    yum -y install erlang rabbitmq-server
  3. 配置相同的Erlang Cookie:
    确保三台的cookie一样,这样erlang就处在一个环境中
    首先要启动rabbitmq,否则没有cookie,并且cookie是隐藏文件:
    Centos7搭建RabbitMQ集群及单机多节点部署和rabbitmq理论解析
    注:三个接单都需要先启动rabbitmq,然后在关闭

  4. 在node1节点上执行:

    scp /var/lib/rabbitmq/.erlang.cookie root@node3:/var/lib/rabbitmq
    scp /var/lib/rabbitmq/.erlang.cookie root@node4:/var/lib/rabbitmq
  5. 重启服务看看是否报错:

    *三个节点都重启看是否有报错*
    systemctl stop rabbitmq-server
    systemctl start rabbitmq-server

    注:要是有报错肯定是.erlang.cookie问题,要么把.erlang.cookie删了重新生成,要就看看是否是忘记关闭服务把cookie配置了,一定要注意这些细节性的东西

  6. 将节点加入集群
    #确保服务是启动的情况下进行
    node3节点上操作
    #将node3加入到node1节点集群中:
    rabbitmqctl stop_app                  #停掉节点服务
    rabbitmqctl reset                         #重置节点配置
    rabbitmqctl join_cluster rabbit@node1  
    # 将node3节点的rabbitmq加入到node1中
    # rabbitmqctl join_cluster rabbit@是固定格式写法
    rabbitmqctl start_app                  #启动节点

    Centos7搭建RabbitMQ集群及单机多节点部署和rabbitmq理论解析

我们接着讲node4也加入node1集群:
Centos7搭建RabbitMQ集群及单机多节点部署和rabbitmq理论解析

7.查看集群的状态:

rabbitmqctl cluster_status

Centos7搭建RabbitMQ集群及单机多节点部署和rabbitmq理论解析

注:从中我们可以看出这些几点都是disc(磁盘节点),我们可以手动把集群节点模式调成内存节点的,当然三台磁盘节点是最安全的,但是比较浪费资源,正常我们调整为两台磁盘一台内存即可


下面将介绍下如何设置集群的节点模式:
ram:内存
disc:磁盘
默认节点加入集群都是disc节点,设置ram节点两种方式:
方法一:
加入集群时设置type:

rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@node1
rabbitmqctl start_app

方法二:
加入集群后,修改disc节点为ram节点:

rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type ram
rabbitmqctl start_app

我使用了第二种方法将node4从磁盘节点改为内存节点:
Centos7搭建RabbitMQ集群及单机多节点部署和rabbitmq理论解析

我们总在命令行里面操作有时候很难受,所以我们开启Web点点点模式:(三台相同操作)

rabbitmq-plugins enable rabbitmq_management
systemctl stop rabbitmq-server
systemctl start rabbitmq-server

查看端口是否起来了,默认端口15672:
Centos7搭建RabbitMQ集群及单机多节点部署和rabbitmq理论解析


#三台相同操作
手动开启MQTT协议(1883端口),默认只开启AMQP协议(5672端口)

rabbitmq-plugins enable rabbitmq_mqtt
systemctl stop rabbitmq-server
systemctl start rabbitmq-server

查看端口状态:

Centos7搭建RabbitMQ集群及单机多节点部署和rabbitmq理论解析


集群创建用户
#只要在一个节点创建即可,都在一个集群中其他前节点都会有这个用户

rabbitmqctl add_user hcb hcb@pwd                #创建用户设置密码
rabbitmqctl set_permissions hcb ".*" ".*" ".*"    #给hcb赋权
rabbitmqctl set_user_tags hcb administrator   #给hcb赋予admin
systemctl restart rabbitmq-server                     #重启服务

此时我们到web页面中就可以用这个用户密码登录了

http://192.168.3.10:15672

Centos7搭建RabbitMQ集群及单机多节点部署和rabbitmq理论解析
#用默认用户guest登录也行,默认也是admin权限

登录后我们能看到集群的所有信息:
Centos7搭建RabbitMQ集群及单机多节点部署和rabbitmq理论解析

在此web如何用我就不多说了都是点点点特别简单,如果有不会的可以联系我,现场远程教学


RabbitMQ负载均衡
选择开源的HAproxy为rabbitmq集群做负载

安装epel:

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

安装HA:

yum -y install haproxy

配置HA:

cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
vim /etc/haproxy/haproxy.cfg

先说下haproxy的配置文件意思:

global           #全局设置
       log 127.0.0.1   local0      #日志输出配置,所有日志都记录在本机,通过local0输出
       #log loghost    local0 info
       maxconn 4096             #最大连接数
       chroot /usr/local/haproxy
       uid 99                   #所属运行的用户uid
       gid 99                   #所属运行的用户组
       daemon                   #以后台形式运行haproxy
       nbproc 2                 #启动2个haproxy实例
       pidfile /usr/local/haproxy/haproxy.pid  #将所有进程写入pid文件
       #debug
       #quiet

defaults             #默认设置
       #log    global
       log     127.0.0.1       local3         #日志文件的输出定向
       mode    http         #所处理的类别,默认采用http模式,可配置成tcp作4层消息转发
       option  httplog       #日志类别,采用httplog
       option  dontlognull  
       option  forwardfor   #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
       option  httpclose    #每次请求完毕后主动关闭http通道,haproxy不支持keep-alive,只能模拟这种模式的实现
       retries 3           #3次连接失败就认为服务器不可用,主要通过后面的check检查
       option  redispatch   #当serverid对应的服务器挂掉后,强制定向到其他健康服务器
       maxconn 2000                     #最大连接数
       stats   uri     /haproxy-admin  #haproxy 监控页面的访问地址
       contimeout      5000            #连接超时时间
       clitimeout      50000           #客户端连接超时时间
       srvtimeout      50000           #服务器端连接超时时间
       stats auth  Frank:Frank   #设置监控页面的用户和密码:Frank
stats hide-version         #隐藏统计页面的HAproxy版本信息

listen rabbitmq_local_cluster VIP:5670 //前段IP,供product和consumer来进行选择,由于5672端口已经默认使用,这里选择5670端口
     mode tcp   //负载均衡选项
     balance roundrobin //轮询算法将负载发给后台服务器
     server rabbit 192.168.3.10:5672 check inter 5000 rise 2 fall 3//负载均衡中的集群节点配置,这里选择的rabbit节点
     server rabbit 192.168.3.100:5672 check inter 5000 rise 2 fall 3
 server rabbit 192.168.3.205:5672 check inter 5000 rise 2 fall 3

  listen private_monitoring :8100
     mode http
     option httplog
     stats enable
     stats uri       /stats
     stats refresh 60s

#实际配置如:

global
    log 127.0.0.1 local0 info
    maxconn 4096
    stats socket /tmp/haproxy.socket uid haproxy mode 770 level admin
    daemon
defaults
    log global
    mode    tcp
    option  tcplog
    option  dontlognull
    retries 3
    option  redispatch
    maxconn 2000
    timeout connect 5s
    timeout client 120s
    timeout server 120s
listen rabbitmq_local_cluster 0.0.0.0:5670
    mode tcp
    balance roundrobin
    server cacheclod1 192.168.3.10:5672 check inter 5000 rise 2 fall 3
    server cacheclod2 192.168.3.100:5672 check inter 5000 rise 2 fall 3
    server cacheclod3 192.168.3.205:5672 check inter 5000 rise 2 fall 3
listen private_monitoring :8100
    mode http
    option httplog
    stats enable
    stats uri   /stats
    stats refresh 5s

启动HAproxy:

systemctl start haproxy

查看haproxy控制界面:

http://192.168.3.10:8100/stats

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值