haproxy

什么是haproxy?

HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理,HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。
HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。

使用haproxy实现负载均衡

前提:准备3台虚拟机,一台服务器作为负载均衡调度器,另外两台作为真实服务器。
调度器:
server1 ip:172.25.62.1
服务器:
server2 ip:172.25.62.2
server3 ip:172.25.62.3
首先在调度器server1上进行配置:
1.获取haproxy安装包
在这里插入图片描述
2.解压

tar zxf haproxy-1.7.3.tar.gz

解压完成会生成一个haproxy-1.7.3目录

3.安装haproxy

yum install rpm-build pcre-devel gcc -y

这里我使用rpm包安装,安装需要的软件。

rpmbuild -tb haproxy-1.7.3.tar.gz

使用这个命令制作rpm包,会生成一个rpmbuild目录。

cd rpmbuild/RPMS/x86_64/
yum install haproxy-1.7.3-1.x86_64.rpm  -y

进入目录安装软件。

cd haproxy-1.7.3/examples/
cp content-sw-sample.cfg  /etc/haproxy/haproxy.cfg

进入目录,复制配置文件到/etc/haproxy下命名为haproxy.cfg。
4.添加用户

groupadd -g 200 haproxy
useradd -u 200 -g 200 haproxy

5.修改配置文件

vim /etc/hosts

在这里插入图片描述
做本地解析。

vim /etc/haproxy/haproxy.cfg
global
        maxconn         10000
        stats socket    /var/run/haproxy.stat mode 600 level admin
        log             127.0.0.1 local0
        uid             200 
        gid             200 
        chroot          /var/empty
        daemon
defaults
        mode            http
        log             global
        option          httplog
        option          dontlognull
        monitor-uri     /monitoruri
        maxconn         8000
        timeout client  30s 
        option prefer-last-server
        retries         2   
        option redispatch
        timeout connect 5s
        timeout server  5s  

        stats uri       /admin/stats
# The public 'www' address in the DMZ
frontend public
        bind            *:80 name clear
        #bind            192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem

        stats uri       /admin/stats
        #use_backend     static if { hdr_beg(host) -i img }
        #use_backend     static if { path_beg /img /css   }
        default_backend dynamic

# the application servers go here
backend dynamic
        balance         roundrobin
        server          web1 172.25.62.2:80 check inter 1000
        server          web2 172.25.62.3:80 check inter 1000

修改完配置文件后就可以启动服务了。

/etc/init.d/haproxy start

6.配置服务器server2和server3。

yum install -y httpd
vim /var/www/html/index.html

在这两台服务器安装httpd,编写测试页。
在这里插入图片描述
在这里插入图片描述
测试:
使用另一台主机进行测试

curl 172.25.62.1

在这里插入图片描述
访问调度服务器,实现轮循。
可以在浏览器查看后台服务器的负载
在这里插入图片描述
每次刷新页面,负载都会发生变化。
设置页面帐号和密码

[root@server1 ~]# vim /etc/haproxy/haproxy.cfg 
        stats uri       /admin/stats    #监控页面的地址
        stats auth      admin:redhat    #帐号和密码
        stats refresh   5s 				#刷新频率

在这里插入图片描述
设置完密码后,进入页面要输入密码。
url的重定向
302:重定向(临时)旧地址依旧在,但网站希望你访问新的(盗链)
301:重定向(永久)旧地址永久移除
403:服务器将IP禁止

[root@server1 ~]# vim /etc/rsyslog.conf

在这里插入图片描述
在这里插入图片描述
设置haproxy的日志级别。

[root@server1 ~]# /etc/init.d/rsyslog restart

重启日志服务,使设定生效。

[root@server1 ~]# vim /etc/haproxy/haproxy.cfg

在这里插入图片描述
修改配置文件,其他设定不变。

[root@server1 ~]# /etc/init.d/haproxy restart

重启服务。
在浏览器输入
在这里插入图片描述
出现403报错,接下来要做的就是当出现这个报错时进行重定向。

[root@server1 ~]# vim /var/www/html/index.html

在这里插入图片描述
编写测试页。

[root@server1 ~]# vim /etc/httpd/conf/httpd.conf 

在这里插入图片描述
修改端口。

[root@server1 ~]# /etc/init.d/httpd restart

重启htppd服务。

[root@server1 ~]# vim /etc/haproxy/haproxy.cfg

在这里插入图片描述
修改文件将403重定向。

[root@server1 ~]# /etc/init.d/haproxy restart

重启服务。
在浏览器上进行测试
在这里插入图片描述
页面重定向成功。

haproxy的动静分离

动静分离是将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问。

[root@server1 ~]# vim /etc/haproxy/haproxy.cfg 
        use_backend dynamic if { path_end .php }
        default_backend static

# The static backend backend for 'Host: img', /img and /css.
backend static
        balance         roundrobin
        server          web1 172.25.62.3:80 check inter 1000

backend dynamic
        balance         roundrobin
        server          web2 172.25.62.2:80 check inter 1000

设置当默认静态,当访问动态是访问php页面。当静态时,访问web1服务器,当访问动态时,访问web服务器。

[root@server2 ~]# yum install -y php
[root@server2 ~]# vim /var/www/html/index.php

在这里插入图片描述
在server2下载php,并编写测试页,之后打开server3的httpd服务。
测试:
在浏览器输入:

172.25.62.1/index.php

在这里插入图片描述

172.25.62.1/index.html

在这里插入图片描述
这样,可以做到访问动静网页时分别访问不同的服务器。

haproxy的读写分离

顾名思义,读写分离就是准备两台服务器,一台用来读数据,一台用来写数据。

[root@server1 ~]# vim /etc/haproxy/haproxy.cfg

在这里插入图片描述
设置在web1写数据,在web2写数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值