Nginx负载均衡配置+keepalived高可用

简介: Nginx负载均衡配置+keepalived高可用

1.什么是负载均衡?
随着应用各个核心模块业务量的提高,访问量和数据流量的快速增长,其处理能力和计算强度也相应地增大,使得单一的服务器设备根本无法承担。在此情况下,如果扔掉现有设备去做大量的硬件升级,这样将造成现有资源的浪费,而且如果再面临下一次业务量的提升时,这又将导致再一次硬件升级的高额成本投入,甚至性能再卓越的设备也不能满足当前业务量增长的需求。
针对此情况而衍生出来的一种廉价有效透明的方法以扩展现有网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性的技术就是负载均衡(Load Balance)。
2.负载均衡的种类
①一种是通过硬件来进行解决,常见的硬件有NetScaler、F5、Radware和Array等商用的负载均衡器,但是它们是比较昂贵的
②一种是通过软件来进行解决的,常见的软件有LVS、Nginx、apache等,它们是基于Linux系统并且开源的负载均衡策略
以上内容摘自:https://www.cnblogs.com/wang-meng/p/5861174.html
3.虚拟机准备工作,三台安装了nginx服务器的机器
image
nginx安装过程请参考:https://yq.aliyun.com/articles/655855
4.配置Nginx转发条件
image
配置nginx.conf

该文件中一些节点的作用:
worker_processes:工作进程个数,可配置多个
worker_connections:单个进程最大连接数
server:每一个server相当于一个代理服务器
lister:监听端口,默认80
server_name:当前服务的域名,可以有多个,用空格分隔(我们是本地所以是localhost)
location:表示匹配的路径,这时配置了/表示所有请求都被匹配到这里
index:当没有指定主页时,默认会选择这个指定的文件,可多个,空格分隔
proxy_pass:请求转向自定义的服务器列表
upstream name{ }:服务器集群名称

image
重启nginx服务
image
5.安装并启动Tomcat
参考链接:https://yq.aliyun.com/articles/655542
6.修改Tomcat的index.jsp文件
为了区分是哪个IP下的Tomcat,修改下index.jsp的内容,显示对应的IP地址
image
image
7.浏览器访问http://192.168.0.115,展示页面为116的Tomcat
image
8.设置权重,重新访问http://192.168.0.115,用115做服务器负载均衡到116和117
image
image
image
9.搭建Keepalived,需要依赖openssl
查看是否安装openssl

rpm -qa|grep openssl

image
openssl已安装
如果机器115出现故障了呢? 那么怎么使用116上的Nginx进行转发呢? 怎么设置主机和备机呢? 如果主机死了怎么进行故障移除呢? 如果主机从不可用到可用状态又怎么进行恢复添加呢? 这些功能都是可以通过Keepalived来进行设置的.
Keepalived
(1)Keepalived高可用软件

Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,keepalived除了能够管理LVS软件外,还可以作为其他服务的高可用解决方案软件。
Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual  Router  Redundancy Protocol (虚拟路由冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由的单点故障问题的,它能保证当个别节点宕机时,整个网络可以不间断地运行。所以,keepalived一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可以实现系统网络服务的高可用功能。

(2)Keepalived高可用故障切换转移原理

Keepalived高可用服务对之间的故障切换转移,是通过VRRP来实现的。在keepalived服务工作时,主Master节点会不断地向备节点发送(多播的方式)心跳消息,用来告诉备Backup节点自己还活着。当主节点发生故障时,就无法发送心跳的消息了,备节点也因此无法继续检测到来自主节点的心跳了。于是就会调用自身的接管程序,接管主节点的IP资源和服务。当主节点恢复时,备节点又会释放主节点故障时自身接管的IP资源和服务,恢复到原来的备用角色。

①keepalived官网:http://www.keepalived.org/
image
②下载keepalived最新版V2.0.9

wget http://www.keepalived.org/software/keepalived-2.0.9.tar.gz

image
③解压keepalived-2.0.9.tar.gz

tar -xzvf ./keepalived-2.0.9.tar.gz

image
④执行./configure

cd /usr/local/keepalived-2.0.9
./configure

image
说明缺少依赖包libnl、libnl-devel

yum -y install  libnl libnl-devel

image
重新执行./configure
image
⑤开始编译和安装

make && make install

image
⑥keepalived安装后默认不会注册为系统服务,需要手动添加系统服务脚本

  • keepalived启动脚本变量引用文件,默认文件路径是/etc/sysconfig/,也可以不做软链接,直接修改启动脚本中文件路径即可(安装目录下)
cp /usr/local/keepalived-2.0.9/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/keepalived
  • 将keepalived主程序加入到环境变量(安装目录下)
cp /usr/local/keepalived-2.0.9/keepalived/keepalived /usr/sbin/
  • keepalived启动脚本(源码目录下),放到/etc/init.d/目录下就可以使用service命令便捷调用
cp /usr/local/keepalived-2.0.9/keepalived/etc/init.d/keepalived  /etc/init.d/keepalived
  • 将配置文件放到默认路径下
mkdir /etc/keepalived
cp /usr/local/keepalived-2.0.9/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
  • 设置为开机启动
chkconfig keepalived on

image

  • 启动keepalived服务
service keepalived start

image
192.168.0.115环境搭建完成,116按同样的环境搭建

  • 检查keepalived是否启动成功
ip add show eth0

eth0是网卡名称,通过ifconfig查看
image
image
⑦192.168.0.115做主机,192.168.0.116做备机,备机需要修改keepalived.conf
主机 (主节点):
image
image
image
备机 (从节点):
image
image
image
现在主节点和从节点都会生成VIP,这种现象叫做“脑裂”
脑裂(split-brain) : 指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏。对于无状态服务的HA,无所谓脑裂不脑裂;但对有状态服务(比如MySQL)的HA,必须要严格防止脑裂
思考:正常情况下keepalived的VIP应该生成在主节点,从节点在检测到主节点正常运行的时候是不生成VIP的,但是现在从节点生成了VIP,有可能主从节点间的通信异常了。主从节点通信是通过VRRP广播实现的,首先检查从节点是否可以接收到VRRP广播

tcpdump -i eth0|grep VRRP

image
很明显从节点已经接收到VRRP广播,应该是被过滤掉了,有这功能的就只有防火墙了,查看防火墙过滤规则

vim /etc/sysconfig/iptables

image
添加过滤规则

#允许组播地址通信
-A INPUT -s 192.168.0.0/24 -d 224.0.0.18 -j ACCEPT
#允许VRRP(虚拟路由器冗余协)通信
-A INPUT -s 192.168.0.0/24 -p vrrp -j ACCEPT

image
重启防火墙

service iptables reload

image
查看是否生成VIP
image
已经成功了
⑧主节点的keepalived服务停掉,观察从节点是否可以生成VIP
主节点:
image
从节点:
image
⑨主节点启动keepalived服务后,观察是否出现“脑裂现象”
主节点:
image
从节点:
image
访问tomcat页面不受任何影响,说明故障移除是OK的
image
image
10.因为我们是用nginx做负载均衡分发请求数据包的,如果主节点keepalived服务正常运行,但是nginx服务出现故障,就会出现负载均衡服务失灵的问题,导致请求无法访问到116或117的应用服务器上,所以我们要检测nginx服务是否正常运行,如果出现故障,则立即停掉keepalived服务,这样就可以自动切换到从节点上
通过检测80端口是否开启来判定nginx的运行情况,2秒钟检测一次,脚本如下

#!/bin/bash
while true
do
if [ $(netstat -tlnp|grep nginx|wc -l) -ne 1 ]
then
    /etc/init.d/keepalived stop
fi
sleep 2
done

image
直接执行该脚本,是一个死循环,如果服务正常(netstat -tlnp|grep nginx|wc -l)=1,脚本里判断如果不等于1,就停掉keepalived服务,sleep 2,2秒执行一次
结束

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
负载均衡 网络协议 算法
一文读懂什么是Nginx?它能否实现IM的负载均衡?
Nginx(及其衍生产品)是目前被大量使用的服务端反向代理和负载均衡方案,从某种意义上来讲,Nginx几乎是低成本、高负载Web服务端代名词。 如此深入人心的Nginx,很多人也想当然的认为,在IM或消息推送等场景下是否也能使用Nginx来解决负载均衡问题? 另外,即时通讯网的论坛和QQ群里也经常有人问起,Nginx是否能支持TCP、UDP、WebSocket的负载
410 4
|
11月前
|
应用服务中间件 Linux 网络安全
使用Nginx免费版与Keepalived实现高可用性High Availablity方案
本文介绍了如何使用Nginx免费版与Keepalived实现高可用性(HA)方案,涵盖环境搭建、Keepalived安装配置、版本升级及主从模式设置。通过虚拟机测试,结合CentOS与宝塔,详细说明VIP配置与服务启动流程,助你构建稳定可靠的Web高可用架构。
|
负载均衡 前端开发 应用服务中间件
Tomcat的负载均衡和动静分离(与nginx联动)
总的来说,负载均衡和动静分离是提高Web应用性能的两个重要手段。通过合理的配置和使用,我们可以让Web应用更好地服务于用户。
409 21
|
负载均衡 Java 应用服务中间件
Tomcat与Nginx的负载均衡与动静分离技巧
总的来说,Tomcat和Nginx各有各的优点,在负载均衡和动静分离这两方面它们都有很好的应用。灵活使用这两个工具能够让Web应用具有更好的扩展性和用户体验。
398 14
|
负载均衡 前端开发 JavaScript
LVS-DR模式、keepalived、Nginx与Tomcat合作,打造动静分离,高效负载均衡与高可用性
为了采用这样的架构,你需要对LVS-DR、Keepalived、Nginx与Tomcat有一定的理解和掌握,同时也需要投入一些时间去研究和配置,但是一旦你把它运行起来,你将会发现,这一切都是值得的。
494 11
|
负载均衡 算法 应用服务中间件
Nginx长连接负载均衡详细说明以及案例
本文详细介绍了Nginx长连接负载均衡的配置与原理。长连接(Keepalive)允许客户端和服务器保持连接,减少建立和关闭连接的开销。Nginx支持多种负载均衡算法,如轮询、IP哈希等。通过在Nginx配置文件中使用`upstream`模块和`keepalive`指令,可以实现长连接负载均衡,从而提高系统的性能和响应速度。示例配置展示了如何设置后端服务器组、长连接数及HTTP/1.1协议,确保连接复用,降低延迟。
810 5
|
负载均衡 应用服务中间件 nginx
如何使用nginx实现负载均衡?
如何使用nginx实现负载均衡?
|
负载均衡 容灾 应用服务中间件
使用Docker-compose搭建nginx-keepalived双机热备来实现高可用nginx集群
最近同学出去面试经常会被问到一个问题。 面试官:你说你们公司使用nginx反向代理tornado,部署了多少多少台机器,好像很牛逼的样子,但是我问你,如果主机也就是部署了nginx那台机器并发过大导致宕机了怎么办? 答曰:不考虑带宽峰值的话,比较新的 CPU 跑 nginx 单核每秒能接近 2 万请求,而且nginx如果纯做 HTTP 转发的话,Nginx 的性能高到恐怖,会挂掉很不科学。。。。 面试官:好吧,算你会忽悠,那如果插头被扫地大妈踢掉了怎么办,因为没电导致服务器宕机 答曰:阿里云机房会断电。。。你特么在逗我吧。。
使用Docker-compose搭建nginx-keepalived双机热备来实现高可用nginx集群
|
Java 应用服务中间件 Shell
Nginx+Keepalived+Tomcat 实现Web高可用集群
Nginx+Keepalived+Tomcat 实现Web高可用集群
536 0
|
负载均衡 NoSQL 关系型数据库
Nginx+keepalived实现高可用集群
大型企业架构一般是用户先访问到四层负载均衡,在由四层负载均衡转发至七层服务在均衡,七层负载均衡再转发至后端服务器,四层负载均衡只起到一个分流的作用,根据用户访问的端口,比如说80端口就会跳转至七层的对应的集群,两台四层负载均衡配置是一模一样的,形成高可用,七层的配置也是一模一样的,当有1500个请求需要响应时,四层负载均衡就会平均将1500个请求分给急群中的lb,每个lb响应500个请求,减轻单点的压力。
2293 0
Nginx+keepalived实现高可用集群