高可用
高可用
1、减少系统不能提供服务的时间
2、上游服务器的高可用
(1)upstream 配置后端服务器,进行负载均衡
(2)server 的 location 分离访问动、静资源请求
3、Nginx 高可用
(1)需要两台以上 Nginx 服务器对外提供服务,防止宕机
(2)实现:Keepalived:C 语言编写,主要是通过 VRRP 协议实现高可用
4、主动健康检查(针对后端服务器)
(1)Tengine 模块:ngx_http_upstream_check_module
(2)Nginx 商业模块:ngx_http_upstream_hc_module
动静分离
1、动态:后台应用程序的业务处理
2、静态:网站的静态资源
3、分离:将两者进行分开部署访问,提供用户进行访问
(1)所有和静态资源相关的内容,都交给 Nginx 部署访问
(2)非静态内容,则交给后端服务器(如:Tomcat)部署访问
4、原因
(1)Nginx 处理静态资源的效率高
(2)减轻 Tomcat 服务器的访问压力,提高静态资源的访问速度
(3)降低动态资源、静态资源的耦合度
5、实现
(1)静态资源:CDN、Nginx 等
(2)动态资源:Tomcat、WebLogic、WebSphere
6、适合中小型项目
VRRP
1、Virtual Route Redundancy Protocol:虚拟路由冗余协议
(1)VRRP 将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器 IP
(2)在路由器组内部,Master 实际拥有对外 IP,MASTER 实现针对虚拟路由器 IP 的各种网络功能
2、选择协议
(1)VRRP 可以把一个虚拟路由器的责任,动态分配到局域网上其中一台 VRRP 路由器
(2)虚拟路由,一个不真实存在的路由,由 VRRP 路由群组创建
(3)虚拟路由有对应 IP 地址
(4)VRRP 路由之间会有竞争选择,产生一个 Master 路由、多个 Backup 路由
3、路由容错协议
(1)Master 路由、Backup 路由之间会有一个心跳检测,Master 定时告知 Backup 自己的状态
(2)如果在指定时间内,Backup 没有接收到通知内容,Backup 会替代 Master 成为新 Master
(3)Master 路由特权:虚拟路由、后端服务器都是通过 Master 进行数据传递交互
(4)Backup 则会直接丢弃请求、数据,不做处理,只监听 Master 状态
(5)BACKUP 除了接收 MASTER 的 VRRP 状态通告信息外,不执行对外的网络功能
安装
1、使用 YUM 安装 Keepalived 包、所有必需的依赖项
yum install keepalived
2、要运行最新的稳定版本,请从源代码编译 Keepalived
(1)编译 Keepalived 需要编译器、OpenSSL、Netlink 库,选择安装 SNMP 支持所需的 Net-SNMP
yum install curl gcc openssl-devel libnl3-devel net-snmp-devel
(2)使用 curl 或任何其他传输工具(如:wget)下载 Keepalived,并解压
curl --progress https://keepalived.org/software/keepalived-2.2.7.tar.gz | tar xz
(3)切换目录
cd keepalived-2.2.7
(4)配置、编译、安装
./configure
make
sudo make install
3、安装目录
(1)系统配置文件:/etc/keepalived/keepalived.conf
(2)系统配置脚本:/usr/local/sbin/keepalived,启动、关闭 keepalived
keepalived.conf 配置文件
1、global 全局配置(例)
global_defs {
#通知邮件,当keepalived发送切换时,需要发email给具体的邮箱地址
notification_email {
tom@itcast.cn
jerry@itcast.cn
}
#设置发件人的邮箱信息
notification_email_from zhaomin@itcast.cn
#指定smpt服务地址
smtp_server 192.168.200.1
#指定smpt服务连接超时时间
smtp_connect_timeout 30
#运行keepalived服务器的一个标识,可以用作发送邮件的主题信息
router_id LVS_DEVEL
#默认是不跳过检查,检查收到的VRRP通告中的所有地址可能会比较耗时
#设置此命令的意思是,如果通告与接收的上一个通告来自相同的master路由器,则不执行检查(跳过检查)
vrrp_skip_check_adv_addr
#严格遵守VRRP协议
vrrp_strict
#在一个接口发送的两个免费ARP之间的延迟。可以精确到毫秒级。默认是0
vrrp_garp_interval 0
#在一个网卡上每组na消息之间的延迟时间,默认为0
vrrp_gna_interval 0
}
2、vrrp 相关配置
(1)vrrp_script
(2)vrrp_sync_group
(3)garp_group
(4)vrrp_instance
(5)例
#设置 keepalived 实例,VI_1为VRRP实例名称
vrrp_instance VI_1 {
#有两个值可选MASTER主 BACKUP备
state MASTER
#vrrp实例绑定的接口,用于发送VRRP包[当前服务器使用的网卡名称]
interface ens33
#指定VRRP实例ID,范围是0-255
virtual_router_id 51
#指定优先级,优先级高的将成为MASTER
priority 100
#指定发送VRRP通告的间隔,单位是秒
advert_int 1
#vrrp之间通信的认证信息
authentication {
#指定认证方式。PASS简单密码认证(推荐)
auth_type PASS
#指定认证使用的密码,最多8位
auth_pass 1111
}
#虚拟IP地址设置虚拟IP地址,供用户访问使用,可设置多个,一行一个
virtual_ipaddress {
192.168.200.222
}
}
3、LVS 相关配置
vrrp_script
1、keepalived 只能监控网络故障、keepalived 本身
(1)让 vip 进行切换,就必须关闭服务器上的 keepalived
(2)vrrp_script 实现自动切换
2、通过编写脚本,对业务进程进行检测监控
(1)配置文件(例)
vrrp_script <SCRIPT_NAME> {
#要执行的脚本的路径
script "脚本位置"
#脚本调用的间隔时间,默认 1 秒
interval <INTEGER>
#调整权重优先级,默认 0
weight <INTEGER:-253..253> [reverse]
}
(2).sh 脚本(例)
#!/bin/bash
#获取nginx进程个数
num=`ps -C nginx --no-header | wc -l`
#nginx进程个数为0
if [ $num -eq 0 ];then
#尝试启动nginx
/usr/local/nginx/sbin/nginx
#再次检查
if [ `ps -C nginx --no-header | wc -l` -eq 0 ]; then
#若nginx启动失败,杀死master,选择backup成为新master
killall keepalived
fi
fi
(3)需要为脚本设置权限:chmod 755 脚本路径
3、VRRP instance 添加 nopreempt
(1)当一个较高优先级的 VRRP 实例上线时,通常会抢占一个较低优先级的实例
(2)nopreempt 可以阻止较高优先级的机器接管 master 角色,并允许较低优先级的机器继续作为 master
(3)注意:要使其发挥作用,初始状态必须不是 MASTER
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战