基于LVS+KeepAlived实现Ngnix高可用解决方案
🚀 作者 :“二当家-小 D”🚀 博主简介:⭐前荔枝 FM 架构师、阿里资深工程师||曾任职于阿里巴巴担任多个项目负责人,8 年开发架构经验,精通 java, 擅长分布式高并发架构, 自动化压力测试,微服务容器化 k8s 等🍅文末获取源码联系 配套笔记打包🍅。
🚀 作者 :“二当家-小 D”
🚀 博主简介:⭐前荔枝 FM 架构师、阿里资深工程师||曾任职于阿里巴巴担任多个项目负责人,8 年开发架构经验,精通 java, 擅长分布式高并发架构, 自动化压力测试,微服务容器化 k8s 等
🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬
🍅文末获取源码联系 配套笔记打包🍅
🔗往期文章传送门:
零基础入门高性能Nginx服务器(一)
玩转高性能Nginx服务器经典案例实战 (二)
目录
一、Ngnix高可用解决方案LVS+KeepAlived
1. 全链路高可用之Nginx基础架构问题分析
简介:讲解Nginx单点问题剖析
- 全链路高可用之Nginx反向代理单点故障分析
- dns轮训多个ip,假如某个nginx挂了,怎么办
- Nginx集群架构(vip )
-
Nginx高可用解决方案-基础
国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系。 从低到高分别是: 物理层、数据链路层、网络层、传输层、会话层、表示层和应用层 四层工作在OSI第四层 也就是传输层 七层工作在最高层,也就是应用层
- F5、LVS(四层负载 tcp)
- 用虚拟ip+port接收请求,再转发到对应的真实机器
- HAproxy、Nginx(七层负载)
- 用虚拟的url或主机名接收请求,再转向相应的处理服务器
- F5、LVS(四层负载 tcp)
2. 业界主流的高可用方案 Linux虚拟服务器 LVS 讲解
简介:讲解业界主流高可用方案Linux虚拟服务器 LVS讲解
- 什么是LVS
LVS是Linux Virtual Server,Linux虚拟服务器,是一个虚拟的服务器集群系统
项目是由章文嵩博士成立,是中国国内最早出现的自由软件项目之一
Linux2.4 内核以后,LVS 已经是 Linux 标准内核的一部分
软件负载解决的两个核心问题是:选谁、转发
-
提供了10多种调度算法: 轮询、加权轮询、最小连接、目标地址散列、源地址散列等
-
三种负载均衡转发技术
- NAT:数据进出都通过 LVS, 前端的Master既要处理客户端发起的请求,又要处理后台RealServer的响应信息,将RealServer响应的信息再转发给客户端, 容易成为整个集群系统性能的瓶颈; (支持任意系统且可以实现端口映射)
- DR: 移花接木,最高效的负载均衡规则,前端的Master只处理客户端的请求,将请求转发给RealServer,由后台的RealServer直接响应客户端,不再经过Master, 性能要优于LVS-NAT; 需要LVS和RS集群绑定同一个VIP(支持多数系统,不可以实现端口映射)
- TUNL:隧道技术,前端的Master只处理客户端的请求,将请求转发给RealServer,然后由后台的RealServer直接响应客户端,不再经过Master;(支持少数系统,不可以实现端口映射))
3. 业界主流的高可用方案 keepalived讲解
简介:讲解业界主流高可用方案keepalived讲解
- 什么是keepalived
- 核心:监控并管理 LVS 集群系统中各个服务节点的状态
keepalived是一个类似于交换机制的软件,核心作用是检测服务器的状态,如果有一台web服务器工作出现故障,Keepalived将检测到并将有故障的服务器从系统中剔除,使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成。
后来加入了vrrp(虚拟路由器冗余协议),除了为lvs提供高可用还可以为其他服务器比如Mysql、Haproxy等软件提供高可用方案
- 安装
yum install -y keepalived
#路径
cd /etc/keepalived
- 启动和查看命令
#启动
service keepalived start
#停止
service keepalived stop
#查看状态
service keepalived status
#重启
service keepalived restart
#停止防火墙
systemctl stop firewalld.service
- 注意: 如果有缺少依赖可以执行下面的命令
yum install -y gcc
yum install -y openssl-devel
yum install -y libnl libnl-devel
yum install -y libnfnetlink-devel
yum install -y net-tools
yum install -y vim wget
4. Keepalived核心配置讲解
简介:Keepalived核心配置讲解
- 配置/etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL # 设置lvs的id,在一个网络内应该是唯一的
enable_script_security #允许执行外部脚本
}
#配置vrrp_script,主要用于健康检查及检查失败后执行的动作。
vrrp_script chk_real_server {
#健康检查脚本,当脚本返回值不为0时认为失败
script "/usr/local/software/conf/chk_server.sh"
#检查频率,以下配置每2秒检查1次
interval 2
#当检查失败后,将vrrp_instance的priority减小5
weight -5
#连续监测失败3次,才认为真的健康检查失败。并调整优先级
fall 3
#连续监测2次成功,就认为成功。但不调整优先级
rise 2
user root
}
#配置对外提供服务的VIP vrrp_instance配置
vrrp_instance VI_1 {
#指定vrrp_instance的状态,是MASTER还是BACKUP主要还是看优先级。
state MASTER
#指定vrrp_instance绑定的网卡,最终通过指定的网卡绑定VIP
interface ens33
#相当于VRID,用于在一个网内区分组播,需要组播域内内唯一。
virtual_router_id 51
#本机的优先级,VRID相同的机器中,优先级最高的会被选举为MASTER
priority 100
#心跳间隔检查,默认为1s,MASTER会每隔1秒发送一个报文告知组内其他机器自己还活着。
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
#定义虚拟IP(VIP)为192.168.159.100,可多设,每行一个
virtual_ipaddress {
192.168.159.100
}
#本vrrp_instance所引用的脚本配置,名称就是vrrp_script 定义的容器名
track_script {
chk_real_server
}
}
# 定义对外提供服务的LVS的VIP以及port
virtual_server 192.168.159.100 80 {
# 设置健康检查时间,单位是秒
delay_loop 6
# 设置负载调度的算法为rr
lb_algo rr
# 设置LVS实现负载的机制,有NAT、TUN、DR三个模式
lb_kind NAT
# 会话保持时间
persistence_timeout 50
#指定转发协议类型(TCP、UDP)
protocol TCP
# 指定real server1的IP地址
real_server 192.168.159.146 80 {
# 配置节点权值,数字越大权重越高
weight 1
# 健康检查方式
TCP_CHECK { # 健康检查方式
connect_timeout 10 # 连接超时
retry 3 # 重试次数
delay_before_retry 3 # 重试间隔
connect_port 80 # 检查时连接的端口
}
}
}
-
配置注意
router_id后面跟的自定义的ID在同一个网络下是一致的 state后跟的MASTER和BACKUP必须是大写;否则会造成配置无法生效的问题 interface 网卡ID;要根据自己的实际情况来看,可以使用以下方式查询 ip a 查询 在BACKUP节点上,其keepalived.conf与Master上基本一致,修改state为BACKUP,priority值改小即可 authentication主备之间的认证方式,一般使用PASS即可;主备的配置必须一致,不能超过8位
5. 架构系列之Nginx高可用方案相关环境准备
简介:准备Nginx+Lvs+KeepAlive相关软件环境
- 配置Nginx, 修改网页
- 启动keepalived
#启动
service keepalived start
#停止
service keepalived stop
#查看状态
service keepalived status
#重启
service keepalived restart
#停止防火墙
systemctl stop firewalld.service
6. 架构系列之Nginx+LVS+KeepAlived方案实施《上》
简介:Nginx+Lvs+KeepAlive高可用方案实施《上》
- 根据需求配置多个节点
- 演示
- 如果其中keepalived挂了,那就会vip就会分发到另外一个keepalived节点,响应正常
- 如果某个realServer挂了,比如是Nginx挂了,那对应keepalived节点存活依旧可以转发过去,但是响应失败
7. 架构系列之Nginx+LVS+KeepAlived方案实施《下》
简介:Nginx+Lvs+KeepAlive高可用方案实施《下》
- 解决问题
- 如果某个realServer挂了,比如是Nginx挂了,那对应keepalived节点存活依旧可以转发过去,但是响应失败
- 脚本监听
#配置vrrp_script,主要用于健康检查及检查失败后执行的动作。
vrrp_script chk_real_server {
#健康检查脚本,当脚本返回值不为0时认为失败
script "/usr/local/software/conf/chk_server.sh"
#检查频率,以下配置每2秒检查1次
interval 2
#当检查失败后,将vrrp_instance的priority减小5
weight -5
#连续监测失败3次,才认为真的健康检查失败。并调整优先级
fall 3
#连续监测2次成功,就认为成功。但不调整优先级
rise 2
user root
}
- chk_server.sh脚本内容(需要 chmod +x chk_server.sh)
#!/bin/bash
#检查nginx进程是否存在
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" -eq "0" ]; then
service keepalived stop
echo 'nginx server is died.......'
fi
- 常见问题
vip能ping通,vip监听的端口不通: 第一个原因:nginx1和nginx2两台服务器的服务没有正常启动
vip ping不通: 核对是否出现裂脑,常见原因为防火墙配置所致导致多播心跳失败,核对keepalived的配置是否正确
-
特别注意: 需要关闭selinux,不然sh脚本可能不生效
- getenforce 查看
- setenforce 0 关闭
-
生产环境问题
- VIP : 阿里云(LBS)、华为云、腾讯云、AWS
二、 Nginx高性能原理
Nginx基础架构master-worker进程剖析
简介:Nginx基础架构模型剖析
- master 进程负责管理 Nginx 本身和其他 worker 进程
- 高性能原理
- nginx 通过 多进程 + io多路复用(epoll) 实现了高并发
- 采用多个worker 进程实现对 多cpu 的利用 通过eopll 对 多个文件描述符 事件回调机制
- 拓展:linux I/O多路复用有select,poll,epoll
I/O模式一般分为同步IO和异步IO。
同步IO会阻塞进程,异步IO不会阻塞进程。
目前linux上大部分用的是同步IO,异步IO在linux上还不太成熟(有部分)
同步IO又分为阻塞IO,非阻塞IO,IO多路复用, 很多人对这个就有疑问了????
同步IO会阻塞进程,为什么也包括非阻塞IO? 因为非阻塞IO虽然在请求数据时不阻塞,但真正数据来临时,也就是内核数据拷贝到用户数据时,此时进程是阻塞的。
推荐书籍《Unix网络编程》
推荐课程《高并发架构-Netty百万连接实战》
今天的文章就先分享到这里了,需要资料包和完整笔记可以联系我哦!
资料获取📚
完整代码和笔记已经准备好,如果有问题,可以在评论区留言讨论💬
原创不易,别忘了点赞👍+收藏⭐哦!
点击下方链接即可获取完整资料压缩包🎁,快来领取吧!↓↓↓↓
更多推荐
所有评论(0)