概述
HAProxy 提供高可用性、负载均衡及基于 TCP 和 HTTP 应用的代理,支持虚拟主机 ,它是免费、快速并且可靠的一种解决方案,包括 Twitter、Reddit、StackOverflow、GitHub 在内的多家知名互联网公司在使用。 HAProxy 实现了一种事件驱动 、单一进程模型 ,此模型支持非常大的井发连接数。摘自《RabbitMQ实战指南》
安装
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install haproxy
- 备份默认配置(此处可以省略)
cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
vim /etc/haproxy/haproxy.cfg
global#日志输出配置,所有日志都记录在本机,通过 localO 输出log 127.0.0.1 local0 infomaxconn 4096stats socket /tmp/haproxy.socket uid haproxy mode 770 level admin#以守护进程方式运行 haproxy #debug #quietdaemon
defaults#应用全局的日志配置log global#默认的模式 mode{tcp l http l health}#TCP是 4层, HTTP是 7层, health只返回 OKmode tcp#日志类别 tcplogoption tcplog#不记录健康检查日志信息option dontlognull retries 3 #3 次失败则认为服务不可用option redispatchmaxconn 2000 #每个进程可用的最大连接数timeout connect 5s #连接超时timeout client 120s #客户端超时timeout server 120s #服务端超时
listen rabbitmq_local_cluster 0.0.0.0:5670 #配置 TCP 模式mode tcpbalance roundrobin #简单轮询#RabbitMQ 集群节点配置server node1 10.211.55.8:5672 check inter 5000 rise 2 fall 3 server node2 10.211.55.9:5672 check inter 5000 rise 2 fall 3server node3 10.211.55.10:5672 check inter 5000 rise 2 fall 3
listen private_monitoring :8100 #监控页面地址mode httpoption httplogstats enablestats uri /statsstats refresh 5s #界面自动刷新时间
haproxy -f /etc/haproxy/haproxy.cfg
- 访问(由于虚拟机有限,node1服务器既安装了rabbitmq又安装了Haproxy)
http://10.211.55.8:8100/stats
测试
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;import java.io.IOException;
import java.util.concurrent.TimeoutException;public class testRabbitmq {public static void main(String[] args) throws IOException, TimeoutException {ConnectionFactory connectionFactory &#61; new ConnectionFactory();connectionFactory.setHost(Config.HOST);connectionFactory.setPort(5670);connectionFactory.setUsername(Config.USER);connectionFactory.setPassword(Config.PWD);connectionFactory.setVirtualHost("/");Channel channel &#61; null;Connection connection &#61; null;try {connection &#61; connectionFactory.newConnection();channel &#61; connection.createChannel();String queueName &#61; "test2";channel.queueDeclare(queueName, true, false, false, null);String msg &#61; "hello,Rabbitmq";for (int i &#61; 0; i < 300; i&#43;&#43;) {channel.basicPublish("", queueName, null, msg.getBytes("UTF-8"));Thread.sleep(500);}} catch (IOException e) {e.printStackTrace();} catch (TimeoutException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();} finally {channel.close();connection.close();}}
}class Config {static String HOST &#61; "10.211.55.8";static String PWD &#61; "123456";static String USER &#61; "admin";}
-
第1次连接node1队列
-
第2次连接node2队列
-
第3次连接node3队列
感谢
《RabbitMQ实战指南》
Centos7搭建RabbitMQ集群及单机多节点部署和rabbitmq理论解析