LB-Haproxy/Nginx
💯 解析:七层负载均衡器,为与七层模型上的应用层,通过URL地址(应用层)进行负载均衡。
优点:详细地址,数据精准定位
缺点:地址长、范围广
一、HAproxy
![在这里插入图片描述](https://img-blog.csdnimg.cn/3e07562ae8f74a378e8eb7e7856c36db.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LuK5aSp5LiN5a2m5Lmg77yM5piO5aSp5Y-YIuWSuOmxvCIgPl88,size_15,color_FFFFFF,t_70,g_se,x_16#pic_center)
原理解析
别名:七层负载均衡、应用程序负载、URL负载、动静分离技术 用80端口
简介: 免费、快速可靠、高性能的负载均衡软件
亲缘性:
- 后方有三台Web服务器,用户进行数据请求,当用户访问Web1时(一些特定的敏感话题会进行认证)
- 当我们的用户再次访问时,请求分发到我们的Web2上,又要进行认证。
- 所有我们通过用户访问得特性让用户访问到固定的服务器(IP port seesion cookie…),解决了身份再次验证导致的用户体验感。
seesion(会话窗口 服务器): 用户进行身份认证,保存信息 ==> 用户访问淘宝,加购物车,第一次要进行身份认证,后面无需认证
cookie(缓存 浏览器): 保存用户身份认证信息,通常由浏览器存储,windows端
TCP连接(秒表)
-
User <==> Web
-
当User向Web请求数据时,会有一个计时器,当在一定的时间没响应,直接返还给用户,数据未找到。
-
当三次握手完成之后,向Web请求数据,服务器没反应,开启秒表,将数据进行重传递
-
User <=> HA <=> Web
-
多了中间人(HAproxy)作为代理,用户访问HA,HA在分发给Web,HA的两边都是互相无感知的
-
会出现问题,当User在请求数据后直接关机,请求到达HA,HA不将数据发送给Web,
如果Web服务出现问题,HA将User的请求分发给其他的Web(这时,秒表计时器有很大的体现)。
1、环境准备
1、HAproxy:192.168.178.60
2、Web1:192.168.178.7
3、Web2:192.168.178.16
2、Web
1、安装httpd:
2、Web1 添加内容:
3、Web2 添加内容
3、HAproxy
3.1、安装软件
3.2、编写配置文件
global
log 127.0.0.1 local3 info
maxconn 4096
uid 99
gid 99
daemon
nbproc 1
pidfile /run/haproxy.pid
defaults
log global
mode http
maxconn 2048
retries 3
option redispatch
timeout connect 50000
timeout client 50000
timeout server 50000
option abortonclose
stats uri /admin?stats
stats auth Private land
stats auth admin:admin
stats hide-version
frontend httpd-in
bind 0.0.0.0:80
mode http
log global
option httplog
option httpclose
acl html url_reg -i \.html$
use_backend html-server if html
default_backend html-server
backend html-server
mode http
balance roundrobin
option httpchk GET /index.html
cookie SERVERID insert indirect nocache
server Web1 192.168.178.7:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
server Web2 192.168.178.16:80 weight 1 cookie 4 check inter 2000 rise 1 fall 3
3.3、启动HAproxy
1、启动服务:
2、查看是否有报错信息:
3、查看服务启动成功:
3.4、进行测试
web2
web1
3.5、登入 Web 监控页面
![在这里插入图片描述](https://img-blog.csdnimg.cn/bcae9bbb49804737be6273a49260dcfc.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LuK5aSp5LiN5a2m5Lmg77yM5piO5aSp5Y-YIuWSuOmxvCIgPl88,size_18,color_FFFFFF,t_70,g_se,x_16#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/6145258848964c3d81a64c8d5d618891.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LuK5aSp5LiN5a2m5Lmg77yM5piO5aSp5Y-YIuWSuOmxvCIgPl88,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
二、实战一 动静分离技术+Keepalived
![在这里插入图片描述](https://img-blog.csdnimg.cn/f45aa7f2e43b449e802d8772e3e27367.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LuK5aSp5LiN5a2m5Lmg77yM5piO5aSp5Y-YIuWSuOmxvCIgPl88,size_11,color_FFFFFF,t_70,g_se,x_16#pic_center)
动静分离技术
简介:
- 用户请求数据时,访问的是图片,到达后方的图片服务器
- 访问的是视频,到达后方的视频服务器
- 访问的文本服务器,到达文字服务器
1、环境准备
1、HAproxy1-keepalived1:192.168.178.60
2、HAproxy2-keepalived2:192.168.178.61
3、keepalived-VIP:192.168.178.200
2、Web1-html静:192.168.178.7
3、Web2-php动:192.168.178.16
2、Web
2.1、Web1-html静
Web1-html
2.2、Web2-php动
a、安装软件
b、配置nginx 连接PHP
server {
.........
location / {
html index.php index.html index.htm;
}
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
.........
}
因为Nginx 与 PHP 部署在一台机器上,不许要修改PHP 配置,直接启动
c、 启动服务
1、重启nginx 与 启动 php-fpm:
2、查看服务是否启动成功:
d、编写index.php,访问
![在这里插入图片描述](https://img-blog.csdnimg.cn/a68992d726514ce184cd6b1cf551ad47.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LuK5aSp5LiN5a2m5Lmg77yM5piO5aSp5Y-YIuWSuOmxvCIgPl88,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
2、HAproxy
两台主机同时进行
2.1、安装软件
2.2、编写haproxy配置
global
log 127.0.0.1 local3 info
maxconn 4096
uid 99
gid 99
daemon
nbproc 1
pidfile /run/haproxy.pid
defaults
log global
mode http
maxconn 2048
retries 3
option redispatch
timeout connect 50000
timeout client 50000
timeout server 50000
option abortonclose
stats uri /admin?stats
stats auth Private land
stats auth admin:admin
stats hide-version
frontend httpd-in
bind 0.0.0.0:80
mode http
log global
option httplog
option httpclose
acl php url_reg -i \.php$
acl html url_reg -i \.html$
use_backend php-server if php
use_backend html-server if html
default_backend php-server
backend php-server
mode http
balance roundrobin
option httpchk GET /index.php
cookie SERVERID insert indirect nocache
server Php1 192.168.178.16:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
backend html-server
mode http
balance roundrobin
option httpchk GET /index.html
cookie SERVERID insert indirect nocache
server Web1 192.168.178.7:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5
2.3、启动服务
1、启动服务:
2、查看日志:
3、查看服务启动:
2.4、测试效果
1、访问 HAproxy1:
Web1-html
2、访问 HAproxy2:
Web1-html
![在这里插入图片描述](https://img-blog.csdnimg.cn/f95757e2b5134f448ff2e7fe07e54fb0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LuK5aSp5LiN5a2m5Lmg77yM5piO5aSp5Y-YIuWSuOmxvCIgPl88,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/c83b38612e7041a6b2b742838bc34fda.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LuK5aSp5LiN5a2m5Lmg77yM5piO5aSp5Y-YIuWSuOmxvCIgPl88,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
3、Keepalived
3.1、Keepalived1
a、修改配置
! Configuration File for keepalived
global_defs {
router_id HA1
}
vrrp_script chk_haproxy {
script "/etc/keepalived/ck_HA.sh"
interval 6
weight -5
fall 3
}
vrrp_instance VI_1 {
state MASTER
interface ens33
mcast_src_ip 192.168.178.60
virtual_router_id 55
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.178.200/24
}
track_script {
chk_haproxy
}
}
b、编写监控脚本
🔺解析:因为是与HAproxy部署在同一台机器上,所以对HAproxy的高可用进行监控,HAproxy会对后方的Web服务进行监控。
counter=$(ps -C haproxy --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
systemctl restart haproxy
sleep 5
counter=$(ps -C haproxy --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
systemctl stop keepalived
fi
fi
c、拷贝文件至 Keepalived2
3.2、Keepalived2
1、修改配置:
router_id hA2
state BACKUP
mcast_src_ip 192.168.178.61
priority 99
2、启动 keepalived:
3.3、所有Keepalived启动
3.4、访问测试
Web1-html
![在这里插入图片描述](https://img-blog.csdnimg.cn/2c13574ccbaa4a9dba384c63e66b1b93.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LuK5aSp5LiN5a2m5Lmg77yM5piO5aSp5Y-YIuWSuOmxvCIgPl88,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
3.5、故障模拟
解析:将HAproxy1的配置文件移除,致使HAproxy起不来,实现VIP的转移
1、移动 HAproxy1 的配置文件:
2、查看 HAproxy2 上的IP,IP进行转移:
3、再次访问服务,访问成功:
Web1-html
HTTP/1.1 200 OK
Server: nginx/1.20.1
Date: Sat, 20 Nov 2021 04:49:01 GMT
Content-Type: text/html
Connection: close
X-Powered-By: PHP/5.4.16
Set-Cookie: SERVERID=3; path=/
Cache-control: private
三、实战二 生产环境
![在这里插入图片描述](https://img-blog.csdnimg.cn/9f0d2121fb0c42839640fa0b953e2002.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LuK5aSp5LiN5a2m5Lmg77yM5piO5aSp5Y-YIuWSuOmxvCIgPl88,size_14,color_FFFFFF,t_70,g_se,x_16#pic_center)
解析:这也是企业中常用的一种架构,在生产环境中,haproxy与LVS等负载均衡设备往往不是单种存在的,主要是每一个设备都有自身的优点与缺点。把四层与七层组合起来使用,进行互补,既有四层的吞吐量,又有七层的精准定位与动静分离等,这是再好不过了。
1、环境准备
LVS-VIP:192.168.178.100
LVS1-keepalived:192.168.178.60
LVS2-keepalived:192.168.178.61
HAproxy1:192.168.178.62
HAproxy2:192.168.178.63
Web1:192.168.178.7
Web2:192.168.178.16
1、关闭防火墙:
2、修改主机名:
3、时间同步:
4、计划任务,时间同步
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com
2、Web 配置
2.1、Web1-html静
Web1-html
2.2、Web2-php动
a、安装软件
b、配置nginx 连接PHP
server {
.........
location / {
html index.php index.html index.htm;
}
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
.........
}
因为Nginx 与 PHP 部署在一台机器上,不许要修改PHP 配置,直接启动
c、 启动服务
1、重启nginx 与 启动 php-fpm:
2、查看服务是否启动成功:
d、编写index.php,访问
![在这里插入图片描述](https://img-blog.csdnimg.cn/2d76e904e8324b598d81be8eeda3d985.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LuK5aSp5LiN5a2m5Lmg77yM5piO5aSp5Y-YIuWSuOmxvCIgPl88,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
3、HAproxy 配置
两台主机同时进行
3.1、安装软件
3.2、编写haproxy配置
global
log 127.0.0.1 local3 info
maxconn 4096
uid 99
gid 99
daemon
nbproc 1
pidfile /run/haproxy.pid
defaults
log global
mode http
maxconn 2048
retries 3
option redispatch
timeout connect 50000
timeout client 50000
timeout server 50000
option abortonclose
stats uri /admin?stats
stats auth Private land
stats auth admin:admin
stats hide-version
frontend httpd-in
bind 0.0.0.0:80
mode http
log global
option httplog
option httpclose
acl php url_reg -i \.php$
acl html url_reg -i \.html$
use_backend php-server if php
use_backend html-server if html
default_backend php-server
backend php-server
mode http
balance roundrobin
option httpchk GET /index.php
cookie SERVERID insert indirect nocache
server Php1 192.168.178.16:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
backend html-server
mode http
balance roundrobin
option httpchk GET /index.html
cookie SERVERID insert indirect nocache
server Web1 192.168.178.7:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5
3.3、启动服务
1、启动服务:
2、查看日志:
3、查看服务启动:
3.4、测试效果
1、访问 HAproxy1:
Web1-html
2、访问 HAproxy2:
Web1-html
![在这里插入图片描述](https://img-blog.csdnimg.cn/59685481aac440a188c85af2d5e39c90.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LuK5aSp5LiN5a2m5Lmg77yM5piO5aSp5Y-YIuWSuOmxvCIgPl88,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/7e3ae07e5c434de49bb80e4ffe632087.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LuK5aSp5LiN5a2m5Lmg77yM5piO5aSp5Y-YIuWSuOmxvCIgPl88,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
4、LVS 配置
4.1、安装软件
LVS1:
LVS2:
4.2、LVS1配置
a、修改配置文件
! Configuration File for keepalived
global_defs {
router_id LVS1
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.178.100/24 dev ens33
}
}
virtual_server 192.168.178.100 80 {
delay_loop 3
lb_algo rr
lb_kind DR
protocol TCP
real_server 192.168.178.62 80 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
real_server 192.168.178.63 80 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
}
b、启动服务,重启
4.3、LVS2配置
a、修改配置
router_id LVS2
state BACKUP
priority 145
b、自启动服务与重启
5、再次配置HAproxy lo:0虚拟接口
两台机器同时操作
5.1、配置虚拟IP -> lo:0
DEVICE=lo:0
IPADDR=192.168.178.100
NETMASK=255.255.255.255
ONBOOT=yes
5.2、配置路由
/sbin/route add -host 192.168.178.100 dev lo:0
5.3、配置ARP
1、忽略arp请求,可以回复
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
5.4、重启生效
6、故障测试
6.1、访问服务
Web1-html
HTTP/1.1 200 OK
Server: nginx/1.20.1
Date: Sat, 20 Nov 2021 11:00:33 GMT
Content-Type: text/html
Connection: close
X-Powered-By: PHP/5.4.16
Set-Cookie: SERVERID=3; path=/
Cache-control: private
6.2、停止LVS1的keepalived,再次访问服务
Web1-html
HTTP/1.1 200 OK
Server: nginx/1.20.1
Date: Sat, 20 Nov 2021 11:02:57 GMT
Content-Type: text/html
Connection: close
X-Powered-By: PHP/5.4.16
Set-Cookie: SERVERID=3; path=/
Cache-control: private
6.3、停止 HAproxy1服务,再次访问服务
Web1-html
HTTP/1.1 200 OK
Server: nginx/1.20.1
Date: Sat, 20 Nov 2021 11:04:46 GMT
Content-Type: text/html
Connection: close
X-Powered-By: PHP/5.4.16
Set-Cookie: SERVERID=3; path=/
Cache-control: private
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)