使用haproxy实现负载均衡集群
本文引用:https://www.cnblogs.com/happy1983/p/9265358.html
一、HAProxy概述:
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。根据官方数据,其最高极限支持10G的并发。
HAProxy特别适用于那些负载特大的web站点, 这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
其支持从4层至7层的网络交换,即覆盖所有的TCP协议。就是说,Haproxy 甚至还支持 Mysql的均衡负载。
相同点:在功能上,proxy通过反向代理方式实现 WEB均衡负载。和 Nginx,ApacheProxy,lighttpd,Cheroke 等一样。
不同点:Haproxy 并不是 web 服务器。以上提到所有带反向代理均衡负载的产品,都清一色是 WEB 服务器。简单说,就是他们能处理解析页面的。而Haproxy 仅仅是一款的用于均衡负载的应用代理。其自身并不能提供web服务。但其配置简单,拥有非常不错的服务器健康检查功能还有专门的系统状态监控页面,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入。
https://www.haproxy.org/#down
https://github.com/haproxy/haproxy/releases/ 在github 可以下载
本人项目情况。因服务器不够原因
分发服务器:172.16.38.226:8091
两台web服务器: 172.16.38.225:8099,172.16.38.226:8099
操作系统:centos6.5
二、实战
1.安装依赖
yum -y install make gcc gcc-c++ openssl-devel
2.安装haproxy
haproxy-1.7.14.tar.gz
[root@xuegod63 ~]# tar -zxvf haproxy-1.7.14.tar.gz [root@xuegod63 haproxy-1.7.14]# cd /data/haproxy-1.7.14 [root@xuegod63 haproxy-1.7.14]# uname -r #查看内核版本 3.10.0-693.el7.x86_64 [root@xuegod63 haproxy-1.7.14]# make TARGET=linux2628 PREFIX=/usr/local/haproxy #指定操作系统内核类型和安装的路径。也可以直接修改Makefile配置文件中这两个变量的值。如下: [root@xuegod63 haproxy-1.7.14]# vim Makefile 94 PREFIX = /usr/local/haproxy 104 TARGET =linux26 [root@xuegod63 haproxy-1.7.14]# make install PREFIX=/usr/local/haproxy #如果没有修改Makefile配置文件中PREFIX变量的值,就必须在此重新对,PREFIX=/usr/local/haproxy赋值,否则直接执行 make install 时,make install会直接读取Makefile文件中PREFIX的变量值。 [root@xuegod63 haproxy-1.7.14# ls /usr/local/haproxy/ doc sbin share
3. 没有生成配置文件,自己手动写一个HAproxy配置文件
[root@xuegod63 ~]
# mkdir /usr/local/haproxy/etc
[root@xuegod63 ~]
# vim /usr/local/haproxy/etc/haproxy.cfg #手动创建配置文件
#全局配置 global #设置日志 log 127.0.0.1 local3 info #用户与用户组 maxconn 4096 chroot /usr/local/haproxy uid 99 #所属运行的用户uid gid 99 #所属运行的用户组 daemon #以后台形式运行haproxy nbproc 1 #启动1个haproxy实例。# #工作进程数量(CPU数量) ,实际工作中,应该设置成和CPU核心数一样。 这样可以发挥出最大的性能。 pidfile /usr/local/haproxy/run/haproxy.pid #将所有进程写入pid文件 #默认配置 defaults log global mode http option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000 #前端配置,http_front名称可自定义 frontend http_front # 发起http请求道8091端口,会被转发到设置的ip及端口 bind *:8091 #haproxy的状态管理页面,通过/haproxy?stats来访问 stats uri /haproxy?stats default_backend http_back #后端配置,http_back名称可自定义 backend http_back #负载均衡方式 #source 根据请求源IP #static-rr 根据权重 #leastconn 最少连接者先处理 #uri 根据请求的uri #url_param 根据请求的url参数 #rdp-cookie 据据cookie(name)来锁定并哈希每一次请求 #hdr(name) 根据HTTP请求头来锁定每一次HTTP请求 #roundrobin 轮询方式 # inter 2000 健康检查时间间隔2秒 # rise 3 检测多少次才认为是正常的 # fall 3 失败多少次才认为是不可用的 # weight 30 权重 # 需要转发的ip及端口 server node1 172.16.38.226:8099 check inter 2000 rise 3 fall 3 weight 30 server node2 172.16.38.225:8099 check inter 2000 rise 3 fall 3 weight 30
保存之后
使用nobody用户运行haproxy
[root@xuegod63 haproxy-1.7.14]
# id nobody
uid=99(nobody) gid=99(nobody)
groups
=99(nobody)
#id 为99
4.设置haproxy启动脚本
[root@xuegod63 ~]
# cp /data/haproxy-1.7.14/examples/haproxy.init /etc/init.d/haproxy
[root@xuegod63 ~]
# chmod 755 /etc/init.d/haproxy
[root@xuegod63 ~]
# vim /etc/init.d/haproxy #修改后的脚本
PIDFILE=/usr/local/haproxy/run/haproxy.pid
LOCKFILE=/usr/local/haproxy/run/haproxy
编辑后保存
复制haproxy文件到
/usr/sbin
下
因为上面的haproxy.init启动脚本默认会去
/usr/sbin
下找
[root@xuegod63 ~]
#cp /usr/local/haproxy/sbin/haproxy /usr/sbin/
创建目录和权限
[root@xuegod63 ~]
# mkdir -p /usr/local/haproxy/run
[root@xuegod63 ~]
# chown nobody /usr/local/haproxy/ -R
配置日志收集
[root@xuegod63 ~]
# vim /etc/rsyslog.conf #打开以下两行的注释,不打开收不到日志
$ModLoad imudp
#取消注释
$UDPServerRun 514
#取消注释
local7.*
/var/log/boot
.log
#下面添加两行
local3.*
/var/log/haproxy
.log
local0.*
/var/log/haproxy
.log
5. 启动停止haproxy服务
特殊启动方法1
[root@xuegod63 etc]
# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/etc/haproxy.cfg
查看状态:
[root@xuegod63 etc]
# ps -axu | grep haproxy
nobody 3871 0.0 0.0 12228 1036 ? Ss 21:53 0:00
/usr/local/haproxy/sbin/haproxy
-f
/usr/local/haproxy/etc/haproxy
.cfg
[root@xuegod63 etc]
# netstat -antup | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3871
/haproxy
6.测试服务端口
vi /etc/sysconfig/iptables
加上8091端口
-A INPUT -p udp -m state --state NEW -m udp --dport 8091 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8091 -j ACCEPT
保存后,重启网卡
service iptables restart
7.测试haproxy集群代理正常
在浏览器打开访问:http://172.16.38.226:8091/
访问之后会代理成web服务器
172.16.38.226:8099 或172.16.38.225:8099
看到业务效果之后,说明haproxy是正常的。
或者通过访问http://172.16.38.226:8091/haproxy?stats看下web官方的
至于haproxy的集群策略还得慢慢研究