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


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

相关内容