RabbitMQ集群搭建(Centos7)
安装
编译安装erlang
安装依赖
[root@node1 ~]# yum install gcc gcc-c++ ncurses ncurses-devel openssl openssl-devel unixODBC unixODBC-devel
下载erlang
RabbitMQ和erlang版本对照:https://www.rabbitmq.com/which-erlang.html
,我这里采用的是最新版本(22.3)。
[root@node1 ~]# wget http://erlang.org/download/otp_src_22.3.tar.gz
解压编译安装
解压
[root@node1 ~]# tar -zxf otp_src_22.3.tar.gz
配置安装路径编译代码
[root@node1 ~]# cd otp_src_22.3
[root@node1 ~]# ./configure --prefix=/usr/local/erlang --without-javac
安装
[root@node1 ~]# make && make install
设置环境变量
[root@node1 ~]# vim /etc/profile
# 在最下面添加
ERLANG_HOME=/usr/local/erlang
PATH=$ERLANG_HOME/bin:$PATH
export PATH
# 保存并退出后
[root@node1 ~]# source /etc/profile
测试
[root@node1 ~]# erl
Erlang/OTP 22 [erts-10.7] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]
Eshell V10.7 (abort with ^G)
1> halt(). #退出
安装RabbitMQ
下载并安装
[root@node1 ~]# wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.24/rabbitmq-server-generic-unix-3.7.24.tar.xz
[root@node1 ~]# tar -xf rabbitmq-server-generic-unix-3.7.24.tar.xz
mv rabbitmq-server-3.7.24 /usr/local/rabbitmq
配置环境变量
[root@node1 ~]# vim /etc/profile
# 在最下面添加
RABBIT_HOME=/usr/local/rabbitmq
PATH=$RABBIT_HOME/sbin:$PATH
export PATH
# 保存并退出后
[root@node1 ~]# source /etc/profile
启动
[root@node1 ~]# rabbitmq-server
停止
[root@node1 ~]# rabbitmqctl stop
集群
添加DNS映射
在node1,node2的/etc/hosts上加上node1、node2。
172.16.111.8 node1
172.16.111.10 node2
复制erlang.cookie
在node2上也如上操作,启动并关闭RabbitMQ后,将node1中/root目录下的.erlang.cookie
文件复制到node2的相同路径下。
启动并加入集群
启动node1:
[root@node1 ~]# rabbitmq-server -detached #后台启动
node2加入集群并启动:
[root@node1 ~]# rabbitmqctl join_cluster --ram rabbit@node1 #以内存节点的方式加入集群
# 也可以再加入后更改节点类型
[root@node1 ~]# rabbitmqctl change_cluster_node_type ram
# 启动node2,
[root@node1 ~]# rabbitmqctl start_app
如果使用
rabbitmqctl stop
,应用和节点都将被关闭,使用rabbitmqctl stop_app
仅仅关闭应用。
查看集群状态:
[root@node1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@node1 ...
[{nodes,[{disc,[rabbit@node1]},
{ram,[rabbit@node2]}]},
{running_nodes,[rabbit@node2,
rabbit@node1]},
{cluster_name,<<"rabbit@node2">>},
{partitions,[]},
{alarms,[{rabbit@node2,[]},
{rabbit@node1,[]}]}]
使用Nginx负载均衡
Nginx版本为:nginx/1.16.1,已包含stream模块。在nginx.conf中添加以下配置:
stream {
upstream rabbitmqserver {
server node1:5672;
server node2:5672;
}
server {
listen 5673;
proxy_pass rabbitmqserver;
}
}
保存后使用nginx -s reload
重载配置文件。
启用镜像队列
[root@node1 ~]# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}' #启用的是/这个vhost的镜像队列
其他命令
# 启用插件
rabbitmq-plugins enable rabbitmq_auth_backend_http
rabbitmq-plugins enable rabbitmq_auth_backend_cache
rabbitmq-plugins enable rabbitmq_management
# 关闭插件
rabbitmq-plugins disable rabbitmq_auth_backend_http
rabbitmq-plugins disable rabbitmq_auth_backend_cache
rabbitmq-plugins disable rabbitmq_management
# 添加、删除和查看用户
rabbitmqctl add_user [username] [password]
rabbitmqctl delete_user [username]
rabbitmqctl list_users
# 添加、删除和查看vhost
rabbitmqctl add_vhost [vhost]
rabbitmqctl delete_vhost [vhost]
rabbitmqctl list_vhosts
# 查看服务状态
rabbitmqctl status
# 添加权限
rabbitmqctl set_permissions -p "/" [username] ".*" ".*" ".*" #-p 是指定vhost
#修改用户角色
rabbitmqctl set_user_tags [username] administrator
#修改用户密码
rabbitmqctl change_password [username] [password]