HAProxy简介:
- HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机。其比较适用于负载比较大的web站点,这些站点需要保持会话,所以在七层处理。
- Haproxy配置中分成五部分内容,当然这些组件不是必选的,可以根据需要选择作为配置。
-
global:参数是进程级的,通常和操作系统(OS)相关。这些参数一般只设置一次,如果配置无误,就不需要再次配置进行修改;
-
default:配置默认参数的,这些参数可以被利用配置到frontend,backend,listen组件;
-
frontend:接收请求的前端虚拟节点,Frontend可以根据规则直接指定具体使用后端的backend(可动态选择);
-
backend:后端服务集群的配置,是真实的服务器,一个Backend对应一个或者多个实体服务器;
-
listen:Frontend和Backend的组合体
-
HAProxy配置:
- 负载均衡
代理服务器上:
yum install haproxy -y ##安装haproxy
cd /etc/haproxy/
vim haproxy.cfg ##编写其配置文件
systemctl start haproxy ##开启haproxy服务
systemctl status haproxy
ps aux ##查看其端口状态
vim haproxy.cfg
将除了global,defaults全部注释,加如以下部分,定义real server。
listen admin *:8080
stats enable
stats uri /status ##监控页面的地址
stats auth admin:westos ##帐号和密码
stats refresh ##刷新的频率
listen westos *:80 ##监听的实例名称 地址与端口
balance roundrobin
server web1 172.25.30.2:80 check
server web2 172.25.30.3:80 check
真实服务器上操作相同:
yum install httpd -y ##安装httpd服务
systemctl start httpd ##开启httpd服务
cd /var/www/html/
echo server2 >index.html ##编辑初始界面
haproxy支持后端真实服务器检查,当某一个真实主机宕机后,会将其移出轮询队列,并在后端监控页面,显示红色异常。
当手动将服务机2的服务停止后:
2. 动静分离
代理机:
vim /etc/rsyslog.conf ##编辑配置文件日志服务
systemctl restart rsyslog ##重启日志服务
vim /etc/haproxy/haproxy.cfg ##编辑haproxy配置软件
systemctl restart haproxy ##重启haproxy配置服务
yum install httpd -y ##安装httpd服务
vim /etc/httpd/conf/httpd.conf ##修改httpd端口,由于其端口80已经被haproxy占用
cd /var/www/html/
ls
echo server1> index.html ##编辑httpd初始界面
systemctl restart httpd ##重启httpd服务
vim /etc/rsyslog.conf ##编辑配置文件日志服务
14 # Provides UDP syslog reception 使用UDP传输协议
15 $ModLoad imudp
16 $UDPServerRun 514
55 local2.* /var/log/haproxy.log ##定义其生成本地日志位置
vim haproxy.cfg
将除了global,defaults全部注释,加如以下部分,定义real server,以及访问策略。
listen admin *:8080
stats enable
stats uri /status ##监控页面地址
stats auth admin:westos ##帐号与密码
stats refresh ##刷新的频率
frontend main *:80 ##监控haproxy80端口
acl url_static path_beg -i /images ##定义以/images开头使用url_static
acl url_static path_end -i .jpg .gif .png ##定义以.jpg 等结尾使用策url_static
use_backend static if url_static ##若为策略url_static,使用static接口
default_backend app ##默认为app
backend static
server web2 172.25.30.2:80 check ##访问2主机上的80端口
backend app
server web1 172.25.30.3:80 check ##访问3的80端口
server local 172.25.30.1:8000 backup ##若3的服务失效,本机充当备机
真实服务机(一台服务器存储图片,根据配置文件是server2,至于server3是静态显示页面):
cd /var/www/html/
ls
mkdir images
mv 1.png images/
若服务机3停止:
3. 重定向
重定向分为两种301与302状态。
301:永久重定向,将原始界面资源永久的重定向到新的页面中。
302:暂时重定向
拒绝访问:在动静分离的基础上。
vim /etc/haproxy/haproxy.cfg
systemctl restart haproxy
vim /etc/haproxy/haproxy.cfg
将除了global,defaults全部注释,加如以下部分,定义real server,以及访问策略。
listen admin *:8080
stats enable
stats uri /status ##监控页面地址
stats auth admin:westos ##帐号与密码
stats refresh ##刷新的频率
frontend main *:80
acl url_static path_beg -i /images
acl url_static path_end -i .jpg .gif .png
# use_backend static if url_static
acl badhost src 172.25.30.250 ##规定禁止访问主机的ip
redirect location http://172.25.30.1:8000 if badhost ##如果出现错误访问就重定向 不管出>现什么错误
use_backend static if url_static
default_backend app ##默认为app
backend static
server web2 172.25.30.2:80 check
backend app
server web1 172.25.30.3:80 check
实验结果:由于我们禁止主机访问,所以当主机在浏览器中访问是,就会重定向到代理机的httpd初始页面。
使用真实主机访问是就出现真实定义界面。
重定向:
代理服务机:
vim /etc/haproxy/haproxy.cfg ##编辑haproxy配置文件
systemctl restart haproxy ##重启haproxy服务
vim /etc/haproxy/haproxy.cfg ##编辑haproxy配置文件
将除了global,defaults全部注释,加如以下部分,定义real server,以及访问策略。
listen admin *:8080
stats enable
stats uri /status ##监控页面地址
stats auth admin:westos ##帐号与密码
stats refresh ##刷新的频率
frontend main *:80
acl url_static path_beg -i /images
acl url_static path_end -i .jpg .gif .png
acl westos.org hdr_beg(host) -i westos.org
acl 172.25.30.1 hdr_beg(host) -i 172.25.30.1
redirect code 301 location http://www.westos.org if westos.org ##以westos访问重定向到www.westos.com
redirect code 301 location http://www.westos.org if 172.25.30.1 ##以172.25.30.1访问就重定向>到www.westos.com
use_backend static if url_static
default_backend app ##默认为app
backend static
server web2 172.25.30.2:80 check
backend app
server web1 172.25.30.3:80 check
实验结果:
4. 读写分离
在重定向的基础上。
代理服务机:
vim /etc/haproxy/haproxy.cfg ##编辑haproxy配置文件
systemctl restart haproxy ##重启haproxy服务
vim /etc/haproxy/haproxy.cfg ##编辑haproxy配置文件
将除了global,defaults全部注释,加如以下部分,定义real server,以及访问策略。
listen admin *:8080
stats enable
stats uri /status ##监控页面地址
stats auth admin:westos ##帐号与密码
stats refresh ##刷新的频率
frontend main *:80
acl url_static path_beg -i /images
acl url_static path_end -i .jpg .gif .png
acl read method GET
acl read method HEAD
acl write method PUT
acl write method POST
use_backend static if write ##如果是写策略,就访问static服务器,保存到主机2.
default_backend app ##默认为app,如果是读,就读服务器3.
backend static
server web2 172.25.30.2:80 check
backend app
server web1 172.25.30.3:80 check
server local 172.25.30.1:8000 backup
真实服务机(server2):
yum install php -y ##安装php
cd /mnt/
cd upload/ ##php推送图片界面
mv * /var/www/html/
/var/www/html/
vim upload_file.php ##修改图片尺寸大小
5 && ($_FILES["file"]["size"] < 2000000))
cd /mnt/
mv upload /var/www/html/
cd -
chmod 777 upload ##添加读写权限
systemctl restart httpd ##重启httpd服务
真实服务机(server3):
只做为读的服务机界面,不需要进行写推送。
实验:
http://172.25.30.1/index.php