rabbitmq的功能是链接各组件,这个组件如果挂了,整个系统可能会受到影响
rabbitmq的cluster该如何实现,有2种类型
HA高可用有两种方案
rabbitmq cluster将每一个节点所持有的信息与其他节点进行同步(类似tomcat replication cluster复制节点,各节点彼此同步)
第二种是负载均衡的实现LB,负载均衡集群,使用HAproxy即可实现,haproxy有tcp mode,rabbitmq就是tcp协议的,使用haproxy让用户请求把5672端口的访问转发到rabbitmq主机即可,而且可以健康状态检测
rabbitmq集群不需要复杂配置,只需要再启动时按照特定的方式启动,将命令添加到集群中即可
两台主机都装了rabbitmqserver并且都启动了服务,把两个插件启动以后,只需要查看当前每个服务的状态
cluster status 集群状态
最好让每个节点有自己独立的名称,而且可以基于名称互相访问
设置主机名
另一台主机也设置
查看/etc/hosts确保节点1和2的信息对应
现在需要停止rabbitmq server服务,要想集群方式运行需要设置一个detached选项
基于systemct 启动时,应该时不会工作在后台模式的
启动时用detach即可,
停止服务,提示你reload,以为你修改服务脚本的了,其实没有
其实已经起来了,只不过被你略过了
各自在不同的集群里
现在节点2上把应用服务停止,然后把集群改成新集群,为node1的集群即可
现在让节点1加入节点2 的方式来说明
1.先把应用停止
2.使用join_cluster
–ram表示基于ram的集群
这次直接用服务启动
有问题直接推倒重试
依然不行
不匹配,需要复制cookie文件过去
需要把erlang的cookie复制过去
还是不行
MD5比较完全相同,但还是不行
重新做
重新登录确保主机名已经修改了
node2也一样
clustername终于是短格式了
现在让node1加入到node2,就需要把node1停止启动app
现在就是两个节点
list_vhost有多少虚拟主机
让两个节点间的队列进行同步
注意事项,rabbitmq cluster:
1.使用短格式主机名:解析的名称与每个主机名称保持一致;
2.时间同步;
3.个节点需要启动rabbitmq_managerment插件
4.配置过程
在master节点:
复制其cookie至其他各节点,要注意保持其权限为400;
/var/lib/rabbitmq/.erlang.cookie
在各从节点:
停止应用:
rabbitmqctl stop_app
加入集群:
rabbitmq join-cluster CLUSTER_NAME
启动应用:
rabbitmqctl start_app
如何基于haproxy来做负载均衡,LB集群
listen rabbitmq:5672端口
mode tcp
statsus enable
balance roundrobin
server rabbit01 IP:PORT check inter 5000
server rabbit02 IP:PORT check inter 5000 (单位是秒)
nginx也可以做但是nginx要支持tcp才可以,编译的时候指明