软件:LVS、Haproxy、Nginx…
硬件:F5、绿盟、梭子鱼等
RR算法是最简单最常用的一种算法,即轮询调度
LC算法即最小连接数算法,根据后端的节点连接数大小动态分配前端请求
SH即基于来源访问调度算法,此算法用于一些有 Session会话记录在服务器端的场景,可以基于来源的IP、Cookie等做集群调度
20.0.0.11
20.0.0.13(web1)
20.0.0.14(web2)
20.0.0.15
20.0.0.16
[root@haproxy ~]# yum -y install gcc gcc-c++ make pcre-devel bzip2-devel #解决依赖环境
[root@haproxy ~]# tar zxvf haproxy-1.4.24.tar.gz
[root@haproxy ~]# cd haproxy-1.4.24/
[root@haproxy haproxy-1.4.24]# make TARGET=linux26 && make install
[root@haproxy haproxy-1.4.24]# mkdir /etc/haproxy #创建haproxy目录
[root@haproxy haproxy-1.4.24]# cp examples/haproxy.cfg /etc/haproxy/ #将haproxy配置文件复制到haproxy目录下
[root@haproxy haproxy-1.4.24]# vi /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local0 #配置日志记录,local0为日志设备,默认存放到系统日志
log 127.0.0.1 local1 notice #notice为日志级别,通常有24个级别
#log loghost local0 info
maxconn 4096 #最大连接数,根据应用实际情况进行调整,推荐使用10240
daemon
# chroot /usr/share/haproxy #注释
uid 99 #用户uid
gid 99 #用户gid
#debug
#quiet
defaults
log global #定义日志为global配置中的日志定义
mode http #模式为http
option httplog #采用http日志格式记录日志
option dontlognull #保证HAProxy不记录上级负载均衡发送过来的用于检测状态没有数据的心跳包。
retries 3 #检查节点服务器失败连续达到三次则认为节点不可用
# redispatch #注释
maxconn 2000 #最大连接数
contimeout 5000 #连接超时时间
clitimeout 50000 #客户端超时时间
srvtimeout 50000 #服务器超时时间
###删除所有listen,增加内容
###listen #配置项目,一般为配置应用模块参数
listen webcluster 0.0.0.0:80
option httpchk GET /index.html #检查服务器的index.html文件
# option persist #强制将请求发送到已经down掉的服务器
balance roundrobin #负载均衡调度算法使用轮询算法,HAProxy把请求轮流的转发到每一个服务器上,依据每台服务器的权重,此权重会动态调整。最常见的默认配置。
server web1 20.0.0.13:80 check inter 2000 fall 3 #定义在线节点,间隔2秒,重试3次
server web2 20.0.0.14:80 check inter 2000 fall 3 #定义在线节点,间隔2秒,重试3次
# server inst2 192.168 114.56:81 check inter 2000 fall 3 backup #定义备份节点
随着企业网站负载增加, haproxy参数优化相当重要
daemon:守护进程模式, Haproxy可以使用非守护进程模式启动,建议使用守护进程模式启动
nbproc:负载均衡的并发进程数,建议与当前服务器CPU核数相等或为其2倍
retries:重试次数,主要用于对集群节点的检查,如果节点多,且并发量大,设置为2次或3次
maxconn:最大连接数,根据应用实际情况进行调整,推荐使用10 240
option http-server-close:主动关闭http请求选项,建议在生产环境中使用此选项
timeout http-keep-alive:长连接超时时间,设置长连接超时时间,可以设置为10s
timeout http-request:http请求超时时间,建议将此时间设置为5~10s,增加http连接释放速度
timeout client:客户端超时时间,如果访问量过大,节点响应慢,可以将此时间设置短一些,建议设置为1min左右就可以了
[root@haproxy haproxy-1.4.24]# cp examples/haproxy.init /etc/init.d/
[root@haproxy haproxy-1.4.24]# vi /etc/init.d/haproxy
# chkconfig: 35 85 15 #将-换成35
[root@haproxy haproxy-1.4.24]# chmod 755 /etc/init.d/haproxy #给haproxy增加执行权限
[root@haproxy haproxy-1.4.24]# chkconfig --add haproxy #将haproxy添加进系统管理服务
[root@server1 haproxy-1.4.24]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
[root@haproxy ~]# systemctl restart haproxy
## 调度器地址:20.0.0.11(haproxy服务器地址)
Haproxy的日志默认是输出到系统的 syslog中,在生产环境中一般单独定义出来
[root@haproxy ~]# vi /etc/haproxy/haproxy.cfg
global
log /dev/log local0 info
log /dev/log local0 notice
[root@haproxy ~]# vi /etc/rsyslog.d/haproxy.conf #编辑新的haproxy配置文件
if ($programname == 'haproxy' and $syslogseverity-text == 'info')
then -/var/log/haproxy/haproxy-info.log
&~
if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
then -/var/log/haproxy/haproxy-notice.log
&~
[root@haproxy ~]# systemctl restart haproxy
[root@haproxy ~]# systemctl restart rsyslog.service
[root@haproxy ~]# cd /var/log/haproxy/
[root@haproxy haproxy]# ls
haproxy-info.log haproxy-notice.log
haproxy-info.log #调度信息
haproxy-notice.log #haproxy启动信息
[root@server1 ~]# yum -y install nfs*
[root@server1 ~]# yum -y install rpcbind
[root@server1 ~]# mkdir /web1 /web2
[root@server1 ~]# echo "this is web1
" > /web1/index.html
[root@server1 ~]# echo "this is web2
" > /web2/index.html
[root@server1 ~]# vi /etc/exports
/web1/ 20.0.0.13(ro)
/web2/ 20.0.0.14(ro)
[root@server1 ~]# systemctl restart nfs-utils
[root@server1 ~]# systemctl restart rpcbind
[root@server1 ~]# showmount -e
Export list for server1:
/web2 20.0.0.14
/web1 20.0.0.13
###首先安装在线源
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm #不安装在线源无法yum安装nginx
yum安装nginx
yum -y install nginx
[root@server1 html]# mount 20.0.0.15:/web1/ /usr/share/nginx/html
[root@server1 html]# df -Th
[root@server1 html]# systemctl restart httpd
[root@server1 html]# curl localhost
<h1>this is web1</h1>
###首先安装在线源
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm #不安装在线源无法yum安装nginx
yum安装nginx
yum -y install nginx
[root@server1 ~]# mount 20.0.0.15:/web2 /usr/share/nginx/html
[root@server1 ~]# df -Th
[root@server1 ~]# systemctl start httpd
[root@server1 ~]# curl localhost
<h1>this is web2</h1>
[root@server1 ~]# curl 20.0.0.11
<h1>this is web1</h1>
[root@server1 ~]# curl 20.0.0.11
<h1>this is web2</h1>