RabbitMQ安装和高可用集群搭建
准备:使用VMware软件搭建3台centos服务器并完成host相关配置,可以使用我的软件地址。
链接:https://pan.baidu.com/s/1D-NIyFGLRiLeBXTNqBDe9w
提取码:bn32
由于版本等原因,安装过程容易出现各种莫名其妙的问题,关于软件安装和集群搭建的主要流程部分,我将以1.2.3开头标明执行时序,建议严格按照顺序执行!!!
一.RabbitMQ安装
rabbitmq和erlang必须相兼容,注意版本对应关系,官网链接如下:
https://www.rabbitmq.com/which-erlang.html
1.mkdir -p /root/rabbitmq;cd /root/rabbitmq
##新建一个目录并进入,本文使用的的路径是/root/rabbitmq
2.yum -y install epel-release
##安装前置依赖
3.wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
4.rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
##更新yum库中的erlang [可能需要epel-release,我们第一步已经安装]
5.yum install erlang
##不要直接-y,安装时注意erlang的版本,我的是22.3.2-1.el7
6.wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.3/rabbitmq-server-3.8.3-1.el7.noarch.rpm
##根据安装的erlang版本,调整此处下载的rabbitmq版本
7.yum -y install rabbitmq-server-3.8.3-1.el7.noarch.rpm
8.rabbitmq-plugins enable rabbitmq_management
##安装管理控制台
9.顺序执行下面的用户相关命令,启动rabbitmq,访问 host:15672 user/pwd[cheng/1234],出现类似如下界面说明rabbitmq安装成功
rabbitmqctl add_user cheng 1234
rabbitmqctl set_permissions -p / cheng '.*' '.*' '.*'
rabbitmqctl set_user_tags cheng administrator
卸载[如果安装出现问题,使用如下相关命令尝试卸载并重新安装]
yum list installed | grep rabbitmq
yum list installed | grep erlang
yum -y remove rabbitmq-server.noarch
yum -y remove erlang-*
yum -y remove erlang.x86_64
yum -y remove erlang-asn1.x86_64
yum -y remove erlang-compiler.x86_64
yum -y remove erlang-solutions.noarch
yum -y remove epel-release
rm -rf /usr/lib64/erlang
rm -rf /var/lib/rabbitmq
rm -rf /var/cache/yum/x86_64/7/epel/
管理命令:
service rabbitmq-server start 启动
service rabbitmq-server status 查看状态
service rabbitmq-server stop 停止
#虚拟主机相关命令 查看/添加/删除
rabbitmqctl list_vhosts
rabbitmqctl add_vhost abc[host名称]
rabbitmqctl delete_vhost
#用户相关命令 新增/授权/授角色 [/代表默认host,新增一个cheng的用户,密码1234,拥有配置和读写权限,角色为admin]
rabbitmqctl add_user cheng 1234
rabbitmqctl set_permissions -p / cheng '.*' '.*' '.*'
rabbitmqctl set_user_tags cheng administrator
#其他实用命令
rabbitmq-server 会启动Erlang节点和Rabbitmq应用
rabbitmqctl stop会关闭Erlang节点和Rabbitmq应用
rabbitmqctl stop_app关闭Rabbitmq应用
rabbitmqctl start_app启动Rabbitmq应用
rabbitmqctl status 检查消息节点是否正常
rabbitmqctl list_queues 查看队列
rabbitmqctl list_exchanges 查看交换器
可以直接输入 rabbitmqctl 查询其他命令
二.Rabbitmq集群搭建
集群搭建 常用命令解释
rabbitmqctl stop_app/reset/start_app 停止/重置/启动
rabbitmqctl join_cluster rabbit@node1 将当前节点加入node1构成集群
rabbitmqctl cluster_status 查询集群状态
rabbitmqctl reset 将node节点恢复为空白状态,在集群下,通过这个命令,可以让节点离开集群。
Rabbitmq 集群对延迟非常敏感, 只能在本地局域网内使用。
1.vim /etc/hosts
##修改三台服务器host映射 三台服务ip分别为101/102/103
192.168.42.101 node1
192.168.42.102 node2
192.168.42.103 node3
2.vim /etc/hostname
##分别修改三台服务器的机器名 修改完成后使用reboot重启虚拟机,出现如下图说明成功
node1/node2/node3
3.vim /var/lib/rabbitmq/.erlang.cookie
rabbitmq集群需要Erlang Cookie文件内容一致,该文件默认隐藏,使用ll -a命令可查看
文件地址:/var/lib/rabbitmq/.erlang.cookie,需要将node1的该文件复制到node2、node3,可以复制内容也可以直接复制文件替换。
注意这个文件权限是 400,复制内容需要先修改写权限,写完后再改回只读权限。
4.service rabbitmq-server start ##启动各节点
service rabbitmq-server status ##测试是否启动成功
5.node1不变,在 node2、node3上顺序执行如下命令
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@node1
rabbitmqctl start_app
rabbitmqctl cluster_status
##默认添加磁盘节点,若要添加内存节点,则此处第三条命令改为:rabbitmqctl join_cluster rabbit@node1 --ram
出现如下界面则说明集群安装成功
ps:rabbitmq集群默认不复制队列数据,会复制元数据和exchange路由信息 为了确保集群性能 至少有两个磁盘节点 仅存活一个磁盘节点时 无法执行修改操作 1.当一个节点宕机时生产者和消费者仍然能运行 2.集群能提高吞吐量
说明:rabbitmq集群间只会同步元数据和路由[exchange]数据,当某一个节点宕机时,该节点的队列数据会丢失,因此若需要保持集群的高可用,需要使用镜像队列策略,有三种方案
1.代码中添加x-ha-policy策略
Map<String, Object> args = new HashMap<String, Object>();
args.put("x-ha-policy", "all");
在声明队列时传入 channel.queueDeclare(queueName,false,false, false, args);
2.命令行执行
rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]
eg:rabbitmqctl set_policy ha-queue-one '^queue_' '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'
3.控制台修改
三.RabbitMQ集群高可用 [HAProxy]
HAProxy功能类似于nginx,keepalive的LVS策略
rabbitmq集群最高可用方案:镜像队列 x-ha-policy[事务+高可用队列+数据持久化]
官网:http://www.haproxy.org/
1.cd /root/rabbitmq
##进入安装目录
2.wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.14.tar.gz
##下载最新的LTS版本
3.uname -r
##查看内核版本,我的是3.10.0-1062.18.1.el7.x86_64
4.make TARGET=linux310 ARCH=x86_64 PREFIX=/root/rabbitmq/haproxy-2.0.14
5.make install PREFIX=/root/rabbitmq/haproxy-2.0.14
6.mkdir /root/rabbitmq/haproxy-2.0.14/conf
##新建conf文件夹
vim /root/rabbitmq/haproxy-2.0.14/conf/haproxy.cfg
##新建配置文件。可以参考系统默认配置 cp /root/rabbitmq/haproxy-2.0.14/examples/option-http_proxy.cfg /root/rabbitmq/haproxy-2.0.14/conf/haproxy.cfg
编辑配置文件如下:
global #全局配置
log 127.0.0.1 local0
maxconn 1000
daemon #后台运行
defaults #默认参数配置
log global
mode http
#option httplog
option dontlognull
retries 3
timeout connect 5000
timeout client 50000
timeout server 50000
listen admin_stats #admin客户端配置
bind 0.0.0.0:1080
mode http
option httplog
maxconn 10
stats refresh 30s
stats uri /stats
stats realm XingCloud\ Haproxy
stats auth admin:admin
stats auth Frank:Frank
stats hide-version
stats admin if TRUE
listen rabbitmq_admin
bind 0.0.0.0:15670
server rabbitadmin01 node1:15672
server rabbitadmin02 node2:15672
server rabbitadmin03 node3:15672
listen rabbitmq_cluster #rabbitmq监听配置
bind 0.0.0.0:5670
mode tcp
balance roundrobin #轮询,心跳5s,成功2次失败3次确认
server rabbit01 node1:5672 check inter 5000 rise 2 fall 3
server rabbit02 node2:5672 check inter 5000 rise 2 fall 3
server rabbit03 node3:5672 check inter 5000 rise 2 fall 3
7./root/rabbitmq/haproxy-2.0.14/sbin/haproxy -f /root/rabbitmq/haproxy-2.0.14/conf/haproxy.cfg
##启动HAProxy
8.验证lsof -i:1080
访问HAProxy统计页面http://192.168.42.101:1080/stats
访问RabbitMQ页面http://192.168.42.101:15670/
结果如下页面: