一,准备工作:
1,三台centos7虚拟机:
192.168.209.143 rabbitmq-node1+haproxy
192.168.209.147 rabbitmq-node2
192.168.209.148 rabbitmq-node3
2,配置好yum源,建议使用阿里的源。如果你在内网,可以使用公司内部的cento7源和epel源。
二,rabbitmq集群示意图:
三,rabbitmq必须要的组件:erlang。不同的rabbitmq需要不同的erlang版本,在官网可以查看:
RabbitMQ Erlang Version Requirements — RabbitMQ
本次安装rabbitmq 3.9.14版本,erlang需要24.3.4.1
erlang下载地址:https://github.com/erlang/otp/releases/download/OTP-24.3.4.1/otp_src_24.3.4.1.tar.gz
rabbitmq下载地址:
下载速度非常慢,耐心等待。如果你有迅雷会员,速度倒是很快。下好之后,将两个包传到192.168.209.143的/data01目录下。
四,安装erlang
我们先来做基础环境,这里首先安装erlang所需要的基础组件。
yum -y install gcc gcc-c++ make openssl openssl-devel ncurses-devel
cd /data01
tar -xf otp_src_24.3.4.1.tar.gz
cd otp_src_24.3.4.1
./configure --prefix=/usr/local/erlang
出现以上提示不要慌,都是warning的,没关系,继续:
make
make install
echo 'export PATH=$PATH:/usr/local/erlang/bin' >> /etc/profile
source /etc/profile
至此,erlang安装成功。
五,安装单节点rabbitmq。
1,解压并启动
cd /data01/
tar -xf rabbitmq-server-generic-unix-3.9.14.tar.xz
cd rabbitmq_server-3.9.14/sbin/
./rabbitmq-server -detached
#不带-detached参数的命令是前台启动方式,退出shell后服务进程也跟着退出。带-detached参数的命令是后台启动方式,退出shell后服务进程保持运行在linux后台。
./rabbitmqctl status #查看启动状态
2,增加admin用户
cd /data01/rabbitmq_server-3.9.14/sbin
#因为guest用户只能在本机访问(只能通过localhost登陆使用),添加一个admin用户,密码设置为:123456789
./rabbitmqctl add_user admin 123456789
#设置admin为超级管理员
./rabbitmqctl set_user_tags admin administrator
#为admin账号添加所有的权限
./rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
#RabbitMQ默认账户和密码为 guest/guest,我们修改guest用户密码
./rabbitmqctl change_password guest 123456789
#查看当前的用户列表
./rabbitmqctl list_users
#如果想要删除一个用户
./rabbitmqctl delete_user yourUserName
3,开启 rabbitmq management控制台
cd /rabbitmq_server-3.9.7/sbin
./rabbitmq-plugins enable rabbitmq_management
./rabbitmq-plugins enable rabbitmq_shovel
./rabbitmq-plugins enable rabbitmq_shovel_management
4,其他命令:
1)直接启动模式:如果你关闭窗口或者需要在该窗口使用其他命令时应用就会停止
./rabbitmq-server //启动
./rabbitmq-server restart //重启
./rabbitmq-server stop //停止
./rabbitmq-server status //查看状态
2)rabbitmq以应用方式后台启动
./rabbitmq-server -detached //rabbitmq分别启动节点和应用,不会生成pid_file文件
./rabbitmqctl status //查看运行状态
./rabbitmqctl start_app //应用启动,此命令典型的用途是在执行了其他管理操作之后,重新启动之前停止的 RabbitMQ 应用,比如reset
./rabbitmqctl stop_app //将rabbitmq服务应用关闭,但是Erlang虚拟机还是处于运行状态
./rabbitmqctl stop //同时关闭应用和节点
3)查看端口
#15672是HTTP API客户端、web管理界面使用,25672用于节点间通信,5672是AMQP使用的端口
netstat -lnp |grep beam
5,访问控制台
链接:http://192.168.209.143:15672/
用户:admin
密码:123456789
以上,一个单节点的rabbitmq就装好了,但是我们要的并不是这么简单,下面我们需要安装一个三节点的rabbitmq集群,并使用haproxy代理页面端口和业务端口。
六,安装rabbitmq集群
1,修改hosts
1)三台分别改主机名
echo rabbitmq-node1 >>/etc/hostname
echo rabbitmq-node2 >>/etc/hostname
echo rabbitmq-node3 >>/etc/hostname
2)三台分别写入hosts
echo '192.168.209.143 rabbitmq-node1' >> /etc/hosts
echo '192.168.209.147 rabbitmq-node2' >> /etc/hosts
echo '192.168.209.148 rabbitmq-node3' >> /etc/hosts
echo '192.168.209.143 rabbitmq-node1' >> /etc/hosts
echo '192.168.209.147 rabbitmq-node2' >> /etc/hosts
echo '192.168.209.148 rabbitmq-node3' >> /etc/hosts
3)将192.168.209.143 的/root/.erlang.cookie 同步到其他两台的/root下,注意这个文件必须为400权限
chmod 400 /root/.erlang.cookie
scp -rp /root/.erlang.cookie 192.168.209.147:/root
scp -rp /root/.erlang.cookie 192.168.209.148:/root
2,准备集群节点,同样的操作再三台147,148上再来一遍,然后写环境变量
echo 'export PATH=$PATH:/data01/rabbitmq-node1/sbin' >>/etc/profile
source /etc/profile
3,三台分别启动集群,下面的命令,建议一条一条的复制粘贴,否则执行可能会报错。这是rabbitmq一个bug,头疼。
pkill beam
/data01/rabbitmq-node1/sbin/rabbitmqctl stop
/data01/rabbitmq-node1/sbin/rabbitmq-server -detached
/data01/rabbitmq-node1/sbin/rabbitmqctl start_app
/data01/rabbitmq-node1/sbin/rabbitmqctl add_user admin 123456789
/data01/rabbitmq-node1/sbin/rabbitmqctl set_user_tags admin administrator
/data01/rabbitmq-node1/sbin/rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
/data01/rabbitmq-node1/sbin/rabbitmqctl delete_user guest
/data01/rabbitmq-node1/sbin/rabbitmq-plugins enable rabbitmq_shovel
/data01/rabbitmq-node1/sbin/rabbitmq-plugins enable rabbitmq_shovel_management
/data01/rabbitmq-node1/sbin/rabbitmq-plugins enable rabbitmq_management
/data01/rabbitmq-node1/sbin/rabbitmqctl stop
/data01/rabbitmq-node1/sbin/rabbitmq-server -detached
/data01/rabbitmq-node1/sbin/rabbitmqctl start_app
netstat -ano |grep -w 5672
netstat -ano |grep -w 15672
4,将147,148加入到143集群中
/data01/rabbitmq-node1/sbin/rabbitmqctl stop_app
/data01/rabbitmq-node1/sbin/rabbitmqctl reset
/data01/rabbitmq-node1/sbin/rabbitmqctl join_cluster --ram rabbit@rabbitmq-node3
/data01/rabbitmq-node1/sbin/rabbitmqctl start_app
/data01/rabbitmq-node1/sbin/rabbitmqctl set_policy ha-all "^ha\." '{"ha-mode":"all"}'
/data01/rabbitmq-node1/sbin/rabbitmqctl cluster_status
如果提示:你与此网站不是私密连接,实际上可能是你的登录用户没有创建成功。
/data01/rabbitmq-node1/sbin/rabbitmqctl list_users
如果没有
请使用命令创建
/data01/rabbitmq-node1/sbin/rabbitmqctl add_user admin 123456789
/data01/rabbitmq-node1/sbin/rabbitmqctl set_user_tags admin administrator
/data01/rabbitmq-node1/sbin/rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
/data01/rabbitmq-node1/sbin/rabbitmqctl delete_user guest
以上,一个3节点的rabbitmq集群就搭建好了。接下来使用haproxy代理rabbitmq集群。
七,安装haproxy,代理mq集群。根据设定,网页端口为33331,业务端口为33332。
须知,默认的网页端口是:15672
默认的业务端口是:5672
yum install haproxy -y
mkdir -p /usr/local/haproxy
vim /etc/haproxy/haproxy.cfg
将下面的文件复制进去
#全局配置
global
#日志输出配置,所有日志都记录在本机,通过local0输出
log 127.0.0.1 local0 info
#最大连接数
maxconn 4096
#改变当前的工作目录
chroot /usr/local/haproxy
#以指定的UID运行haproxy进程
uid 99
#以指定的GID运行haproxy进程
gid 99
#以守护进程方式运行haproxy #debug #quiet
daemon
#debug
#当前进程pid文件
pidfile /usr/local/haproxy/haproxy.pid
#默认配置
defaults
#应用全局的日志配置
log global
#默认的模式mode{tcp|http|health}
#tcp是4层,http是7层,health只返回OK
mode tcp
#日志类别tcplog
option tcplog
#不记录健康检查日志信息
option dontlognull
#3次失败则认为服务不可用
retries 3
#每个进程可用的最大连接数
maxconn 2000
#连接超时
timeout connect 5s
#客户端超时
timeout client 120s
#服务端超时
timeout server 120s
maxconn 2000
#连接超时
timeout connect 5s
#客户端超时
timeout client 120s
#服务端超时
timeout server 120s
#绑定配置
listen rabbitmq_cluster
bind 0.0.0.0:33332
#配置TCP模式
mode tcp
#加权轮询
balance roundrobin
server rabbitmq_node1 192.168.209.143:5672 check inter 5000 rise 2 fall 3 weight 1
server rabbitmq_node2 192.168.209.147:5672 check inter 5000 rise 2 fall 3 weight 1
server rabbitmq_node3 192.168.209.148:5672 check inter 5000 rise 2 fall 3 weight 1
#haproxy监控页面地址
listen monitor
bind 0.0.0.0:33331
server rabbitmq_node1 192.168.209.143:15672 check inter 2s rise 2 fall 3
server rabbitmq_node2 192.168.209.147:15672 check inter 2s rise 2 fall 3
server rabbitmq_node3 192.168.209.148:15672 check inter 2s rise 2 fall 3
启动:
haproxy -f /etc/haproxy/haproxy.cfg
使用http://192.168.209.143:33331
可以成功登录。至此,一个完整的rabbitmq集群就搭建好了。
rabbitmq集群没有想象中的那么好装,本次实验,建立在服务器能连上阿里源的基础上。如果你在内网,源里面的内容比较少,有些必须要的组件,就需要自己去官网找了一个一个下载,无限多的依赖包,还是很不好搞的。