######################################haproxy负载均衡###################################
#######################################################################################
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进当前的架构中,同时可以保护web服务器不被暴露到网络上。
1.安装
yum install rpm-build -y
rpmbuild -tb haproxy-1.4.24.tar.gz (同时需要解决依赖性)
rpm -ivh rpmbuild/RPMS/x86_64/haproxy-1.4.24-1.x86_64.rpm
2.配置
<1>基本配置
vim /etc/haproxy/haproxy.cfg
# this config needs haproxy-1.1.28 or haproxy-1.2.1
global
#log 127.0.0.1 local0
log 127.0.0.1 local4 notice ###指定日志设备
log loghost local4 info ###指定日志类型
maxconn 4096
chroot /usr/share/haproxy ###jail目录
uid 99
gid 99
daemon
#debug
#quiet
defaults
log global
mode http ###默认使用http的7层模式 tcp:4层
option httplog
option dontlognull
retries 3
option redispatch ###必须添加option,否则服务开启时会报错,当 client 连接到挂掉的机器时,重新分配到健康的主机
maxconn 2000
contimeout 5000
stats uri /status ###状态监控页面,可观察到haproxy能实现健康检查
listen westos 0.0.0.0:80 ###实现负载均衡调度
balance roundrobin ###调度算法为轮叫
server web1 172.25.104.5:80 check inter 2000 fall 3 ###检测心跳频率,三次失败为不可用
server web2 172.25.104.6:80 check inter 2000 fall 3
server back1 127.0.0.1:80 ###备机 (设置本机为备机,须更改httpd服务的默认端口,避免与haproxy端口冲突)
mkdir /usr/share/haproxy
/etc/init.d/haproxy start
开启realserver的httpd服务
测试:访问 172.25.104.4/status 可监控realserver的状态
访问 172.25.104.4 实现了在realserver端的负载均衡
<2>监控页面访问授权
vim /etc/haproxy/haproxy.cfg
listen stats 0.0.0.0:8000 ###监控页面端口,务必保证不与其他服务冲突
stats enable
stats uri /status ###监控页面地址
stats auth admin:westos ###访问权限 用户名:密码
stats refresh 5s ###五秒自动刷新一次
测试:访问 172.25.104.4:8000/status 需要登陆
<3>日志存储
vim /etc/rsyslog.conf
$ModLoad imudp
$UDPServerRun 514
local1.* /var/log/haproxy.log ##设置日志的位置
/etc/init.d/rsyslog restart
测试:关闭realserver上的服务,查看日志/var/log/haproxy.log
<4>访问权限及错误页面
vi /etc/haproxy/haproxy.cfg
listen westos 0.0.0.0:80
balance roundrobin
server web1 172.25.104.5:80 check inter 2000 fall 3
server web2 172.25.104.6:80 check inter 2000 fall 3
server back1 127.0.0.1:80
acl badguy src 172.25.104.250
block if badguy ###如果此IP访问则跳转到403错误页面
errorloc 403 http://172.25.104.4:8080 ###将403错误页面进行重定向
acl badguy src 172.25.104.7
redirect location http://172.25.104.4:8080 if badguy ###根据用户IP转发页面
/etc/init.d/haproxy restart
<5>通过前端调度后端,实现图文分离,访问与上传分离
vim haproxy.cfg
frontend westos *:80
acl badguy src 172.25.104.250
acl url_img path_end -i .jpg .js .css .png .gif ###如果指定IP访问.jpg页面,则转发给url_img
acl upload method POST GET PUT DELETE ###如果指定IP执行上传动作,则转发给upload
default_backend app ###默认使用后端app调度规则
use_backend image if url_img ###url_img 使用后端名为image的调度规则
use_backend image if upload ###upload 使用后端名为image的调度规则
backend app
balance roundrobin
server web1 172.25.104.5:80 check inter 2000 fall 3
server web2 172.25.104.6:80 check inter 2000 fall 3
server back1 127.0.0.1:8080 backup
backend image
balance roundrobin
server img1 172.25.104.7:80 check inter 2000 fall 3
/etc/init.d/haproxy restart
realserver56端:
yum install php -y
/etc/init.d/httpd restart
mv index.php /var/www/html
realserver7端:
yum install php -y
mv upload_file.php redhat.jpg /var/www/html
mkdir /var/www/html/upload ###存放上传的文件
chmod 777 /var/www/html/upload
测试:访问 172.25.104.4/redhat.jpg 会负载均衡到realserver7的redhat.jpg
访问 172.25.104.4会负载均衡到server56的index.php,点击上传,会负载均衡到server7的upload_file.php,上传文件会保存在server7的upload里
####################################haproxy+keepalived高可用负载均衡######################
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
vrrp_script check_haproxy {
script "/opt/check_haproxy.sh"
interval 2
weight 2
}
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@server4.example.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id server13.example.com
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 92
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.104.100
}
track_script {
check_haproxy
}
}
检测脚本
vi /opt/check_haproxy.sh
#!/bin/bash
/etc/init.d/haproxy status &> /dev/null || /etc/init.d/haproxy restart &> /dev/null
if [ $? -ne 0 ];then
/etc/init.d/keepalived stop &> /dev/null
fi
chmod +x /opt/check_haproxy.sh
测试:
访问172.25.104.100 可实现高可用的负载均衡
#######################################################################################
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进当前的架构中,同时可以保护web服务器不被暴露到网络上。
1.安装
yum install rpm-build -y
rpmbuild -tb haproxy-1.4.24.tar.gz (同时需要解决依赖性)
rpm -ivh rpmbuild/RPMS/x86_64/haproxy-1.4.24-1.x86_64.rpm
2.配置
<1>基本配置
vim /etc/haproxy/haproxy.cfg
# this config needs haproxy-1.1.28 or haproxy-1.2.1
global
#log 127.0.0.1 local0
log 127.0.0.1 local4 notice ###指定日志设备
log loghost local4 info ###指定日志类型
maxconn 4096
chroot /usr/share/haproxy ###jail目录
uid 99
gid 99
daemon
#debug
#quiet
defaults
log global
mode http ###默认使用http的7层模式 tcp:4层
option httplog
option dontlognull
retries 3
option redispatch ###必须添加option,否则服务开启时会报错,当 client 连接到挂掉的机器时,重新分配到健康的主机
maxconn 2000
contimeout 5000
stats uri /status ###状态监控页面,可观察到haproxy能实现健康检查
listen westos 0.0.0.0:80 ###实现负载均衡调度
balance roundrobin ###调度算法为轮叫
server web1 172.25.104.5:80 check inter 2000 fall 3 ###检测心跳频率,三次失败为不可用
server web2 172.25.104.6:80 check inter 2000 fall 3
server back1 127.0.0.1:80 ###备机 (设置本机为备机,须更改httpd服务的默认端口,避免与haproxy端口冲突)
mkdir /usr/share/haproxy
/etc/init.d/haproxy start
开启realserver的httpd服务
测试:访问 172.25.104.4/status 可监控realserver的状态
访问 172.25.104.4 实现了在realserver端的负载均衡
<2>监控页面访问授权
vim /etc/haproxy/haproxy.cfg
listen stats 0.0.0.0:8000 ###监控页面端口,务必保证不与其他服务冲突
stats enable
stats uri /status ###监控页面地址
stats auth admin:westos ###访问权限 用户名:密码
stats refresh 5s ###五秒自动刷新一次
测试:访问 172.25.104.4:8000/status 需要登陆
<3>日志存储
vim /etc/rsyslog.conf
$ModLoad imudp
$UDPServerRun 514
local1.* /var/log/haproxy.log ##设置日志的位置
/etc/init.d/rsyslog restart
测试:关闭realserver上的服务,查看日志/var/log/haproxy.log
<4>访问权限及错误页面
vi /etc/haproxy/haproxy.cfg
listen westos 0.0.0.0:80
balance roundrobin
server web1 172.25.104.5:80 check inter 2000 fall 3
server web2 172.25.104.6:80 check inter 2000 fall 3
server back1 127.0.0.1:80
acl badguy src 172.25.104.250
block if badguy ###如果此IP访问则跳转到403错误页面
errorloc 403 http://172.25.104.4:8080 ###将403错误页面进行重定向
acl badguy src 172.25.104.7
redirect location http://172.25.104.4:8080 if badguy ###根据用户IP转发页面
/etc/init.d/haproxy restart
<5>通过前端调度后端,实现图文分离,访问与上传分离
vim haproxy.cfg
frontend westos *:80
acl badguy src 172.25.104.250
acl url_img path_end -i .jpg .js .css .png .gif ###如果指定IP访问.jpg页面,则转发给url_img
acl upload method POST GET PUT DELETE ###如果指定IP执行上传动作,则转发给upload
default_backend app ###默认使用后端app调度规则
use_backend image if url_img ###url_img 使用后端名为image的调度规则
use_backend image if upload ###upload 使用后端名为image的调度规则
backend app
balance roundrobin
server web1 172.25.104.5:80 check inter 2000 fall 3
server web2 172.25.104.6:80 check inter 2000 fall 3
server back1 127.0.0.1:8080 backup
backend image
balance roundrobin
server img1 172.25.104.7:80 check inter 2000 fall 3
/etc/init.d/haproxy restart
realserver56端:
yum install php -y
/etc/init.d/httpd restart
mv index.php /var/www/html
realserver7端:
yum install php -y
mv upload_file.php redhat.jpg /var/www/html
mkdir /var/www/html/upload ###存放上传的文件
chmod 777 /var/www/html/upload
测试:访问 172.25.104.4/redhat.jpg 会负载均衡到realserver7的redhat.jpg
访问 172.25.104.4会负载均衡到server56的index.php,点击上传,会负载均衡到server7的upload_file.php,上传文件会保存在server7的upload里
####################################haproxy+keepalived高可用负载均衡######################
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
vrrp_script check_haproxy {
script "/opt/check_haproxy.sh"
interval 2
weight 2
}
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@server4.example.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id server13.example.com
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 92
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.104.100
}
track_script {
check_haproxy
}
}
检测脚本
vi /opt/check_haproxy.sh
#!/bin/bash
/etc/init.d/haproxy status &> /dev/null || /etc/init.d/haproxy restart &> /dev/null
if [ $? -ne 0 ];then
/etc/init.d/keepalived stop &> /dev/null
fi
chmod +x /opt/check_haproxy.sh
测试:
访问172.25.104.100 可实现高可用的负载均衡