Ngnix高可用解决方案LVS+KeepAlived

本文介绍了Nginx单点问题及其解决方案,通过LVS(四层负载)和KeepAlived(高可用管理)构建高可用集群。详细讲解了LVS的调度算法和三种负载均衡技术,以及Keepalived的健康检查和VRRP协议。通过配置示例展示了如何设置VIP和端口,确保服务的稳定性和容错性。
摘要由CSDN通过智能技术生成

Nginx单点问题剖析

全链路高可用之Nginx反向代理单点故障分析

dns轮训多个ip,假如某个nginx挂了,怎么办

Nginx高可用解决方案-基础

国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系。

从低到高分别是:

物理层、数据链路层、网络层、传输层、会话层、表示层和应用层

四层工作在OSI第四层 也就是传输层

七层工作在最高层,也就是应用层
F5、LVS(四层负载 tcp)

用虚拟ip+port接收请求,再转发到对应的真实机器
HAproxy、Nginx(七层负载)

用虚拟的url或主机名接收请求,再转向相应的处理服务器

业界主流高可用方案Linux虚拟服务器 LVS讲解

什么是LVS

官网 www.linuxvirtualserver.org
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;(支持少数系统,不可以实现端口映射))

业界主流高可用方案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

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位

启动keepalived
#启动
service keepalived start

#停止
service keepalived stop

#查看状态
service keepalived status

#重启
service keepalived restart

#停止防火墙
systemctl stop firewalld.service

根据需求配置多个节点

如果其中keepalived挂了,那就会vip就会分发到另外一个keepalived节点,响应正常
如果某个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= ( p s − C n g i n x − − n o − h e a d i n g ∣ w c − l ) i f [ " (ps -C nginx --no-heading|wc -l) if [ " (psCnginxnoheadingwcl)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 关闭

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值