负载均衡反向代理服务基础优化
提高反向代理效率
扩展提升超时设置指令:网络通讯设置超时,是为了尽快释放连接资源
Syntax: proxy_connect_timeout time; 用户端 -请求01-> 代理端 web01
Default: proxy_connect_timeout 60s; 推荐20s
Context: http,server,location
Syntax: proxy_connect_timeout time; 用户端 -请求01 时间 请求02-> 代理端 web01
Default: proxy_connect_timeout 60s;
Context: http,server,location
Syntax: proxy_connect_timeout time; 用户端 <响应01 时间 响应02-> 代理端 web01
Default: proxy_connect_timeout 60s;
Context: http,server,location
PS:尽量把负载压力向前推,在前端实现缓冲或缓存
Syntax: proxy_buffering on | off; 是否开启缓冲功能
Default: proxy_buffering on;
Context: http,server,location
Syntax: proxy_buffer_size size; 缓冲头部信息大小 存储所有数据头部信息
Default: proxy_buffer_size 4k|8K|16K; HTTP协议数据包(头部信息)
Context: http,server,location
Syntax: proxy_buffers number size; 缓冲头部信息大小 存储所有数据信息
Default: proxy_buffers 8 4K|16K; HTTP协议数据包(请求主体信息)
Context: http,server,location
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tfkoES1f-1650600014577)(E:\Typora软件\linux运维笔记\运维笔记图片库\067 负载均衡部分笔记截图.png)]
网站缓存服务功能配置
(加快部分数据相应效率)
第一个历程:创建缓存存储环境
mkdir /tmp/ngx_cache
mount -t tmp -o size=100M tmps /tmp/ngx_cache
第二个历程:编写配置文件:
vim proxy.conf
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YOGJNgXv-1650600014578)(E:\Typora软件\linux运维笔记\运维笔记图片库\068 负载均衡部分笔记截图.png)]
高可用服务概念介绍
keepalived实现高可用功能主要是借助vrrp协议原理,实现服务器设备之间主备关系
实现两台相关功能服务器具有主备,当服务器出现故障,可以自动使用备服务器顶替主服务器作用
负载均衡服务器 —冗余能力
存储服务器 —冗余能力
备份服务器 —冗余能力
数据库服务器 —冗余能力
高可用服务原理过程
vrrp (虚拟路由冗余协议 Virtual Router Redundancy Protocol)
1.主服务器和备份服务器要使用vrrp协议交流
(1)主服务器告诉备份服务器我还活着
(2)主服务器与备份服务器竞选机制
2.将主服务器上进行虚拟IP地址标识
主服务器 10.0.0.5 vip 10.0.0.3 www.nana.com ----10.0.0.3
备服务器 10.0.0.6 (如果上面塌了 vip换人)
PS:vip地址在主服务器与备服务器切换的过程称为IP地址漂移过程
3.主服务器恢复功能后,会有资源抢占过程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9c7Q9vxo-1650600014579)(E:\Typora软件\linux运维笔记\运维笔记图片库\069 keepalived高可用原理说明.PNG)]
高可用服务的部署过程
第一个历程:部署高可用服务环境准备
两台负载均衡服务器 (克隆生成)
第二个历程:安装部署keepalived服务
yum install keepalived
第三个历程:编写服务程序配置文件
lb01上
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs{
router_id lb01
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
lb02上
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs{
router_id lb02
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
第四个历程:启动服务程序
systemctl start keepalived.service
高可用服务配置文件说明
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs{
router_id lb01 ---定义高可用服务器主机标识信息
}
vrrp_instance VI_1 { ---可以建立一个高可用集群环境
state MASTER ---简单描述次服务器身份 MASTER BACKUP
interface eth0 ---设置vip地址出现在一个网卡上
virtual_router_id 51 ---一个高可用集群每台主机的标识信息 所在集群是否相同
priority 150 ---优先级越大越有可能成为主
advert_int 1 ---发送vrrp组播包时间间隔(主备要一致)
authentication { ---实现主备通讯的认证过程
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3 ---设置一个虚拟IP地址 (公网地址)
}
}
高可用服务常见问题
脑裂问题:
(主服务器和备服务器都有vip)
主服务器无法将组播包传输到备服务器时,备服务器会出现VIP地址信息,但主服务器此时VIP仍旧存在,导致主和备都可以接受用户的访问,会造成后端服务器数据不一致情况。
对脑裂情况进行监控:
主服务先停止
脚本实现监控:
#!/bin/bash
# 监控备服务器上是否出现vip地址
while true
do
sleep 5
ip add s eth0|grep "10.0.0.3" >/dev/null
if [ $? -eq 0]
then
echo "主服务器可能出现异常,请检查"
if
done
补充:
[root@lb01 ~]# grep zaizai test.txt
22222.3333 zaizai
[root@lb01 ~]# echo $?
0
说明:grep命令在实行过程中,如果能成功筛选出指定信息,命令执行后的返回值为0
[root@lb01 ~]# grep zhangna test.txt
[root@lb01 ~]# echo $?
1
说明:grep命令执行过程中,如果不能筛选出指定信息,命令执行后的返回值为非零
高可用服务企业应用
1.需要监控业务状态情况
监控主服务器上nginx负载均衡服务状态,如果负载均衡出现问题,keepalived服务器需要进行切换
如何实现监控:脚本
#!/bin/bash
# 监控nginx服务状况
方法一:可以判断服务进程信息
ps -ef|grep -c nginx -lt 2
nginx服务停止了
方法二:可以判断服务端口信息
netstat -lntup|grep 80
方法三:判断服务pid文件是否存在
if [ ! -f /var/run/nginx.pid]
then
systemctl stop keepalived
fi
方法四:判断网站返回状态码 200 /301 /302
curl -I -H host:www.oldboy.com 10.0.0.3 -s |awk 'NR=={print $2}'
脚本实现:vim check_web.sh
#!/bin/bash
web_info=$(ps -ef|grep -c nginx)
if [ $web_info -lt 2 ]
then
systemctl stop keepalived
fi
PS:脚本名称不要含有要判断的进程名称
keepalived监控脚本如何运行:
方法一:监控脚本放入定时任务中
方法二:实现监控监控实时运行(while true)
方法三:将脚本放入keepalived配置服务中
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs{
router_id lb01
}
vrrp_script check_web { ---监控任务名称 check_web
script "root/check_web.sh" ---定义需要调取执行脚本信息(脚本需要有执行权限)
interval 2 ---脚本运行间隔时间
weight 2 ---可以利用权重数值和优先级做运算
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
track_script { ---调取监控任务信息
check_web
}
}
智能切换过程
网站出现异常时:
LB01 主服务器可以降低优先级 将流量转换给 备服务器
网站恢复正常时:
LB01 主服务器可以恢复优先级 将流量转换给 主服务器
脚本执行结果:
权重数值是正数:
- 执行成功:脚本执行的返回值为0 优先级+weight 求和运算 150+2
- 执行失败:脚本执行的返回值为非0 优先级保持不变
权重数值是负数:
- 执行成功:脚本执行的返回值为0 优先级保持不变
- 执行失败:脚本执行的返回值为非0 优先级-weight 求差运算 150+(-2)
2.需要实现负载双主配置
不同主备服务器上有不同vip地址
第一个历程:编写lb01配置文件
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
vrrp_instance VI_2 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.4
}
}
第二个程序:编写lb02配置文件
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id 52
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.4
}
}
第三个历程:配置好DNS本地解析
10.0.0.3 www.nana.com blog.nana.com —> 10.0.0.5 lb01
1.0.0.0.4 bbs.nana.com zhihu.nana.com —>10.0.0.6 lb02