haproxy已经收录到了base仓库,所以我们直接yum安装就可以了,因为我这里实验使用的Centos7系统,所以还是使用YUM,其它发行版本可另行抉择。
如果遇到yum安装报错You could try using –skip-broken to work around the problem
可移除yum.repos.d目录下的所有文件,只留base.repo文件然后yum clean all
再执行yum install
简单实现用haproxy实现后端主机代理,简单均衡
1、> vim /etc/haproxy.cfg 在haprxoy 10.1.15.40主机上修改以下内容
frontend main
bind *:80,*:8080
default_backend web
# static backend for serving up images, stylesheets and such
backend web
balance roundrobin
server web1 10.1.15.41:80 check
server web2 10.1.15.42:80 check
2、在后端两台主机安装httpd启动服务,给指定网页分别叫backend1和backend2
10.1.15.41
vim /var/www/html
<h1> backend 1 <h1>
10.1.15.42
vim /var/www/html
<h1> backend 2 <h1>
hdr(< name >):
根据用户请求报文中指定的http首部的值进行调度,常用于实现对同一个虚拟主机的请求始终发往同个backend server。
first:
先到先得,服务器名称标识字符最短的优先调用。一台用完才用第二台,忽略权重。
**演示示例**
更改调度算法为source,把同一IP地址的请求将始终被调度至某特定的服务器
vim /etc/haproxy/haproxy.cfg
backend web
balance roundrobin //修改为source
server web1 10.1.15.41:80 check
server web2 10.1.15.42:80 check
systemctl reload haproxy.service
测试:http://19.1.15.40
更改调度算法为uri,把同一页面请求通过调度算法发往到后端指定服务器
vim /etc/haproxy/haproxy.cfg
backend web
balance roundrobin //修改为uri
server web1 10.1.15.41:80 check
server web2 10.1.15.42:80 check
for i in {1..10}; do echo "test page $i at BACKEND 1 " > /var/www/html/test$i.html; done
systemctl reload haproxy.service
测试:
for i in {1..10}; do curl http://10.1.15.40/test$i.html;done
结果:把同一个被请求到的页面始终发往到指定的后端服务器上
更改调度算法为hdr,把同一浏览器的请求,始终发往到后端指定服务器上
vim /etc/haproxy/haproxy.cfg
backend web
balance roundrobin //修改为hdr(User-Agent)
server web1 10.1.15.41:80 check
server web2 10.1.15.42:80 check
systemctl reload haproxy.service
测试:
for i in {1..10}; do curl http://10.1.15.40/test$i.html;done
结果:只要浏览器一样,请求始终被调度到指定后端服务器上
调整服务器的最大并发连接数,并启用stats页面做认证
定义并发数有两种方法:
一种,全局定义,一种默认定义
vim /etc/haproxy/haproxy.cfg
frontend main //在此下面定义maxconn 10000
bind * :80, * :8080
maxconn 10000
定义stats页面,在代理配置段四项中都可以定义
vim /etc/haproxy/haproxy.cfg
frontend main
bind :80,:8080
maxconn 10000 //最大并发连接数
stats enable // 开启stats页面
stats uri /admin?stats //自定义stats页面
default_backend web //默认的后端主机标识web
stats realm stats\ page\ area //开启认证界面
stats auth admin:admin //认证用户名密码
stats hide-version //隐藏版本信息
stats refresh 5s //指定stats页面5秒刷新一次
stats admin if TRUE //内建访问控制列表
测试:http://10.1.15.40/haproxy?stats
对后端服务器做健康状况检测
check为server的参数,可启动对此server执行健康状态的检测。check借助其额外的参数可实现更精细的监测机制。
inter < delay>:
健康状态检测的时间间隔,单位为毫秒,默认为2000,可以使用fastinter和downinter来根据服务器端状态优化此时间延迟
rise < count>:
健康状态检测中某离线的server从离线状态转换至正常状态需要成功检查的次数
fall < count>:
确认server从正常状态转换为不可用状态需要检查的次数
默认为传输层检测,即探测端口是否能响应。
需要执行应用层检测,则需要
httpchk, smtpchk, mysql-check, pgsql-check, ssl-hello-chk;
vim /etc/haproxy/haproxy.cfg
backend web //下面修改内容
balance roundrobin
server web1 10.1.15.41:80 weight 2 maxconn 5000 check inter 1 rise 1 fall 2
server web2 10.1.15.42:80 weight 1 maxconn 3000 check inter 1 rise 1 fall 2
测试:10.1.15.40/haproxy?stats
对后端服务器做加权轮询
vim /etc/haproxy/haproxy.cfg
backend web //在后端主机下列加入
balance roundrobin
server web1 10.1.15.41:80 check weight 2 maxconn 5000 cookie web1
server web2 10.1.15.42:80 check weight 1 maxconn 3000 cookie web2
systemctl reload haproxy.service
测试:
for i in {1..10}; do curl http://10.1.15.40/index.html;done
结果:权重weight,并发maxconn,指定的值cookie
注意:修改后端服务器的调度算法:一定要重启haproxy的服务,reload是不成功