rabbitmq+haproxy 集群环境搭建
实验环境:
4台centos6服务器:
172.16.1.130 rabbitmqnode0 主rabbitmq服务器
172.16.1.131 rabbitmqnode1 节点2
172.16.1.132 rabbitmqnode2 节点3
172.16.1.140 haproxy 负载代理服务器
1,在三个rabbitmq节点上分别搭建rabbitmq.
2.搭建haproxy服务…..方法略.yum源自带有haproxy工具
yum install haproxy
一.rabbitmq安装.
这里只讲解一台服务器的安装.
1.先安装erlang环境
rabbitmq是基于erlang语言开发的.所以需要安装erlang语言包.官网提供了三种安装Erlang的方法:install Erlang
1.rabbitmq提供了精简版的erlang包.只安装运行rabbitmq的组件.
2.erlang的源码包
3.EPEL源
这里使用了epel源安装erlang:
1 | yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm |
对于centos7的yum源地址为: https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
2.官网下载rabbitmq-server的RPM包
http://www.rabbitmq.com/install-rpm.html
3.rabbitmq-server需要socat工具,安装socat
1 | wget --no-cache http://www.convirture.com/repos/definitions/rhel/6.x/convirt.repo -O /etc/yum.repos.d/convirt.repo |
4.安装rabbitmq-server
1 | rpm -ivh rabbitmq-server-3.4.1-1.noarch.rpm |
5.设置rabbitmq开机启动
1 | chkconfig rabbitmq-server on |
6.配置配置文件
1 | cp /usr/share/doc/rabbitmq-server-3.4.1/rabbitmq.config.example /etc/rabbitmq/ |
6.开启用户远程访问
1 | vim /etc/rabbitmq/rabbitmq.config |
note:注意要去掉后面的逗号。
7.开启web界面管理工具
1 | rabbitmq-plugins enable rabbitmq_management |
8.启动rabbitmq-server
1 | service rabbitmq-server restart |
我在启动的时候遇见两个坑
1.ERROR: epmd error for host 172: badarg (unknown POSIX error)
解决方案:
vim /etc/rabbitmq/rabbitmq-env.conf (这个文件是没有的,需要手动创建)
在文件里面添加这一行:NODENAME=rabbit@localhost,保存
2.cookie文件权限不对
1 | chown rabbitmq.rabbitmq /var/lib/rabbitmq/.erlang.cookie |
9.开放端口 : 15672/5672
至此.Rabbitmq安装完毕
二.集群搭建
1.在三台rabbitmq服务器上分别指定对方的Hostname和ip地址关系
注意 这里要指定的是本机和其他节点的hostname主机名.
我在生产上搭建集群的时候,我指定的格式是:rabbit@hostname.所以在这里踩过很深很深的坑..请详细看另外一篇笔记: 生产环境搭建rabbitmq集群遇到的坑
2.把主节点的Erlang cookie复制到其他两台节点
1 | [root@rabbitmqnode0 ~]# scp /var/lib/rabbitmq/.erlang.cookie 172.16.1.131:/var/lib/rabbitmq/ |
3.在其他2个节点上使用-detached运行
1 | [root@rabbitmqnode1 rabbitmq]# rabbitmqctl stop |
(节点2服务器过程略)
4.查看各节点状态
1 | rabbitmqctl status |
5.在其他2个节点上创建并部署集群
1 | [root@rabbitmqnode1 rabbitmq]# rabbitmqctl stop_app |
我在这里踩到过坑.加入集群报错.重新 rabbitmq-server -detached又正常了,很奇怪
6.查看集群状态
1 | [root@rabbitmqCluster]#rabbitmqctl cluster_status |
集群到此部署完毕.
访问主节点页面可以看到rabbitmq集群状态,使用默认的用户密码:guest登录
三.配置haproxy服务
1 | vim /etc/haproxy/haproxy.cfg |
启动haproxy
1 | service haproxy start |
浏览器输入:http://172.16.1.140:1080/haproxy?stats —用户名和密码admin:admin
http://172.16.1.140:8004 —用户名密码:guest
可以看到和rabbitmq主节点一样的页面
至此haproxy+rabbitmq集群成功搭建完成
四.代码测试:
在python上编写producer和consumer代码.连接到Haproxy.端口默认5672不用指定.
发送5条测试消息.
可以看到成功接收到5条消息
队列名为hello
模拟一个节点down掉:
1 | [root@rabbitmqnode2 ~]# rabbitmqctl stop_app |
haproxy和rabbitmq显示一个节点不可用:
节点启动:
1 | [root@rabbitmqnode2 ~]# rabbitmqctl start_app |
回归正常: