RabbitMQ集群搭建

  1. 集群方案的原理
    image
  2. 单机多实例部署
    [root@atguigu ~]# systemctl start rabbitmq-server.service
    [root@atguigu ~]# systemctl status rabbitmq-server.service
    #停止rabbitmq服务
    [root@atguigu ~]# systemctl stop rabbitmq-server.service
    #启动三个节点做集群演示:
    [root@atguigu ~]# RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit1 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15672}]"  rabbitmq-server -detached
    [root@atguigu ~]# RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=rabbit2 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]"  rabbitmq-server -detached
    [root@atguigu ~]# RABBITMQ_NODE_PORT=5674 RABBITMQ_NODENAME=rabbit3 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}]"  rabbitmq-server -detached
    #启动三个节点后,分别访问三个节点,后台管理页面,看看是否OK.
    #停止服务命令:
    rabbitmqctl -n rabbit1 stop
    rabbitmqctl -n rabbit2 stop
    rabbitmqctl -n rabbit3 stop
    
    #rabbit1操作作为主节点:
    [root@atguigu ~]# rabbitmqctl -n rabbit1 stop_app
    [root@atguigu ~]# rabbitmqctl -n rabbit1 reset
    [root@atguigu ~]# rabbitmqctl -n rabbit1 start_app
    
    #rabbit2操作为从节点:
    [root@atguigu ~]# rabbitmqctl -n rabbit2 stop_app
    [root@atguigu ~]# rabbitmqctl -n rabbit2 reset
    [root@atguigu ~]# rabbitmqctl -n rabbit2 join_cluster rabbit1
    [root@atguigu ~]# rabbitmqctl -n rabbit2 start_app
    
    #rabbit3操作为从节点:
    [root@atguigu ~]# rabbitmqctl -n rabbit3 stop_app
    [root@atguigu ~]# rabbitmqctl -n rabbit3 reset
    [root@atguigu ~]# rabbitmqctl -n rabbit3 join_cluster rabbit1
    [root@atguigu ~]# rabbitmqctl -n rabbit3 start_app
    
    #查看集群状态:
    [root@atguigu ~]# rabbitmqctl -n rabbit1 cluster_status
    
  3. 集群管理:
    #将节点加入指定集群中。在这个命令执行前需要停止RabbitMQ应用并重置节点。
    rabbitmqctl join_cluster {cluster_node} [–ram]
    
    #显示集群的状态。
    rabbitmqctl cluster_status
    
    #修改集群节点的类型。在这个命令执行前需要停止RabbitMQ应用。
    rabbitmqctl change_cluster_node_type {disc|ram}
    
    #将节点从集群中删除,允许离线执行。
    rabbitmqctl forget_cluster_node [–offline]
    
    #在集群中的节点应用启动前咨询clusternode节点的最新信息,并更新相应的集群信息。这个和join_cluster不同,它不加入集群。考虑这样一种情况,节点A和节点B都在集群中,当节点A离线了,节点C又和节点B组成了一个集群,然后节点B又离开了集群,当A醒来的时候,它会尝试联系节点B,但是这样会失败,因为节点B已经不在集群中了。
    rabbitmqctl update_cluster_nodes {clusternode}
    
    #取消队列queue同步镜像的操作。
    rabbitmqctl cancel_sync_queue [-p vhost] {queue}
    
    #设置集群名称。集群名称在客户端连接时会通报给客户端。Federation和Shovel插件也会有用到集群名称的地方。集群名称默认是集群中第一个节点的名称,通过这个命令可以重新设置。
    rabbitmqctl set_cluster_name {name}
    
  4. 镜像集群配置
    • rabbitmqctl set_policy my_ha "^"" '
    • image
    • Name:策略名称
    • Pattern:匹配的规则,如果是匹配所有的队列,是^.
    • Definition:使用ha-mode模式中的all,也就是同步所有匹配的队列。问号链接帮助文档。
  5. 负载均衡-HAProxy
    • HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案,包括Twitter,Reddit,StackOverflow,GitHub在内的多家知名互联网公司在使用。HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。
    • 安装HAProxy
      //下载依赖包
      yum install gcc vim wget
      //上传haproxy源码包
      //解压
      tar -zxvf haproxy-1.6.5.tar.gz -C /usr/local
      //进入目录、进行编译、安装
      cd /usr/local/haproxy-1.6.5
      make TARGET=linux31 PREFIX=/usr/local/haproxy
      make install PREFIX=/usr/local/haproxy
      mkdir /etc/haproxy
      //赋权
      groupadd -r -g 149 haproxy
      useradd -g haproxy -r -s /sbin/nologin -u 149 haproxy
      //创建haproxy配置文件
      vim /etc/haproxy/haproxy.cfg
      
    • 配置HAProxy
      #全局配置
      global
      	#日志输出配置,所有日志都记录在本机,通过local0输出
      	log 127.0.0.1 local0 info
      	#最大连接数
      	maxconn 5120
      	#改变当前的工作目录
      	chroot /usr/local/haproxy
      	#以指定的UID运行haproxy进程
      	uid 99
      	#以指定的GID运行haproxy进程
      	gid 99
      	#以守护进程方式运行haproxy
      	daemon
      	quiet
      	nbproc 20
      	#当前进程PID文件
      	pidfile /var/run/haproxy.pid
      #默认配置
      defaults
      	#应用全局的日志配置
      	log global
      	#默认的模式mode{tcp|http|health}
      	mode tcp
      	#日志类别
      	option tcplog
      	#不记录检查检查日志信息
      	option dontlognull
      	#3次失败则认为服务不可用
      	retries 3
      	option redispatch
      	#每个进程可用的最大连接数
      	maxconn 2000
      	#连接超时
      	contimeout 5s
      	#客户端超时
      	clitimeout 60s
      	#服务端超时
      	srvtimeout 15s    
      #绑定配置
      listen rabbitmq_cluster
      	bind 127.0.0.1:5677
      	#配置TCP模式
      	mode tcp
      	#balance url_param userid
      	#balance url_param session_id check_post 64
      	#balance hdr(User-Agent)
      	#balance hdr(host)
      	#balance hdr(Host) use_domain_only
      	#balance rdp-cookie
      	#balance leastconn
      	#balance source //ip
      	#简单的轮询
      	balance roundrobin
      	#server rabbit1 定义服务内部标识,
      	#127.0.0.1:5672 服务连接IP和端口,
      	#check inter 5000 定义每隔多少毫秒检查服务是否可用,
      	#rise 2 服务故障后需要多少次检查检查才能被再次确认可用,
      	#fall 2 经历多次失败的检查检查后,haproxy才会停止使用此服务
      	#weight 1 定义服务权重
      	server rabbit1 127.0.0.1:5672 check inter 5000 rise 2 fall 2 weight 1
      	server rabbit2 127.0.0.1:5673 check inter 5000 rise 2 fall 2 weight 1
      	server rabbit3 127.0.0.1:5674 check inter 5000 rise 2 fall 2 weight 1
      #haproxy监控页面地址
      listen stats
      	bind 192.168.137.130:8100
      	mode http
      	option httplog
      	stats enable
      	stats uri /rabbitmq-stats
      	stats refresh 5s
      
    • 启动HAproxy负载
      /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
      
    • 查看haproxy进程状态
      ps -ef | grep haproxy
      
    • 访问如下地址对mq节点进行监控:http://192.168.137.130:8100/rabbitmq-stats
      image
posted @ 2021-11-16 12:25  lq-12040  阅读(30)  评论(0编辑  收藏  举报