区别:
四层负载 lvs
调度器接受到client的报文后,不需要详细解析,只会解析传输层(IP MAC 端口),将报文交给后端的web,web对报文进行详细解析,如果请求报文当中包含了病毒,那就直接会被web解析
七层负载 haproxy
比较安全,速度较慢,调度器接收到client的报文后,会解析到应用层,并且会根据client请求的URL解析client需要的数据(index.php 或者html),会把当前的请求发送给适合处理这个请求的主机, haproxy可以拒绝请求
能实现七层负载的服务也必然可以实现四层负载
如果仅支持四层负载,那么支持不了七层负载
haproxy可以负载web可以负载mysql
优点:
- 可以对后端进行健康检查的、剔除集群中不正常的主机、如果集群中的主机恢复再把主机加入到集群中
- 支持拒绝连接、可以防止ddos攻击主机
- 实现透明代理、反向代理
- 工作模式 单进程
haproxy调度算法
roundrobin 动态轮询 weight 不需要重启haproxy自动生效
Static-rr 静态轮询 weight 需要重启haproxy才能生效
Leastconnect 最小连接
Source 源地址散列
实验
Haproxy代理web
Client 192.168.2.10
Haproxyr 192.168.2.20
Web1 192.168.2.30
Web2 192.168.2.40
web统一配置,输入给网页不同的内容
到haproxy配置
[root@localhost ~]# tar -zxf haproxy-1.4.24.tar.gz
[root@localhost ~]# cd haproxy-1.4.24/
[root@localhost haproxy-1.4.24]# uname -r
3.10.0-514.el7.x86_64
[root@localhost haproxy-1.4.24]#
[root@localhost haproxy-1.4.24]# make TARGET=linux310 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy
做一个软连接路径优化 软连接必须在
[root@localhost haproxy-1.4.24]# ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/haproxy
拷贝配置文件
[root@localhost haproxy-1.4.24]# mkdir /etc/haproxy
[root@localhost haproxy-1.4.24]# ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/haproxy
[root@localhost examples]# cp haproxy.cfg /etc/haproxy/
拷贝脚本到存放系统命令目录下
[root@localhost examples]# cp haproxy.init /etc/rc.d/init.d/haproxy
[root@localhost examples]# chmod a+x /etc/rc.d/init.d/haproxy
[root@localhost examples]# chkconfig --add haproxy #加入系统命令当中
[root@localhost examples]# cd /etc/haproxy/
[root@localhost haproxy]# vim haproxy.cfg
8 # chroot /usr/share/haproxy #工作目录 因为工作目录不在这里
17 mode http #七层负载 不用动
然后把26行一下全部删除 ,因为里面存在都是案例要不然会启动失败
然后重新自己添加一段配置
26 listen webservers 0.0.0.0:80 #监听主机上所有ip 集群名叫webservers
27 balance roundrobin #动态轮询
28 option httpchk GET /index.html #健康检查 get的访问后端页面
29 server web_one 192.168.2.30:80 check inter 2000 rise 3 fall 3
31 server web_two 192.168.2.40:80 check inter 2000 rise3 fall 3
#server 添加后端的主机
#web_one 后端主机的名称 ip 192.168.2.30:80
#check inter 2000 rise3 fall 3 使用健康查看 三次访问成功 web是正常的 ,
三次失败web不正常
Client:
访问负载的ip haproxy
负载mariadb
Client 192.168.2.10
Haproxyr 192.168.2.20
mysql 192.168.2.30
mysql 192.168.2.40
Mysql1:
grant all on *.* to "root"@"192.168.2.%" identified by "123.com" ; #授权2网段
MariaDB [(none)]> create database one;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
Mysql2:
MariaDB [(none)]> grant all on *.* to "root"@"192.168.2.%" identified by "123.com" ;
MariaDB [(none)]> create database two;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
Haproxy负载mysql
[root@localhost haproxy]# vim /etc/haproxy/haproxy.cfg
[root@localhost haproxy]# systemctl restart haproxy.service
Client:也要安装mysql
[root@localhost ~]# mysql -uroot -p123.com -P3306 -h 192.168.2.20
#-P3306 msql端口号
#-h 连接负载的ip