keepalived 解决入口机器(Nginx)挂掉的问题
问题来源
我们有很多 Tomcat 服务器交由 Nginx 管理,可 Nginx 所在的这台机器挂了怎么办?

你可能会想到再来 2 台 Nginx 机器,一台与之前的 Nginx 并行,一台来作为最前端的网关管理这两台机器。如下图,这样中间两台机器宕机任意一个也没事。可最前端的 Nginx 也有可能挂掉,这怎么办?还是没解决问题。

DNS 轮询解决
有人可能会想到 DNS 轮询的方式:相同的服务,不同的机器配置同一个域名,让 DNS 轮询。这样不仅挂掉一台机器不会导致整个系统宕机,还做了一个简单的负载均衡。

但这样也有缺点:
1、可靠性低
如果其中的一台服务器发生故障,DNS服务器是无法知晓的,仍旧会将访问分配到此服务器。那么所有恰好访问该服务器的请求将不会有所回应。即使从 DNS 中去掉该服务器的IP,但在 Internet 上,各地区电信、网通等宽带接入商将众多的DNS存放在缓存中,以节省访问时间,DNS 更新生效需要几个小时,甚至更久。
2、负载分配不均匀
DNS负载均衡采用的是简单的轮询算法,不能区分服务器的差异,不能反映服务器的当前运行状态,不能做到为性能较好的服务器多分配请求,甚至会出现客户请求集中在某一台服务器上的情况。
用户本地计算机会缓存已解析的域名到 IP 地址的映射。当多个用户计算机都缓存了域名到某个 IP 地址的映射时,而这些用户又继续访问该域名下的网页,这时就会导致不同Web服务器间的负载分配不均匀。
负载不均匀可能导致的后果有:某几台服务器负荷很低,而另几台服务器负载很高、处理缓慢。负荷高的服务器一旦宕机,那么由于第 1 点,整个系统可能会出大量用户访问不到的情况。
LVS 解决思路
上面的问题所在的根本,其实就是最前端的机器是物理机器,物理机器是可能用着用着就挂掉的。但如果最前端的机器是一个虚拟机器呢?

从上图可以看到,我们用一个虚拟 IP 作为用户访问的入口,所以它自身就不存在挂掉的问题了。除非它后面的两台 Nginx 同时挂掉。这样就解决了之前的问题。这就是 LVS 的思路。
LVS 是 Linux Virtual Server 的简写,意即 Linux 虚拟服务器,是一个虚拟的服务器集群系统。
它和 Nginx 没有直接的关系,它针对的是 Linux。
keepalived 配置 LVS 过程
主机配置
- 关闭 SELINUX
vim /etc/sysconfig/selinux

- 安装依赖
yum -y install libnl libnl-devel libnfnetlink-devel
你可能还需要的依赖,这些都是 Nginx 的依赖:
yum -y install autoconf automake make
yum -y install gcc gcc-c++
yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum install -y openssl openssl

最低0.47元/天 解锁文章
2042





