Centos7 离线安装RabbitMQ,并配置集群
目的:Centos7 离线安装RabbitMQ,并配置集群
环境:
系统:Centos 7.5
环境:
- 1
- 2
一、安装RabbitMQ:
1. 安装包及依赖下载,Rabbitmq安装主要依赖两个rpm, erlang和socat
-
下载erlang, 在https://packagecloud.io/rabbitmq/erlang页面选择对应版本的erlang的rpm安装包(centos7需要19.3以上版本。
-
下载socat, 在http://www.rpmfind.net/linux/rpm2html/search.php?query=socat(x86-64)页面下载centos7版本的socat的rpm安装包。
-
下载Rabbitmq, 在http://www.rabbitmq.com/install-rpm.html页面下载centos7版本的安装包
ps:也可以直接下载资源https://download.csdn.net/download/alger_magic/10716820
2. rpm安装
-
将下载到的rpm文件copy入centos7,放置到自定义文件夹中。
-
使用rpm命令安装,也可以使用yum install *.rpm安装。
sudo rpm -ivh erlang-19.3.6.11-2.el6.x86_64.rpm
sudo rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
sudo rpm -ivh rabbitmq-server-3.7.8-1.el7.noarch.rpmps:
在使用windows虚拟机安装的centos7,使用鼠标直接拖入rpm的方式copy进centos,在安装时可能提示包出错(猜测是copy过程中可能有缺失)。
解决方法是使用winscp上传或者用u盘copy过去。
3. start rabbitmq
-
执行sudo service rabbitmq-server start
提示如图所示则表示启动成功 -
配置rabbitmq管理账户。
执行命令 rabbitmqctl add_user admin admin,设置账户密码为admin admin -
执行命令 rabbitmqctl set_user_tags admin administrator,设置admin为管理员权限
-
执行命令 rabbitmq-plugins enable rabbitmq_management,打开rabbitmq web管理。
-
管理链接为:http://localhost:15672,登陆账户密码为设置的admin admin
-
登陆管理端,并打开访问权限。
a.登陆后台
b.查看用户权限,默认状态下权限是不允许访问(此时程序访问5672端口是连接被拒绝)。
c.点击用户名,进入用户页面,直接点击设置权限。此时刷新页面回到Users页面,权限变成可访问。
PS:常见问题
一. http://ip:15672不能访问,确认两点:1. 添加用户、给用户设置管理员权限、rabbitmq-plugins这三步是否执行成功。2. 使用firewall打开5672/15672端口。具体步骤如下:
sudo service firewalld start
firewall-cmd --zone=public --add-port=5672/tcp --permanent
firewall-cmd --zone=public --add-port=15672/tcp --permanent
sudo service firewalld start(如果系统不要求开启防火墙,可以在设置完以后再关闭它)
备注:即使防火墙处于关闭状态,也应该先打开端口再关闭,否则在有些机器上会仍然端口不通。
二、RabbitMQ集群部署:
1.按照前面的方式在想要集群的多台主机上安装好RabbitMQ实例
2.集群配置
1.更改主机/etc/hosts,加入主机节点。 如下所示三台主机均在/etc/hosts中添加,然后三台主机相互之间可以ping通rabbit-node
vim /etc/hosts
添加内容:
192.168.1.201 rabbit-node1
192.168.1.202 rabbit-node2
192.168.1.203 rabbit-node3
2. 由于RabbitMQ集群的主机需要使用同一个erlang.cookie。所以需要将多台主机的erlang.cookie设置为同一个。
-
erlang.cookie位置: 如果是使用rpm包安装的rabbitmq, erlang.cookie的位置在/var/lib/rabbitmq/.erlang.cookie;如果是源码编译安装,erlang.cookie文件位置在~/.erlang.cookie
-
例如上面的三台主机操作流程如下:如果以rabbit-node1的erlang.cookie作为集群的erlang.cookie.
1. 在node1的主机上 chmod 777 /var/lib/rabbitmq/.erlang.cookie.(改变只读权限,让node2,node3可以获取)
2. 在node2主机上执行:
chmod 777 /var/lib/rabbitmq/.erlang.cookie
scp -r rabbitmq-node1:/var/lib/rabbitmq/.erlang.cookie /var/lib/rabbitmq/.erlang.cookie
输入yes
输入node1的密码
提示: .erlang.cookie 100% 20,即执行成功
3. 同样在node3主机上执行:
chmod 777 /var/lib/rabbitmq/.erlang.cookie
scp -r rabbitmq-node1:/var/lib/rabbitmq/.erlang.cookie /var/lib/rabbitmq/.erlang.cookie
输入yes
输入node1的密码
提示: .erlang.cookie 100% 20,即执行成功
4. 在三台主机上使用cat /var/lib/rabbitmq/.erlang.cookie查看erlang.cookie是否统一,如果已统一,再分别执行chmod 400 /var/lib/rabbitmq/.erlang.cookie,恢复原本权限
3. 配置集群
- 在三台主机上停止当前Rabbitmq-server, 分别执行service rabbitmq-server stop,如有问题,可以使用ps查看rabbitmq进程号,在kill -9 杀掉。
- 然后执行service rabbitmq-server start 开启服务.
- 分别在三台主机上执行rabbitmqctl cluster_status查看集群状况,此时只有本机的记录。打印输出如下:
Cluster status of node rabbit@ rabbit-node ...
[{nodes,[{disc,[rabbit@ rabbit-node]}]},
{running_nodes,[rabbit@ rabbit-node]},
{cluster_name,<<"rabbit@ rabbit-node">>},
{partitions,[]},
{alarms,[{rabbit@ rabbit-node,[]}]}]
- 将 rabbit-node1, rabbit-node2, rabbit-node3组成集群。
1.在 rabbit-node2上执行:
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbit-node1
rabbitmqctl start_app
2.同样在 rabbit-node3上执行:
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbit-node1
rabbitmqctl start_app
3.集群就建立完成了(rabbit-node2, rabbit-node3之间会自动建立连接)。
4.在三台主机上分别执行rabbitmqctl cluster_status查看集群状态,结果如下:
Cluster status of node rabbit@rabbit-node1 ...
[{nodes,[{disc,['rabbit@rabbit-node1','rabbit-node2',
'rabbit@rabbit-node3']}]},
{running_nodes,['rabbit@rabbit-node1','rabbit@rabbit-node2',
'rabbit@rabbit-node3']},
{cluster_name,<<"rabbit@rmq-cluster-1">>},
{partitions,[]},
{alarms,[{'rabbit@rabbit-node1',[]},
{'rabbit@rabbit-node2',[]},
{'rabbit@rabbit-node3',[]}]}]
表示集群创建成功,从任意一个节点的rabbitmq web管理端也可以看到各个节点状态
如图:
三、为RabbitMQ安装配置负载均衡器HAProxy:
1.下载安装
1.下载地址http://www.rpmfind.net/linux/centos/7.5.1804/os/x86_64/Packages/haproxy-1.5.18-7.el7.x86_64.rpm
2. 在集群以外的一台主机上安装HAProxy(如主机不足也可以安装在其中一台,示例安装在rabbit-node1), rpm -ivh haproxy-1.5.18-7.el7.x86_64.rpm.
2. 配置负载均衡
1. HAProxy程序的配置文件默认在/etc/haproxy/haproxy.cfg
2. vim /etc/haproxy/haproxy.cfg,在末尾添加,如已有负载均衡配置,注释掉旧的配置
####################################################################
listen http_front
bind 0.0.0.0:8100 #监听端口
stats refresh 30s #统计页面自动刷新时间
stats uri /haproxy?stats #统计页面url
stats realm Haproxy Manager #统计页面密码框上提示文本
stats auth admin:admin #统计页面用户名和密码设置
#stats hide-version #隐藏统计页面上HAProxy的版本信息
#####################我把RabbitMQ的管理界面也放在HAProxy后面了###############################
listen rabbitmq_admin
bind 0.0.0.0:8101
server node1 192.168.1.201:15672
server node2 192.168.1.202:15672
server node3 192.168.1.203:15672
####################################################################
listen rabbitmq_cluster
bind 0.0.0.0:5671
option tcplog
mode tcp
timeout client 3h
timeout server 3h
option clitcpka
balance roundrobin #负载均衡算法(#banlance roundrobin 轮询,balance source 保存session值,支持static-rr,leastconn,first,uri等参数)
#balance url_param userid
#balance url_param session_id check_post 64
#balance hdr(User-Agent)
#balance hdr(host)
#balance hdr(Host) use_domain_only
#balance rdp-cookie
#balance leastconn
#balance source //ip
server node1 192.168.1.201:5672 check inter 5s rise 2 fall 3 #check inter 2000 是检测心跳频率,rise 2是2次正确认为服务器可用,fall 3是3次失败认为服务器不可用
server node2 192.168.1.202:5672 check inter 5s rise 2 fall 3
server node3 192.168.1.203:5672 check inter 5s rise 2 fall 3
3. 重启HAProxy, sudo service haproxy restart
4. 在浏览器输入http://rabbit-node1:8100/haproxy?stats, 查看HAProxy状态,如下图
5. 安装已完成,可使用HAProxy配置的端口(示例中5671)进行rabbitmq操作,测试负载均衡效果
6、rabbitmq常用命令
add_user <UserName> <Password>
delete_user <UserName>
change_password <UserName> <NewPassword>
list_users
add_vhost <VHostPath>
delete_vhost <VHostPath>
list_vhostsset_permissions [-p <VHostPath>] <UserName> <Regexp> <Regexp> <Regexp>
clear_permissions [-p <VHostPath>] <UserName>
list_permissions [-p <VHostPath>]
list_user_permissions <UserName>
list_queues [-p <VHostPath>] [<QueueInfoItem> ...]
list_exchanges [-p <VHostPath>] [<ExchangeInfoItem> ...]
list_bindings [-p <VHostPath>]
list_connections [<ConnectionInfoItem> ...]