一个执着于技术的公众号

前言

今天通过两个实战案例,带大家理解Nginx+keepalived 如何实现高可用集群,在学习新知识之前您可以选择性复习之前的知识点:

给小白的 Nginx 10分钟入门指南

Nginx编译安装及常用命令

Nginx 配置文件详解

一文带你读懂Nginx反向代理

一文彻底读懂nginx中的location指令

Nginx负载均衡原理及配置实例

Nginx为什么快到根本停不下来?

Keepalived入门学习

Keepalived高可用服务配置实例

Nginx+Keepalived 高可用集群(主从模式)

集群架构图


注意:Keepalived服务器同样是nginx负载均衡器。

1、准备四台机器

本实验系统均使用Centos 7.5,在所有节点进行以下操作:

// 查看操作系统
[root@LB-01 ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core) //关闭并禁用防火墙
[root@LB-01 ~]# systemctl stop firewalld
[root@LB-01 ~]# systemctl disable firewalld //关闭selinux
[root@LB-01 ~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/sysconfig/selinux
[root@LB-01 ~]# setenforce 0 //安装nginx
yum -y install nginx
若提示,无安装包,则需要安装epel扩展源:
yum -y install epel-release

2、配置后端web服务器

2.1)修改web01节点网站根目录默认文件

[root@web01 ~]# echo "<h1>web01 192.168.1.34</h1>" > /usr/share/nginx/html/index.html

2.2)修改web02节点网站根目录默认文件

[root@web02 ~]# echo "<h1>web01 192.168.1.35</h1>" > /usr/share/nginx/html/index.html

通过nginx主配置文件,可以看出nginx网站根目录文件默认是:/usr/share/nginx,如下:

2.3)启动nginx服务

//web01
[root@web01 ~]# systemctl start nginx //web02
[root@web02 ~]# systemctl start nginx

2.4)验证


主机web01和web02已配置成web服务器

3、配置LB服务器

LB服务器需同时部署nginx和Keepalived服务,以下操作均在两台LB节点执行:

3.1)配置nginx反向代理服务

  编辑nginx主配置文件:`vi /etc/nginx/nginx.conf`

启动nginx服务;验证效果:

访问LB01:

访问LB02:


如图所示,LB01和LB02均可轮询访问后端web节点,即表示nginx LB集群搭建成功。

3.2)配置Keepalived服务

(1)安装Keepalived

yum -y install keepalived

(2)配置Keepalived服务

这里直接提供LB01与LB02两者配置文件差异对比,方便读者阅读:

vim /etc/keepalived/keepalived.con


左:LB01 右:LB02

(3)谁是主Keepalived?

通过上图得知,LB01优先级高于LB02,因此VIP绑定在LB01上:

[root@LB-01 ~]# ip a | grep 192.168.1.110
inet 192.168.1.110/24 scope global secondary eth0:1

4、域名解析

由于不是真实环境,域名使用www.test.com用作测试,所以www.test.com的解析只能在客户机hosts文件设置。具体步骤如下:

打开:

C:\Windows\System32\drivers\etc\hosts

在末尾添加:

192.168.1.110 www.test.com

注意:这里的IP指的是浮动IP,即通过客户端通过VIP访问web业务

5、测试验证



关闭LB01节点的keepalived服务。再次访问:

发现依然可以通过域名进行访问,只是此时VIP已绑定在LB02上,如下所示:

[root@LB-02 ~]# ip a | grep 192.168.1.110
inet 192.168.1.110/24 scope global secondary eth0:1
[root@LB-02 ~]#

到此,Nginx+Keepalived 高可用集群(主从)就搭建完成了。

Nginx+Keepalived 高可用集群(双主模式)

将keepalived做成双主模式,其实很简单,就是再配置一段新的vrrp_instance(实例)规则。

集群架构图:


说明:还按照上面的环境继续做实验,只是修改LB节点上面的keepalived服务的配置文件即可。

此时LB-01节点既为Keepalived的主节点也为备节点,LB-02节点同样既为Keepalived的主节点也为备节点。

LB-01节点默认的主节点VIP(192.168.1.110),LB-02节点默认的主节点VIP(192.168.1.210)

1、配置 LB-01 节点

增加一段vrrp_instance VI_2实例规则:

vim /etc/keepalived/keepalived.conf

2、配置 LB02 节点

vim /etc/keepalived/keepalived.conf


3、重启Keepalived服务

//LB-01
[root@LB-01 ~]# systemctl restart keepalived //LB-02
[root@LB-02 ~]# systemctl restart keepalived

4、查看VIP绑定情况

//LB-01
[root@LB-01 ~]# ip a
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq
inet 192.168.1.31/24 brd 10.43.1.255 scope global eth0
inet 192.168.1.110/24 scope global secondary eth0:1 //LB-02
[root@LB-02 ~]# ip a
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq
inet 192.168.1.32/24 brd 10.43.1.255 scope global eth0
inet 192.168.1.210/24 scope global secondary eth0:2

5、高可靠验证

 停止LB-01节点的keepalived再次测试

此时VIP都绑定在LB-02上
[root@LB-02 ~]# ip a
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq
inet 192.168.1.32/24 brd 10.43.1.255 scope global eth0
inet 192.168.1.110/24 scope global secondary eth0:1
inet 192.168.1.210/24 scope global secondary eth0:2

测试可以发现我们访问keepalived中配置的两个VIP都可以正常调度,当我们停止任意一台keepalived节点,同样还是正常访问;到此,nginx+keepalived+高可用集群(双主模式)就搭建完成了。

编写Nginx Web服务的守护脚本

以上实验测试有一个问题就是,我们是用Nginx做负载均衡分发请求的数据包的。如果主节点的Keepalived服务正常运行,而Nginx运行异常,那么将会出现Nginx负载均衡服务失灵,无法切换到Nginx负载均衡器02上,后端的Web服务器无法收到请求。所以,我们应该要检测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

结语

如果您觉得看完本文后有所收获, 还希望您随手帮忙点个在看 、或者分享转发。您的支持是我坚持分享的最大动力!

往期精彩

◆  必看 | Linux系列学习书籍免费送

◆  利用expect批量修改Linux服务器密码

◆  Linux运维工程师面试问答录

◆  LVM逻辑卷学习

◆  Linux网络重点知识总结性梳理

◆  抓包工具tcpdump用法说明

◆  一文带你速懂虚拟化KVM和XEN

◆  实战 | Hadoo大数据集群搭建

◆  运维工程师心法:6大技能让你告别背锅

◆  亿级web系统负载均衡几种实现方式

实战| Nginx+keepalived 实现高可用集群的更多相关文章

  1. 集群相关、用keepalived配置高可用集群

    1.集群相关 2.keepalived相关 3.用keepalived配置高可用集群 安装:yum install keepalived -y   高可用,主要是针对于服务器硬件或服务器上的应用服务而 ...

  2. Linux centosVMware 集群介绍、keepalived介绍、用keepalived配置高可用集群

    一.集群介绍 根据功能划分为两大类:高可用和负载均衡 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 实现高可用的开源软件有:heartbeat. ...

  3. LVS+Keepalived实现高可用集群

    LVS+Keepalived实现高可用集群来源: ChinaUnix博客 日期: 2009.07.21 14:49 (共有条评论) 我要评论 操作系统平台:CentOS5.2软件:LVS+keepal ...

  4. 集群介绍 keepalived介绍 用keepalived配置高可用集群

    集群介绍 • 根据功能划分为两大类:高可用和负载均衡 • 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 • 实现高可用的开源软件有:heartb ...

  5. rabbitmq+ keepalived+haproxy高可用集群详细命令

    公司要用rabbitmq研究了两周,特把 rabbitmq 高可用的研究成果备下 后续会更新封装的类库 安装erlang wget http://www.gelou.me/yum/erlang-18. ...

  6. rabbitmq+haproxy+keepalived实现高可用集群搭建

    项目需要搭建rabbitmq的高可用集群,最近在学习搭建过程,在这里记录下可以跟大家一起互相交流(这里只是记录了学习之后自己的搭建过程,许多原理的东西没有细说). 搭建环境 CentOS7 64位 R ...

  7. keepalived+MySQL高可用集群

    基于keepalived搭建MySQL的高可用集群   MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Clus ...

  8. CentOS7 haproxy+keepalived实现高可用集群搭建

    一.搭建环境 CentOS7 64位 Keepalived 1.3.5 Haproxy 1.5.18 后端负载主机:192.168.166.21 192.168.166.22 两台节点上安装rabbi ...

  9. keepalived+lvs高可用集群

    LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国 ...

随机推荐

  1. java-关于getResourceAsStream

    1111class.getClassLoader().getResourceAsStream InputStream ips = testResource.class.getClassLoader() ...

  2. 在并发情况下,Elasticsearch 如果保证读写一致?

    1.可以通过版本号使用乐观并发控制,以确保新版本不会被旧版本覆盖,由应用 层来处理具体的冲突: 2.另外对于写操作,一致性级别支持 quorum/one/all,默认为 quorum,即只 有当大多数 ...

  3. 解释 JDBC 抽象和 DAO 模块?

    通过使用 JDBC 抽象和 DAO 模块,保证数据库代码的简洁,并能避免数据库资源 错误关闭导致的问题,它在各种不同的数据库的错误信息之上,提供了一个统一 的异常访问层.它还利用 Spring 的 A ...

  4. 学习openstack(一)

    一.云计算 云计算特点:必须通过网络使用:弹性计算(按需付费):对用户是透明的(用户不考虑后端的具体实现): 云计算分类:私有云.公有云(amazon是老大.aliyun.tingyun.tencen ...

  5. CSS学习(二):背景图片如何定位?

    我们都知道background-position属性用来指定背景图片应该出现的位置,可以使用关键字.绝对值和相对值进行指定.在CSS Sprites中,这个属性使用比较频繁,使用过程中,我常混淆,经常 ...

  6. [翻译]Service workers:PWA背后的英雄

    原文地址:https://medium.freecodecamp.org/service-workers-the-little-heroes-behind-progressive-web-apps-4 ...

  7. ES6-11学习笔记--Symbol

    Symbol:一种新的原始数据类型   声明方式: let s1 = Symbol() let s2 = Symbol() console.log(s1); // Symbol() console.l ...

  8. C#内置委托类型Func和Action对比及用法

    C#的内置委托类型 Func Action 返回值 有(只有一个Tresult) 无 重载 17个(0参-16参) 17个(0参-16参) 泛型 支持 支持 系统内置 是 是 是否需要声明 否 否 c ...

  9. python-图的字典表示

    图的字典表示.输入多行字符串,每行表示一个顶点和该顶点相连的边及长度,输出顶点数,边数,边的总长度.比如上图0点表示:{'O':{'A':2,'B':5,'C':4}}.用eval函数处理输入,eva ...

  10. Hadoop本地编写的jar包放到集群执行时报错处理

    错误描述: 020-03-24 22:45:23,204 WARN org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor ...