haproxy 负载均衡服务
4台主机 同网段 能ping通
yum
负载均衡
四层负载 lvs haproxy
四层负载是基于ip和端口实现的 速度比较快 但是不安全
原理:
调度器接收到客户端的报文,只是会解析到传输层,就可以对报文进行负载,调度器不把报文进行详细解析,直接转发给后端的服务节点,服务节点于客户端建立tcp连接进行数据的响应
四层负载
七层负载 haproxy
七层负载会对客户端的请求包进行解析 并且能够根据url解析出客户端需要的数据,会把客户端的请求交给到能够处理请求的主机 速度比较慢 但是安全
原理:
调度器收到客户端的请求报文后,需要将数据的报文解析到应用层,那么调度器和客户端建立一次tcp连接,根据客户端请求的数据进行调度,调度器将请求的报文转发给后端服务节点后,服务节点也需要和客户端建立tcp连接进行数据响应
七层负载
两者区别
haproxy七层 ---四层
服务如果支持七层负载 那么也支持四层负载 如果只支持四层服务 肯定不能实现七层负载
优点:
1.可以对后端主机进行健康检查 剔除后端宕机不健康的主机
2.单进程的工作模式
3.支持拒绝连接 防止ddos攻击
4.支持透明代理 反向代理
haproxy的调度算法
roundrobin 动态轮询 weight 不需要重启haproxy 生效
static-rr 静态轮询 weight 需要重启haproxy 才能生效
leastconnect 最小连接
source 源地址散列
(七层负载)
haproxy负载这个写的tomcat可以看成apache
haproxy负载web
client 192.168.2.10
haproxy 192.168.2.20
web1 192.168.2.60
web2 192.168.2.70
web1
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# echo 1111 > /var/www/html/index.html
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# curl 192.168.2.60
1111
web2
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# echo 2222 > /var/www/html/index.html
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# curl 192.168.2.70
2222
haproxy
[root@localhost ~]# yum -y install pcre-devel bzip2-devel
[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-862.el7.x86_64
[root@localhost haproxy-1.4.24]# make TARGET=linux310 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy
#启动时需要的文件 软连接必须放在/usr/sbin/下
[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]# cp examples/haproxy.cfg /etc/haproxy/
#脚本文件
[root@localhost haproxy-1.4.24]# cp examples/haproxy.init /etc/rc.d/init.d/haproxy
[root@localhost haproxy-1.4.24]# chmod a+x /etc/rc.d/init.d/haproxy
[root@localhost haproxy-1.4.24]# chkconfig --add haproxy
负载web
[root@localhost haproxy-1.4.24]# cd /etc/haproxy/
[root@localhost haproxy]# vim haproxy.cfg
8 #chroot /usr/share/haproxy #工作目录
26 listen webservers 0.0.0.0:80 #集群的名称 随便起 0.0.0.0:80监听的ip和端口
27 balance roundrobin #采用动态轮询
28 option httpchk GET /index.html #健康检查的方式 用get访问后端页面
29 server web_one 192.168.2.60:80 check inter 2000 rise 3 fall 3
30 server web_two 192.168.2.70:80 check inter 2000 rise 3 fall 3
server 添加后端真实的节点
web_one #后端节点的名称 随便起
后端的ip
check 使用健康检查
inter 2000 2000毫秒检查一次
rise 3 #3次成功 服务器正常
fall 3 #3次失败 服务器不正常
[root@localhost haproxy]# systemctl restart haproxy
[root@localhost haproxy]# netstat -anput | grep haproxy
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 60719/haproxy client:
访问haproxy的ip
[root@localhost ~]# curl 192.168.2.20
11111
[root@localhost ~]# curl 192.168.2.20
22222
haproxy代理mariadb
使用四层负载
client 192.168.2.10
haproxy 192.168.2.20
mariadb 192.168.2.60 web
mariadb 192.168.2.70 web
mariadb两台
[root@localhost ~]# yum -y install mariadb*
[root@localhost ~]# systemctl start mariadb
[root@localhost ~]# mysql -uroot -p
MariaDB [(none)]> grant all on *.* to "root"@"192.168.2.%" identified by "123.com";
MariaDB [(none)]> flush privileges;
mariadb1:
MariaDB [(none)]> create database one;
Query OK, 1 row affected (0.00 sec)
mariadb2:
MariaDB [(none)]> create database two;
Query OK, 1 row affected (0.01 sec)
haproxy
[root@localhost haproxy]# vim /etc/haproxy/haproxy.cfg
17 mode tcp #四层负载
18 option tcplog
26 listen dbservers 0.0.0.0:3306
27 balance roundrobin
28 server db_one 192.168.2.60:3306 check port 3306 maxconn 1000
29 server db_two 192.168.2.70:3306 check port 3306 maxconn 1000
[root@localhost haproxy]# systemctl restart haproxy
[root@localhost haproxy]# netstat -anput | grep haproxy
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 63512/haproxy
client:
[root@localhost ~]# yum -y install mariadb-server
[root@localhost ~]# mysql -uroot -p123.com -P3306 -h 192.168.2.20
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| one |
| performance_schema |
| test |
+--------------------+
[root@localhost ~]# mysql -uroot -p123.com -P3306 -h 192.168.2.20
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| two |
+--------------------+
haproxy的图形界面
能够快速的检索出那个主机有问题
[root@localhost haproxy]# vim /etc/haproxy/haproxy.cfg
添加
listen admin_status #添加其图形界面的配置
bind 0.0.0.0:8080 #监听的端口
mode http #使用的协议
option httplog
stats enable #开启图形界面
stats refresh 30s #刷新时间
stats uri /stats #访问的路径
stats auth admin:123456 #登录图形界面的用户名和密码
stats realm welcome haproxy #登录图形界面的提示信息
stats admin if TRUE #只有认证成功 才可以看到图形界面
[root@localhost haproxy]# systemctl restart haproxy
[root@localhost haproxy]# firefox 192.168.2.20:8080/stats