目录
Nginx场景实践_Nginx高可用
Nginx场景实践_LVS负载均衡
Nginx场景实践_keepalived健康监测
Nginx场景实践_企业双机热备方案
使用keepalived虚拟IP
Nginx+keepalived实现高可用
Nginx场景实践_Nginx高可用
什么是高可用?
高可用HA(High Availability)是分布式系统架构设计中必须考虑 的因素之一,它通常是指,通过设计减少系统不能提供服务的时 间。如果一个系统能够一直提供服务,那么这个可用性则是百分之 百,但是天有不测风云。所以我们只能尽可能的去减少服务的故障。
解决的问题
在生产环境上很多时候是以 Nginx 做反向代理对外提供服务,但 是一天Nginx难免遇见故障,如:服务器宕机。当 Nginx 宕机那么 所有对外提供的接口都将导致无法访问。虽然我们无法保证服 务器百分之百可用,但是也得想办法避免这种悲剧,今天我们 使用 keepalived 来实现 Nginx 的高可用。
双机热备方案
这种方案是国内企业中最为普遍的一种高可用方案,双机热备其实 就是指一台服务器在提供服务,另一台为某服务的备用状态,当一 台服务器不可用另外一台就会顶替上去。
实时效果反馈
1. Nginx 双机热备方案主要解决什么问题。
A 安全问题
B nginx单点故障问题
C 性能问题
D 并发问题
Nginx场景实践_LVS负载均衡
LVS是一个开源的软件,可以实现传输层四层负载均衡。LVS是 Linux Virtual Server的缩写,意思是Linux虚拟服务器。
目标:
通过 LVS 达到的负载均衡技术和 Linux 操作系统实现一个高性能高可用的 Linux 服务器集群,它具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的性能。
LVS的八种调度算法
1 、轮叫调度 rr
2 、加权轮叫 wrr
3 、最少链接 lc
4 、加权最少链接 wlc
5 、基于局部性的最少连接调度算法 lblc
6 、复杂的基于局部性最少的连接算法 lblcr
7 、目标地址散列调度算法 dh
8 、源地址散列调度算法 sh
实时效果反馈
1. LVS是一个开源的软件,可以实现____四层负载均衡。
A 应用层
B 链路层
C 传输层
D 会话层
2. 下列不属于LVS负载均衡算法的是____。
A 轮叫调度 rr
B 加权轮叫 wrr
C 最少链接 lc
D ip_hash
Nginx场景实践_keepalived健康监测
LVS可以实现负载均衡,但是不能够进行健康检查,比如一个rs出现故障,LVS 仍然会把请求转发给故障的rs服务器,这样就会导致请求的无效性。keepalive 软件可以进行健康检查,而且能同时实现 LVS 的高可用性,解决 LVS 单点故障的问题,其实 keepalive 就是 为 LVS 而生的。
keepalived工作原理
keepalived是基于VRRP协议实现的保证集群高可用的一个服务软件,主要功能是实现真机的故障隔离和负载均衡器间的失败切换, 防止单点故障。
VRRP协议
VRRP是一种容错协议,它保证当主机的下一跳路由器出现故障时, 由另一台路由器来代替出现故障的路由器进行工作,从而保持网络通信的连续性和可靠性。
主要作用: VRRP可以将两台或者多台物理路由器设备虚拟成一个虚拟路由,这个虚拟路由器通过虚拟IP(一个或者多个)对外提供服务。
实时效果反馈
1. keepalived主要解决LVS____问题。
A 不高效
B 不安全问题
C 不稳定问题
D 不能够进行健康检查
Nginx场景实践_企业双机热备方案
环境服务配置
两台Nginx服务器
Nginx 主服务器 192.168.66.100
Nginx 备服务器 192.168.66.101
Lvs 虚拟VIP 192.168.66.99
环境搭建
yum install -y keepalived
keepalived 常用命令
service keepalived start
service keepalived stop
启动报错:
Starting keepalived (via systemctl): Job for
keepalived.service failed. See 'systemctl status
keepalived.service' and 'journalctl -xn' for details.
解决办法
[root@edu-proxy-01 sbin]# cd /usr/sbin/
[root@edu-proxy-01 sbin]# rm -f keepalived
[root@edu-proxy-01 sbin]# cp
/usr/local/keepalived/sbin/keepalived /usr/sbin/
使用keepalived虚拟IP
修改主keepalived信息
修改主Nginx服务器keepalived文件, /etc/keepalived/keepalived.conf
State 为MASTER
! Configuration File for keepalived
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
#运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
interval 2 #检测时间间隔
weight -20 #如果条件成立的话,则权重 -20
}
# 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
state MASTER #来决定主从
interface ens33 # 绑定虚拟 IP 的网络接口,根据自己的机器填写
virtual_router_id 121 # 虚拟路由的 ID 号,两个节点设置必须一样
mcast_src_ip 192.168.212.141 #填写本机ip
priority 100 # 节点优先级,主要比从节点优先级高
nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s
authentication {
auth_type PASS
auth_pass 1111
}
# 将 track_script 块加入 instance 配置块
track_script {
chk_nginx #执行 Nginx 监控的服务
}
virtual_ipaddress {
192.168.212.110 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。
}
}
修改从keepalived信息
修改主Nginx服务器keepalived文件,
/etc/keepalived/keepalived.conf
State 为BACKUP
! Configuration File for keepalived
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
#运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
interval 2 #检测时间间隔
weight -20 #如果条件成立的话,则权重 -20
}
# 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
state BACKUP #来决定主从
interface ens33 # 绑定虚拟 IP 的网络接口,根据自己的机器填写
virtual_router_id 121 # 虚拟路由的 ID 号,两个节点设置必须一样
mcast_src_ip 192.168.212.141 #填写本机ip
priority 100 # 节点优先级,主要比从节点优先级高
nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s
authentication {
auth_type PASS
auth_pass 1111
}
# 将 track_script 块加入 instance 配置块
track_script {
chk_nginx #执行 Nginx 监控的服务
}
virtual_ipaddress {
192.168.212.110 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。
}
}
Nginx+keepalived实现高可用
写入nginx_check.sh脚本 /etc/keepalived/nginx_check.sh
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
实时效果反馈
1. Nginx高可用技术通过使用___实现。
A keepalived
B LVS
C F5
D Keepalived+LVS