利用HAPorxy实现负载均衡
1. 利用HAProxy实现负载均衡
192.168.169.137 (haproxy)———负载均衡———-(192.168.169.117192.168.169.118)
安装配置HAproxy
cd /usr/local/
wget http://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.14.2.tar.gz
tar zxvf haproxy-1.3.14.2.tar.gz
mv haproxy-1.3.14.2 haproxy
cd haproxy
make TARGET=linux26
2. 创建配置文件
# vi haproxy.cfg
global
maxconn 5120
chroot /usr/local/haproxy
uid 99
gid 99
daemon
quiet
nbproc 2 #通过nbproc多设置几个haproxy并发进程,这样每个进程的task_queue相对就会短很多,性能自然就能提高不少
#pidfile /var/run/haproxy-private.pid
defaults
log global
mode http
option httplog
option dontlognull
log 127.0.0.1 local3
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webfarm 0.0.0.0:80
mode http
stats uri /haproxy-stats #监控haproxy状态
stats realm Haproxy\ statistics
stats auth netseek:52netseek #设置状态监控的用户名为netseek密码为52netseek
balance roundrobin #负载均衡算法
cookie SERVERID insert indirect
option httpclose #
option forwardfor #apache日志转发功能
option httpchk HEAD /check.txt HTTP/1.0 #健康检测
server app_bbs1 192.168.169.117:80 cookie app1inst1 check inter 2000 rise 2 fall 5
server app_bbs2 192.168.169.118:80 cookie app1inst2 check inter 2000 rise 2 fall 5
syslog.conf里加一行
local3.* /var/log/haproxy.log
# touch /var/log/haproxy.log
# chown haproxy:haproxy /var/log/haproxy.log
# chmod u+x /var/log/haproxy.log
# tail –f /var/log/harpoxy.log 监控日志
# ./haproxy -f haproxy.cfg 启动服务.
监控状态图示http://192.168.169.137/haproxy-stats ,输入用户名密码查看状态。
后端apache日志处理
配置httpd.conf
LogFormat “%{X-Forwarded-For}i %l %u %t \”%r\” %>s %b ” combined
CustomLog /var/log/httpd/access_log combined
虚拟主机不记录检测日志:
SetEnvIf Request_URI “^/check\.txt$” dontlog
LogLevel warn
ErrorLog /var/log/httpd/vhost_error.log
CustomLog /var/log/httpd/vhost_access.log combined env=!dontlog
相关介绍
#./haproxy –help //haproxy相关命令参数介绍.
haproxy -f <配置文件>[-n 最大并发连接总数] [-N 每个侦听的最大并发数] [-d] [-D] [-q] [-V] [-c] [-p <pid文件>] [-s] [-l] [-dk]
[-ds] [-de] [-dp] [-db] [-m <内存限制M>] [{-sf|-st} pidlist...]
-d 前台,debug模式
-D daemon模式启动
-q 安静模式,不输出信息
-V 详细模式
-c 对配置文件进行语法检查
-s 显示统计数据
-l 显示详细统计数据
-dk 不使用kqueue
-ds 不使用speculative epoll
-de 不使用epoll
-dp 不使用poll
-db 禁用后台模式,程序跑在前台
-sf <pidlist>
程序启动后向pidlist里的进程发送FINISH信号,这个参数放在命令行的最后
-st <pidlist>
程序启动后向pidlist里的进程发送TERMINATE信号,这个参数放在命令行的最后
对于大型网站而言,分布式及负载均衡技术都会用到,而一般小型站点基本上不会涉及这些技术,所以很多在中小型科创公司的同学对这两个概念可能还不太清楚。
什么是分布式系统?
分布式系统是相对于集中式系统而言的,中小型应用大多数都是集中式系统,即:整个项目所依懒的东西都在一个应用内,耦合度较高。而分布式系统就是将集中式应用按业务、功能、模块来进行拆分,部署在不同节点的服务器上以避免单一节点故障,提高系统的可用性。
通俗的说,分布式就是将同一个任务交给不同的服务器共同去完成,或者是不同任务交给不同服务器去完成。如果任务是相同的,这种分布式部署也可以称为“集群”。
什么是负载均衡?
负载均衡其实就是将用户的请求通过特定算法(如:轮询、随机、IPHash、URLHash等)分摊至不同服务器上去执行,负载均衡其实干的事就是任务调度和转发。
负载均衡技术的实现方案
负载均衡的实现方式有很多,最常见的有:
1、IP负载均衡
基于TCP/IP技术实现的负载均衡,这种可以借助硬件或软件来实现,硬件主要是F5,软件就很多了,比如:Nginx、HAProxy、LVS等。
2、DNS轮询
现在一些智能DNS解析平台可以轻松实现负载均衡,我们通过配置多条DNSA记录来分发请求至不同服务器上。但是DNS轮询有个致命缺点:缺乏及时的健康检查机制、暴露真实IP存在安全隐患。
3、CDN
其实CDN内容分发网络也是负载均衡的一种实现方式,CDN分布全国的节点服务器其实就是分布式部署的。
一、负载均衡的作用
1、转发功能
按照一定的算法【权重、轮询】,将客户端请求转发到不同应用服务器上,减轻单个服务器压力,提高系统并发量。
2、故障移除
通过心跳检测的方式,判断应用服务器当前是否可以正常工作,如果服务器期宕掉,自动将请求发送到其他应用服务器。
3、恢复添加
如检测到发生故障的应用服务器恢复工作,自动将其添加到处理用户请求队伍中。
二、Nginx实现负载均衡
1、源地址哈希法:根据获取客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。
2、轮询法:将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。
3、随机法:通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。
4、加权轮询法:不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。
5、加权随机法:与加权轮询法一样,加权随机法也根据后端机器的配置,系统的负载分配不同的权重。不同的是,它是按照权重随机请求后端服务器,而非顺序。
6、最小连接数法:由于后端服务器的配置不尽相同,对于请求的处理有快有慢,最小连接数法根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器。
三、配置说明
四、轮询
五、权重
六、iphash
七、最少链接
八、fair
九、完整代码
十、也可以使用域名
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)