Nginx集群概念
# 40.Nginx集群概念
Nginx可以实现负载均衡,那么Nginx本身能否实现负载均衡呢?可以的,本文就来讲解下Nginx如何实现高可用。
# 使用单台Nginx服务存在的问题
之前我们讲过,Nginx可以实现负载均衡,将请求分发到服务器集群上:
但这种结构有个问题:如果Nginx服务宕机了,那么用户就不能访问了服务了,毕竟谁也不能包装Nginx能一直运行下去,可能有突发的情况,例如内存爆了,CPU超高,硬盘坏了,网络断了。。。等等因素。
为此,我们可以搭建Nginx集群,这样即使某一台Nginx宕机了,也还有另一台Nginx提供服务,架构如下:
架构说明:
- 我们准备两台Linux服务器,然后分别搭建Nginx,以实现Nginx集群
- 在有2台服务器,分别搭建Tomcat,以实现Tomcat集群
- 每台Nginx会对两个Tomcat服务实现负载均衡
- 用户访问一个虚拟的IP,然后通过某个软件分发到Nginx集群中的每一台服务器上(使用keepalived这个软件来实现)
顺便介绍下冷备、热备等概念
- 由于我们从单机扩展到了集群,我们可以称其他服务器为最开始那台服务器的备份(backup),也叫备份服务器、从服务器,最开始的那台服务器称为主服务器
- 冷备就是指,备份服务器是关机的,当主服务器宕机后,冷备服务器会自动开机,然后会自动切换为使用冷备服务器,并且此时冷备服务器就相当于主服务器了。这种方式也叫主备、主从方式。
- 冷备和热备,可以统称为主备、主从方式。
- 双活:也叫双主,两台服务器都是活动的,都会处理请求。
- 多活:多台服务器都是活动的,都会处理请求。
具体采用以上哪种集群方式,得看实际情况讨论,笔者负责的一个系统访问量比较高,有4个Nginx服务器,4个Tomcat服务器,采用多活的方式。
接下来我们就试试主从集群搭建和双主集群搭建。
# 什么是Keepalived
keepalived能做什么?简单来说就是安装后,可以配置其监控一些软件的状态,当有软件宕机后可以配置切换到另外一台软件等。而在故障节点恢复正常后,Keepalived又可以自动将该服务节点重新加入集群中。
可以理解为启动一个路由的作用(相当于路标,告诉人们怎么走;在计算机中可以理解为告诉请求应该发到哪里)
比如Keepalived + Nginx可以实现这样的效果:
- 两台服务器上安装了Nginx,然后再安装Keepalived
- 配置Keepalived
- 当有一台Nginx宕机后,自动切换到另一台上
顺便说说虚拟IP的概念,可以理解为是一个虚拟的网卡,我们发送请求给这个IP,它会根据配置情况分发到具体的IP上。Keepalived实现切换的原理也是根据修改这个路由来实现的。
# 准备工作
为了模拟高可用,我们需要准备如下
- 两台Nginx服务器
- 分别安装Keepalived
- 虚拟IP
为了方便,我们这里仅仅演示用虚拟IP访问Nginx服务器,就不用Tomcat服务器了,并且重置下Nginx的配置文件,实得访问Nginx后访问的是首页。
如果你使用VirtualBox或者VMWare,可以通过复制的方式来搭建另一台服务器,省不少功夫。如果你会Docker,则更方便了。注意,如果是云主机等,可能不能创建虚拟IP
这里说下我的环境,方便后期的讲解
服务器1:IP地址192.168.2.242
服务器2:IP地址192.168.2.138
由于我使用的是复制的方式,因此两台服务器都已经安装好了
为了区分两个Nginx,我们给每个Nginx的首页加上一些字,这样看到页面我们就知道访问的是哪个Nginx了:
在192.168.2.242上执行:
echo 192.168.2.242 >> /opt/nginx/html/index.html
在192.168.2.138上执行:
echo 192.168.2.138 >> /opt/nginx/html/index.html
然后分别安装Keepalived。为了方便,这里直接用yum命令安装
yum -y install keepalived
安装后的位置:/etc/keepalived/
,并且里面有个配置文件keepalived.conf
:
cd /etc/keepalived/
ll
-rw-r--r--. 1 root root 3598 10月 1 2020 keepalived.conf
2
3
后续我们配置主要就是修改这个文件。