RabbitMQ依赖于Erlang、socat,因此要首先安装Erlang与socat
1.RabbitMQ简介:
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。
2.RabbitMQ安装依赖:
2.1 由于RabbitMQ是基于Erlang语言开发, 所以在安装RabbitMQ之前, 需要先安装Erlang ,rabbitmq需要socat依赖, 所以需要先安装socat 首先下载erlang 命令为
yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make
gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz
2.2 安装Erlang
需要上传三个rmp文件,然后依次安装
erlang-18.3-1.el7.centos.x86_64.rpm
socat-1.7.3.2-5.el7.lux.x86_64.rpm
rabbitmq-server-3.6.5-1.noarch.rpm
# 安装
rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm
2.3. 安装RabbitMQ
# 安装
rpm -ivh socat-1.7.3.2-1.1.el7.x86_64.rpm --force --nodeps
# 安装
rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm
2.4. 开启管理界⾯及配置
# 开启管理界⾯
rabbitmq-plugins enable rabbitmq_management
# 修改默认配置信息
vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app
# ⽐如修改密码、配置等等,例如:loopback_users 中的 <<"guest">>,只保留guest
2.5 设置配置⽂件
cd /usr/share/doc/rabbitmq-server-3.6.5/
cp rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
2.6 启动
service rabbitmq-server start # 启动服务
service rabbitmq-server stop # 停⽌服务
service rabbitmq-server restart # 重启服务
2.7 配置虚拟主机及⽤户
2.7.1. ⽤户⻆⾊
RabbitMQ在安装好后,可以访问 http://ip地址:15672 ;其⾃带了guest/guest的⽤户名和密码;如
果需要创建⾃定义⽤户;那么也可以登录管理界⾯后,如下操作:
即安装结束 ~
Docker部署RabbitMQ集群
安装RabbitMQ
mkdir rabbitmq
# node1 172.0.0.1
cd rabbitmq
vim hosts
#输入
172.0.0.1 rabbit1 rabbit1
172.0.0.2 rabbit2 rabbit2
sudo docker run -d \
--name rabbit1 \
-h rabbit1\
--log-opt max-size=10m \
--log-opt max-file=3 \
-v /root/rabbitmq:/var/lib/rabbitmq:z \
-v /root/rabbitmq/hosts:/etc/hosts \
-e RABBITMQ_DEFAULT_USER=rabbitmq \
-e RABBITMQ_DEFAULT_PASS=password \
-e RABBITMQ_ERLANG_COOKIE='cookie' \
-p 5656:5672 \
-p 5657:15672 \
-p 4369:4369 \
-p 25672:25672 \
-p 15671:15671 \
-p 5671:5671 \
rabbitmq:3.7.12-management
# node2 172.0.0.2
cd rabbitmq
vim hosts
#输入
172.0.0.1 rabbit1 rabbit1
172.0.0.2 rabbit2 rabbit2
sudo docker run -d \
--name rabbit2 \
-h rabbit2\
--log-opt max-size=10m \
--log-opt max-file=3 \
-v /root/rabbitmq:/var/lib/rabbitmq:z \
-v /root/rabbitmq/hosts:/etc/hosts \
-e RABBITMQ_DEFAULT_USER=rabbitmq \
-e RABBITMQ_DEFAULT_PASS=password \
-e RABBITMQ_ERLANG_COOKIE='cookie' \
-p 5656:5672 \
-p 5657:15672 \
-p 4369:4369 \
-p 25672:25672 \
-p 15671:15671 \
-p 5671:5671 \
rabbitmq:3.7.12-management
加入集群
上述完成2个RabbitMQ节点的启动,后面是要将两个节点做成一个集群,现在讲rabbitmq1作为master,然后rabbitmq2加入到rabbitmq1中
# node2 处理
sudo docker exec -it rabbit2 /bin/bash
# 加入集群
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbit1
rabbitmqctl start_app
配置nginx,来保证集群的可用性
配置文件如下:
server {
listen 443;
server_name rabbitmq.example.cn;
ssl on;
ssl_certificate cert/123.pem;
ssl_certificate_key cert/123.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
# https 因为安全原因,需要禁用 gzip
# 但是在一些场景下,不需要禁用
# gzip off;
gzip on;
# 设置允许压缩的页面最小字节数
gzip_min_length 1000;
gzip_buffers 4 16k;
gzip_http_version 1.1;
# 1~9,默认为1,数值越大,压缩率越高,CPU占用越多,时间越久
gzip_comp_level 3;
gzip_vary on;
# 禁用对 IE 6 使用 gzip 压缩
gzip_disable "MSIE [1-6]\.";
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/javascript "application/javascript; charset=utf-8" application/xml application/xml+rss application/json "application/json; charset=utf-8" fo
nt/ttf font/otf image/svg+xml;
# 设置最大允许的POST数据量,如果提交的文件超过这个值,会出现413错误
client_max_body_size 20m;
keepalive_timeout 15;
# 不显示 nginx 的版本号
server_tokens off;
# 设置请求头的长度大小
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
## Individual nginx logs
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;
# 不保存 access_log
# access_log off;
location ^~ /favicon.ico {
expires 30d;
# add_header Content-Type text/plain;
return 200 "";
}
location ^~ /robots.txt {
expires 30d;
# add_header Content-Type text/plain;
return 200 "User-Agent: *\nDisallow: /";
}
location / {
port_in_redirect on;
proxy_pass http://rabbitManage;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#index index.html index.htm;
}
# 主页返回 404
# location = / {
# return 404;
# }
}
server {
listen 80;
server_name rabbitmq.example.cn;
#告诉浏览器有效期内只准用 https 访问
add_header Strict-Transport-Security max-age=15768000;
#永久重定向到 https 站点
return 301 https://$server_name$request_uri;
}
#rabbitmq管理界面
upstream rabbitManage {
server 172.0.0.1:5657;
server 172.0.0.2:5657;
}
#!!! stream 要和http一个层级
# rabbitmq Tcp监听
stream{
upstream rabbitTcp{
server 172.0.0.1:5656;
server 172.0.0.2:5656;
}
server {
listen 5656;
proxy_pass rabbitTcp;
}
}