开始找了很多篇关于如何搭建ha+兔子的文章,但是,由于各种的依赖问题,还是回官网看官方文档比较实在。
下面具体说下搭建的麻烦。
由于开始直接EPEL源下载安装erlang,导致安装rabbit时显示erlang版本必须大于某一版本(rabbit是基于erlang底层节点做集群的,依赖erlang),于是从把erlang从14升级到19,发现依旧报错,继续升级到最新21,发现依然报错! 那就意味着 不是erlang的版本问题了。
去官方看手册,发现 官网上有rabbit提供的专门erlang yum库,果断重新编译安装 结果完美解决,看来官方提供的才是亲儿子
官方提供erlang依赖包:https://packagecloud.io/rabbitmq/erlang
安装完成后 输入erl -v 即可显示erlang版本号,证明成功第一步。
rabbit包:https://packagecloud.io/rabbitmq/rabbitmq-server
把rabbit作为开机启动服务
chkconfig rabbitmq-server on
/sbin/service rabbitmq-server start 启动rabbit
/sbin/service rabbitmq-server status 查看rabbit状态
/sbin/service rabbitmq-server stop 停止rabbit
由于rabbit有可视化管理后台,果断开启
rabbitmq-plugins enable rabbitmq_management
开启后会发现默认账号guest无法登陆,因为据网上所说,3.0以上guest账号已经禁止了非localhost的登陆,需要到配置里面进行修改
/usr/lib/rabbitmq/lib/rabbitmq_server-3.6.16/ebin (最好自己添加新账号)
里面红框置空即可,重启rabbit服务
到此已经完成rabbitmq搭建,集群第二台rabbit也重复上述步骤。
rabbitmq集群是基于erlang,erlang节点通过交换Erlang Cookie从而保持通讯。
集群有两种方案
普通模式:集群中各节点有相同的队列结构,但消息只会存在于集群中的一个节点。对于消费者来说,若消息进入A节点的队列中,当从B节点拉取时,rabbit会将消息从A中取出,并经过B发送给消费者。
镜像模式:消息实体会主动在镜像节点间同步,而不是在取数据时临时拉取,高可用;该模式下,mirror queue有一套选举算法,即1个master、n个slaver,生产者、消费者的请求都会转至master。(这种模式也是基于普通模式上进行,而且master挂了后,需要重新选举master,这时来不及确认的可能会重复消费)
本人只搭建普通的集群,过程如下:
首先,假设两台服务器为A,B
修改其hosts /etc/hosts
保证两部服务器通过自己设定的域名能访问
第二步,由于rb的集群是通过erlang集群,而erlang集群基于cookie
所以将A机器的.erlang.cookie(隐藏文件)
scp /var/lib/rabbitmq/.erlang.cookie B机器:/var/lib/rabbitmq/
之后分别启动两台服务器的mq服务
service rabbitmq-server start
在B服务器中停止 mq_app
rabbitmqctl stop_app
将rb加入集群
join_cluster rabbit@B
启动mq_app
rabbitmqctl start
查看状态
rabbitmqctl cluster_status
这时候应该会发现机器集群已经成功。
[root@B rabbitmq]# rabbitmqctl clusterstatus Cluster status of node rabbit@B [{nodes,[{disc,[rabbit@A,rabbit@B]}]}, {runningnodes,[rabbit@A,rabbit@B]},
{cluster_name,<<"rabbit@A">>},
{partitions,[]},
{alarms,[{rabbit@A,[]},{rabbit@B,[]}
打开后台管理界面,这时候
已经可以看到两个节点。
这时候rabbit集群已经成功搭建。
接下来是haproxy
在服务器C上,先下载haproxy源码包
wget http://www.haproxy.org/download/1.8/src/haproxy-1.8.14.tar.gz
解压, 查看linux系统版本号 uname -r
因为编译的时候需要制定版本号
make TARGET=linux3100 (服务器C版本号为31.0.0)
然后制定文件夹安装 make install PREFIX=/data/haproxy
查看ha 是否安装成功 /data/haproxy/sbin/haproxy -v
然后copy文件到默认启动目录下
cp /data/haproxy/sbin/haproxy /usr/sbin/
cp ./examples/haproxy.init /etc/init.d/haproxy
修改vim /etc/sysconfig/rsyslog
加入 local2.* /var/log/haproxy.log
重启 /etc/init.d/rsyslog restart
然后到最重要的部分,因为编译安装并没有默认配置文件,需要自己手动创建
vim /etc/haproxy/haproxy.cfg
配置内容以业务异,这里提供一份比较完整的配置文件
配置关于rb如下
https://blog.csdn.net/freshair_x/article/details/80542481
配置完成后启动ha,打开后台管理页面
可以看到集群都在正常运行.
关于启动命令 建议是haproxy -f /etc/haproxy/haproxy.cfg ,因为使用配置文件启动可以直接显示报错信息
rabbitmq生产、消费端链接IP均指向服务器C
通过rabbit代码测试,生产者消费者均可以通过服务器C进行生产消费。
到此rabbitmq+ha部署完成。 keepalive将在后续应用到的时候补上。