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秒执行一次
结束

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
18天前
|
移动开发 前端开发 JavaScript
前端vue2、vue3去掉url路由“ # ”号——nginx配置(一)
前端vue2、vue3去掉url路由“ # ”号——nginx配置
52 0
|
19天前
|
JavaScript 前端开发 应用服务中间件
angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)
angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)
24 0
|
18天前
|
前端开发 JavaScript 应用服务中间件
前端vue2、vue3去掉url路由“ # ”号——nginx配置(二)
前端vue2、vue3去掉url路由“ # ”号——nginx配置
52 0
|
3天前
|
应用服务中间件 nginx
nginx配置集群轮训策略
nginx配置集群轮训策略
10 0
|
4天前
|
存储 运维 负载均衡
Heartbeat+Nginx实现高可用集群
通过Heartbeat与Nginx的结合,您可以建立一个高可用性的负载均衡集群,确保在服务器故障时仍能提供无中断的服务。这种配置需要仔细的计划和测试,以确保系统在故障情况下能够正确运行。
10 2
|
4天前
|
安全 网络协议 应用服务中间件
一文读懂HTTPS⭐揭秘加密传输背后的原理与Nginx配置攻略
一文读懂HTTPS⭐揭秘加密传输背后的原理与Nginx配置攻略
|
12天前
|
应用服务中间件 PHP nginx
php如何实现检测nginx配置的正确性
请确保在执行此操作时,PHP有足够的权限来执行Nginx命令和访问Nginx配置文件。另外,将上述代码嵌入到您的应用程序中时,要注意安全性,以防止潜在的命令注入攻击。
51 3
|
14天前
|
负载均衡 网络协议 应用服务中间件
【亮剑】在Linux中构建高可用性和高性能网络服务的负载均衡工具HAProxy、Nginx和Keepalived。
【4月更文挑战第30天】本文介绍了在Linux中构建高可用性和高性能网络服务的负载均衡工具HAProxy、Nginx和Keepalived。HAProxy是一个高性能的开源TCP和HTTP负载均衡器,适合处理大量并发连接;Nginx是一个多功能Web服务器和反向代理,支持HTTP、HTTPS和TCP负载均衡,同时提供缓存和SSL功能;Keepalived用于监控和故障切换,通过VRRP实现IP热备份,保证服务连续性。文中详细阐述了如何配置这三个工具实现负载均衡,包括安装、配置文件修改和启动服务,为构建可靠的负载均衡系统提供了指导。
|
15天前
|
运维 负载均衡 Cloud Native
Serverless 应用引擎产品使用之在Serverless 应用引擎中,使用云原生网关的情况下,SLB(负载均衡器)和证书配置如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
23 1
|
18天前
|
安全 应用服务中间件 网络安全
linux_nginx中添加ssl配置(open ssl)
linux_nginx中添加ssl配置(open ssl)
25 1