1.RabbitMQ集群搭建
    一般来说,如果只是为了学习RabbitMQ或者验证业务工程的正确性那么在本地环境或者测试环境上使用其单实例部署就可以了,但是出于MQ中间件本身的可靠性、并发性、吞吐量和消息堆积能力等问题的考虑,在生产环境上一般都会考虑使用RabbitMQ的集群方案。
    1.1 集群方案的原理
    RabbitMQ这款消息队列中间件产品本身是基于Erlang编写,Erlang语言天生具备分布式特性(通过同步Erlang集群各节点的cookie来实现)。RabbitMQ本身不需要像ActiveMQ、Kafka那样通过ZooKeeper分别来实现HA方案和保存集群的元数据。
    image.png
    1.2 如下案例中使用多台云服务器进行集群搭建
    主要参考官方文档:https://www.rabbitmq.com/clustering.html

    1. #1、环境准备
    2. hostnamectl set-hostname m1
    3. hostnamectl set-hostname m2
    4. #2、统一 erlang.cookie 文件中 cookie 值 将m1中的 .erlang.cookie 同步到 m2中
    5. scp /var/lib/rabbitmq/.erlang.cookie m2:/var/lib/rabbitmq/.erlang.cookie
    6. #3、Rabbitmq 集群添加节点
    7. #重启 m2机器中 rabbitmq 的服务 在 m2执行
    8. [root@rabbitmq2 ~]# rabbitmqctl stop_app
    9. [root@rabbitmq2 ~]# rabbitmqctl join_cluster --ram rabbit@m2
    10. [root@rabbitmq2 ~]# rabbitmqctl start_app
    11. [root@rabbitmq2 ~]# rabbitmq-plugins enable rabbitmq_management
    12. [root@rabbitmq2 ~]# systemctl restart rabbitmq-server.service
    13. #4、查看集群信息
    14. rabbitmqctl cluster_status

    1.5 负载均衡-HAProxy
    HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案,包括Twitter,Reddit,StackOverflow,GitHub在内的多家知名互联网公司在使用。HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。
    1.5.1 安装HAProxy

    1. #1、安装
    2. yum install haproxy
    3. #2、配置haproxy.cfg文件 具体参照 如下 1.5.2 配置HAProxy
    4. vim /etc/haproxy/haproxy.cfg
    5. #3、启动haproxy
    6. systemctl start haproxy
    7. #4、查看haproxy进程状态
    8. systemctl status haproxy.service
    9. #状态如下说明 已经启动成功 Active: active (running)
    10. #访问如下地址对mq节点进行监控
    11. http://服务器IP:1080/haproxy_stats
    12. #代码中访问mq集群地址,则变为访问haproxy地址:5672

    1.5.2 配置HAProxy
    配置文件路径:/etc/haproxy/haproxy.cfg

    1. #---------------------------------------------------------------------
    2. # Example configuration for a possible web application. See the
    3. # full configuration options online.
    4. #
    5. # http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
    6. #
    7. #---------------------------------------------------------------------
    8. #---------------------------------------------------------------------
    9. # Global settings
    10. #---------------------------------------------------------------------
    11. global
    12. # to have these messages end up in /var/log/haproxy.log you will
    13. # need to:
    14. #
    15. # 1) configure syslog to accept network log events. This is done
    16. # by adding the '-r' option to the SYSLOGD_OPTIONS in
    17. # /etc/sysconfig/syslog
    18. #
    19. # 2) configure local2 events to go to the /var/log/haproxy.log
    20. # file. A line like the following can be added to
    21. # /etc/sysconfig/syslog
    22. #
    23. # local2.* /var/log/haproxy.log
    24. #
    25. log 127.0.0.1 local2
    26. chroot /var/lib/haproxy
    27. pidfile /var/run/haproxy.pid
    28. maxconn 4000
    29. user haproxy
    30. group haproxy
    31. daemon
    32. # turn on stats unix socket
    33. stats socket /var/lib/haproxy/stats
    34. #---------------------------------------------------------------------
    35. # common defaults that all the 'listen' and 'backend' sections will
    36. # use if not designated in their block
    37. #---------------------------------------------------------------------
    38. defaults
    39. mode http
    40. log global
    41. option httplog
    42. option dontlognull
    43. option http-server-close
    44. option forwardfor except 127.0.0.0/8
    45. option redispatch
    46. retries 3
    47. timeout http-request 10s
    48. timeout queue 1m
    49. timeout connect 10s
    50. timeout client 1m
    51. timeout server 1m
    52. timeout http-keep-alive 10s
    53. timeout check 10s
    54. maxconn 3000
    55. #对MQ集群进行监听
    56. listen rabbitmq_cluster
    57. bind 0.0.0.0:5672
    58. option tcplog
    59. mode tcp
    60. option clitcpka
    61. timeout connect 1s
    62. timeout client 10s
    63. timeout server 10s
    64. balance roundrobin
    65. server node1 节点1 ip地址:5672 check inter 5s rise 2 fall 3
    66. server node2 节点2 ip地址:5672 check inter 5s rise 2 fall 3
    67. #开启haproxy监控服务
    68. listen http_front
    69. bind 0.0.0.0:1080
    70. stats refresh 30s
    71. stats uri /haproxy_stats
    72. stats auth admin:admin

    haproxy.cfg配置详解

    1. listen rabbitmg cluster
    2. bind 0.0.0.0:5672#通过5672对M1, M2进行映射
    3. option tcplog #记录tcp连接的状态和时间
    4. mode tcp#四层协议代理,即对TCP协议转发
    5. option clitcpka #开启TCP的Keep Alive. (长连接模式)
    6. timeout connect 1s #haproxy与mq建立连接的超时时间
    7. timeout client 10s#客户端与haproxy最大空闲时间。
    8. timeout server 10s #服务器与haproxy最大空闲时间
    9. balance roundrobin #采用轮询转发消息
    10. #每5秒发送一次心跳包,如连续两次有响应则代表状态良好。
    11. #如连续三次没有响应,则视为服务故障,该节点将被剔除。
    12. server node1 192.168.132.137:5672 check inter 5s rise 2 fall 3
    13. server node2192.168.132.139:5672 check inter 5s rise 2 fall 3
    14. listen http front
    15. #监听端口
    16. bind 0.0.0.0:1080
    17. #统计页面自动刷新时间stats refresh 30s
    18. #统计页面url
    19. stats uri /haproxy?stats
    20. #指定HAproxy访问用户名和密码设置
    21. stats auth admin:admin