1.什么是haproxy
实验环境配置:一台haproxy,两台RS,分别为RS1,RS2
IP环境
haproxy | eth0,172.25.254.100 |
RS1 | eth0,172.25.254.10 |
RS2 | eth0,172.25.254.20 |
下载haproxy
\
打开/etc/haproxy/haproxy.cfg配置文件
global属于全局配置,global下的设置会对全局生效
开启多进程(图片说出了,不是线程是进程,两个不一样的
查看进程
启用多线程
查看线程
打开日志配置文件/etc/rsyslog.conf,更改以下参数
打开udp端口
增加haproxy日志路径,haproxy要用local2,在global全局配置中写了
在haproxy中下载apache,RS1中下载apache,RS2中下载nginx,为后面实验做准备
添加错误页面,为10和20赋予权重
测试权重
关闭RS的apache和nginx,测试错误页面
网页重定向
测试:输入IP172.25.254.100跳转到百度
提权。为下面实验做准备
下载socat
show info
看权重
更改权重
禁用和自启动服务
针对多进程的处理方法,开启多进程,提权两个stats1和stats2
haproxy的算法
静态算法
static-rr基于权重的轮询调度
first算法,不支持动态更改权重
动态算法
roundrobin,基于权重,可动态调整权重
leastconn 加权的最少连接的动态
其他算法
uri算法取模法
根据name不同来访问
根据不同的user-agent来访问
\
状态页访问stats设置端口和密码
访问172.25.254.100:9191/status进入状态页
算法总结
#静态
static-rr--------->tcp/http
first------------->tcp/http
#动态
roundrobin-------->tcp/http
leastconn--------->tcp/http
#以下静态和动态取决于hash_type是否consistent
source------------>tcp/http
Uri--------------->http
url_param--------->http
hdr--------------->http
高级功能
基于cookie的会话保持(仅支持http mode,不支持tcp mode
基于cookie的会话保持
四层IP穿透
把RS1的nginx改为apache
更改RS1的apache配置
更改RS2nginx的配置,加上参数proxy_protocol
更改haproxy配置
ACL的学习
什么是ACL
ACL的常用参数
#用acl来定义或声明一个acl
acl <aclname> <criterion> [flags] [operator] [<value>]
acl 名称 匹配规范 匹配模式 具体操作符 操作对象类型
acl test path_end -m sub /a
#ACL名称,可以使用大字母A-Z、小写字母a-z、数字0-9、冒号:、点.、中横线和下划线,并且严格区分大
小写,比如:my_acl和My_Acl就是两个完全不同的acl5.8.1.2 ACL-criterion
实验示例
基于域名的访问,haproxy配置更改
打开C:\Windows\System32\drivers\etc修改增加本地解析hosts
测试:curl域名成功
基于域名目录中的关键字访问
这里我设置的是zhou,可以看到www.zhou.org和www.zhou.com都可以访问
这个是基于ip的访问
基于文件后缀名实现动静分离
RS上创建PHP
haproxy配置
访问172.25.254.100/index.php
hdr包括很多很多检索方法,这里我只实例实验了四个,下面的大家可以自己试一试
自定义错误页面
在defaults下添加errorfile 503 /etc/haproxy/errorpage/503.http
其中503.http是我们自定义的页面,可以自定义503错误是的页面
haproxy的四层负载
实验环境。RS1和RS2中下载mariadb数据库
打开RS的/etc/my.cnf.d/mariadb-server.cnf进行配置更改
RS1
RS2
haproxy的配置更改
haproxy的https实现
haproxy的配置更改
listen更改为web-https
证书制作命令
haproxy ~]# mkdir /etc/haproxy/certs/
haproxy ~]# openssl req -newkey rsa:2048 \