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
后续我们配置主要就是修改这个文件。