Linux之haproxy

haproxy

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

实验环境

三台虚拟机,server1搭建haproxy
server2,server3是真正的服务器

安装haproxy

server1

tar zxf haproxy-1.7.3.tar.gz
yum install rpm-build -y
yum install gcc -y
yum install pcre-devel -y
rpmbuild -tb haproxy-1.7.3.tar.gz

在这里插入图片描述

在这里插入图片描述

用haproxy实现负载均衡
cd rpmbuild/RPMS/x86_64/
rpm -ivh haproxy-1.7.3-1.x86_64.rpm
cd
cd haproxy-1.7.3/examples/
cp content-sw-sample.cfg /etc/haproxy/haproxy.cfg
vim /etc/haproxy/haproxy.cfg			##文件为haproxy.cfg
/etc/init.d/haproxy start

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
/etc/haproxy/haproxy.cfg

#
# This is a sample configuration. It illustrates how to separate static objects
# traffic from dynamic traffic, and how to dynamically regulate the server load.
#
# It listens on 192.168.1.10:80, and directs all requests for Host 'img' or
# URIs starting with /img or /css to a dedicated group of servers. URIs
# starting with /admin/stats deliver the stats page.
#

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  30si
	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
        #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.68.2:80 check inter 1000
        server          web2 172.25.68.3:80 check inter 1000

测试
在物理机
curl 172.25.68.1 #看能否实现轮播
172.25.0.1/admin/stats ##网页查看
在这里插入图片描述

在这里插入图片描述

设置用户监控

vim /etc/haproxy/haproxy.cfg

stats uri       /admin/stats

stats   auth    admin:westos

用户名:admin 密码:westos
在这里插入图片描述

测试
在这里插入图片描述
在这里插入图片描述

设置监控日志刷新时间

vim /etc/haproxy/haproxy.cfg

stats	refresh	5s	##每5s刷新一次

在这里插入图片描述
vim /etc/etc/rsyslog.conf
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
测试:

在这里插入图片描述

设置用户黑名单

vim /etc/haproxy/haproxy.cfg

acl blacklist src       172.25.68.250				##设置黑名单用户为172.25.68.250

http-request deny if blacklist						##如果用户是黑名单用户,httpd请求被否

在这里插入图片描述
测试
在这里插入图片描述
在这里插入图片描述

设置友好访问

vim /etc/haproxy/haproxy.cfg

acl blacklist src       172.25.68.250

http-request deny if blacklist

errorloc 403    http://172.25.68.1:8080/index.html if blacklist		##不报403,把链接链到172.25.68.1:8080/index.html

server1安装httpd
vim /etc/httpd/conf/httpd.conf
Listen 8080 ##更改端口为8080(此时haproxy占用了80端口)

测试
在这里插入图片描述

动静分离

server1
vim /etc/haproxy/haproxy.cfg

use_backend     dynamic if { path_end .php }	##以php结尾选择动态
default_backend static							##默认静态


# the application servers go here
backend static										##静态
        balance         roundrobin
        server          web1 172.25.68.2:80 check inter 1000


backend dynamic									##动态
        balance         roundrobin
        server          web1 172.25.68.3:80 check inter 1000

在这里插入图片描述
server3
yum install php -y

vim /vaw/www/html/index.php

<?php
phpinfo()
?>

在这里插入图片描述

测试:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

读写分离

server1
vim /etc/haproxy/haproxy.cfg

 acl read method HEAD
 acl read method GET
 acl write method POST
 acl write method PUT

use_backend     static if write				##静态的时候选择写
  use_backend     dynamic if read    			##动态的选择读

# the application servers go here
backend static										##静态(即提交给server2)
        balance         roundrobin
        server          web1 172.25.68.2:80  check inter 1000

backend dynamic									##动态(访问页面访问server3)
        balance         roundrobin
        server          web2 172.25.68.3:80  check inter 1000

在这里插入图片描述
在这里插入图片描述
server2,server3安装php
server2和3都给权限
在这里插入图片描述
server2
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
server3
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
测试
读是在server3
在这里插入图片描述

在这里插入图片描述
写是在server2
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值