Haproxy在socket/tcp下传输数据的使用实例
2016-11-16 17:34
447 查看
使用场景
利用haproxy进行负载均衡,作用于socket下数据传输,非http访问负载均衡。假定场景如下,终端1和终端2负责收集数据,然后希望通过负载均衡器将数据转发到服务器上进行分析。
希望:
1、当两个终端都正常工作,却只有一台服务器(服务器1)时候,会把所有数据发给这台服务器。
2、当两个终端都正常工作,而且有两台服务器时候,会形成如图所示的情况,两个服务器分别处理两个终端的数据,平均分配。
3、当2的情况中出现某一台服务器宕机(服务器1),则此时,会将两个终端收集到的数据都交给另一台服务器(服务器2)进行处理。
特点:原本终端发送数据给服务器时是采用消息中间件zeromq进行通信,保持的连接固然是socket长连接,所以在haproxy启动过程中,需指明为TCP连接(网络4层),而不是http(网络7层)连接。
操作流程
安装参考:高负载均衡学习haproxy之安装与配置http://www.cnblogs.com/ilanni/p/4750081.html
设置配置文件haproxy.cfg
global # 全局参数的设置 log 127.0.0.1 local2 # log语法:log <address_1>[max_level_1] # 全局的日志配置,使用log关键字, # 指定使用127.0.0.1 # 上的syslog服务中的local0日志设备,记录日志等级为info的日志 chroot /usr/local/haproxy #改变当前工作目录 pidfile /usr/local/haproxy/logs/haproxy.pid #当前进程id文件 maxconn 4000 #最大连接数 user haproxy #所属用户 group haproxy #所属组 daemon #以守护进程方式运行haproxy #stats socket /usr/local/haproxy/stats defaults mode tcp #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK log global #应用全局的日志配置 option tcplog option dontlognull option redispatch retries 3 timeout connect 10s #连接超时 timeout client 1m #客户端超时 timeout server 1m #服务器端超时 maxconn 3000 #每个进程可用的最大连接数 listen rabbitmq_local_cluster 10.100.100.171:8082 mode tcp balance roundrobin #负载均衡算法 server web001 10.100.100.171:7000 check inter 2000 fall 3 weight 30 #定义的多个后端 server web002 10.100.100.171:7001 check inter 2000 fall 3 weight 30 #定义的多个后端 listen private_monitoring :8101 mode http option httplog stats enable stats uri /stats stats refresh 1s
常用命令
复制配置文件到haproxy安装目录sudo cp /home/ishadow/Desktop/haproxy.cfg /usr/local/haproxy/
加载指定配置文件haproxy.cfg启动haproxy
sudo /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
关闭所有启动的haproxy进程(haproxy可以重复启动)
killall haproxy
最终效果
访问url:http://10.100.100.171:8101/stats 可以查看haproxy实时负载和请求情况总结
1、haproxy安装并不难,但配置文件会因使用场景不同而不同,需要理解配置文件。
2、在http模式下使用haproxy是将请求负载均衡,而在tcp模式下使用haproxy是将连接负载均衡。
3、Tcp模式下是网络模型第4层连接,与上层协议无关,所以是否使用了例如zeromq、rabbitmq等中间件不会影响haproxy的负载均衡算法,也不会影响haproxy的使用。
4、Haproxy可以完成负载分担、失效转移、主从备份等多种场景下的任务,设置好配置文件即可。
安装参考:
http://www.cnblogs.com/ilanni/p/4750081.html
相关文章推荐
- C#使用Socket发送和接收TCP数据实例
- Android使用Socket(Tcp/Udp)协议进行数据传输(传输大文件)
- Java使用TCP实现数据传输实例详解
- tcp 数据传输实例测试
- 使用DatagramSocket与DatagramPacket传输数据 分类: B1_JAVA 2013-10-12 13:00 1936人阅读 评论(0) 收藏
- python网络编程之TCP通信实例和socketserver框架使用例子
- 使用DatagramSocket与DatagramPacket传输数据
- [gcc编程] socket编程——TCP/UDP数据传输
- 如何使用json在前后台进行数据传输实例介绍
- 使用DatagramSocket与DatagramPacket传输数据
- JAVA_WEB 使用TCP/IP Monitor监测HTTP协议传输的数据
- 总结使用Get、Post、Socket三种方式连接服务端与传输数据的步骤
- [gcc编程] socket编程——TCP/UDP数据传输
- 【转】使用TCP协议连续传输大量数据时,是否会丢包,应如何避免?
- 使用DatagramSocket与DatagramPacket传输数据
- Silverlight使用RSA加密socket tcp通讯数据
- 【Java TCP/IP Socket】深入剖析socket——数据传输的底层实现
- 如何使用TCP向远端SERVER传输数据 (发送与接收)
- socket编程——TCP/UDP数据传输
- 使用DatagramSocket与DatagramPacket传输数据