实战| Nginx+keepalived 实现高可用集群
一个执着于技术的公众号
前言
今天通过两个实战案例,带大家理解Nginx+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
(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
结语
如果您觉得看完本文后有所收获, 还希望您随手帮忙点个在看 、或者分享转发。您的支持是我坚持分享的最大动力!
往期精彩
◆ LVM逻辑卷学习
实战| Nginx+keepalived 实现高可用集群的更多相关文章
- 集群相关、用keepalived配置高可用集群
1.集群相关 2.keepalived相关 3.用keepalived配置高可用集群 安装:yum install keepalived -y 高可用,主要是针对于服务器硬件或服务器上的应用服务而 ...
- Linux centosVMware 集群介绍、keepalived介绍、用keepalived配置高可用集群
一.集群介绍 根据功能划分为两大类:高可用和负载均衡 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 实现高可用的开源软件有:heartbeat. ...
- LVS+Keepalived实现高可用集群
LVS+Keepalived实现高可用集群来源: ChinaUnix博客 日期: 2009.07.21 14:49 (共有条评论) 我要评论 操作系统平台:CentOS5.2软件:LVS+keepal ...
- 集群介绍 keepalived介绍 用keepalived配置高可用集群
集群介绍 • 根据功能划分为两大类:高可用和负载均衡 • 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 • 实现高可用的开源软件有:heartb ...
- rabbitmq+ keepalived+haproxy高可用集群详细命令
公司要用rabbitmq研究了两周,特把 rabbitmq 高可用的研究成果备下 后续会更新封装的类库 安装erlang wget http://www.gelou.me/yum/erlang-18. ...
- rabbitmq+haproxy+keepalived实现高可用集群搭建
项目需要搭建rabbitmq的高可用集群,最近在学习搭建过程,在这里记录下可以跟大家一起互相交流(这里只是记录了学习之后自己的搭建过程,许多原理的东西没有细说). 搭建环境 CentOS7 64位 R ...
- keepalived+MySQL高可用集群
基于keepalived搭建MySQL的高可用集群 MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Clus ...
- CentOS7 haproxy+keepalived实现高可用集群搭建
一.搭建环境 CentOS7 64位 Keepalived 1.3.5 Haproxy 1.5.18 后端负载主机:192.168.166.21 192.168.166.22 两台节点上安装rabbi ...
- keepalived+lvs高可用集群
LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国 ...
随机推荐
- requests库获取图片响应流进行转发
遇到了一个问题,使用requests进行转发 requests响应流的时候,出现各种问题,问题的描述没有记录,不过Debug以下终于解决了问题.......下面简单的描述解决方案 response = ...
- JWT jti和kid属性的说明
jti chaim=== JWT ID " jti"(JWT ID)声明为JWT提供了唯一的标识符. 标识符值的分配方式必须确保将相同值偶然分配给不同数据对象的可能性可以忽略不计: ...
- @Autowired 注解有什么用?
@Autowired 可以更准确地控制应该在何处以及如何进行自动装配.此注解用于在 setter 方法,构造函数,具有任意名称或多个参数的属性或方法上自动装配bean.默认情况下,它是类型驱动的注入. ...
- Grep 命令有什么用? 如何忽略大小写? 如何查找不含 该串的行?
是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印 出来. grep [stringSTRING] filename grep [^string] filename
- 什么是通知Advice?
特定 JoinPoint 处的 Aspect 所采取的动作称为 Advice.Spring AOP 使用一个 Advice 作为拦截器,在 JoinPoint "周围"维护一系列的 ...
- 如何将springboot工程打包成war包并且启动
将项目打成war包,放入tomcat 的webapps目录下面,启动tomcat,即 可访问. 1.pom.xml配置修改 <packaging>jar</packaging> ...
- SpringCloudAlibaba 微服务讲解(四)Sentinel--服务容错(二)
4.7 Sentinel 规则 4.7.1 流控规则 流量控制,其原理是监控应用流量的QPS(每秒查询率)或并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的榴莲高峰冲垮,从而保障应用 ...
- 180度\360度sg90舵机的使用及代码程序
大部资料都是在网上找到网友大神所共享的,在网上找了几种舵机的,刚接触有点懵,之后找得多了就理解了,想要控制一个硬件就要先了解这个硬件.这里有介绍180度舵机和360度舵机的具体使用,有网上大神的程序, ...
- MATLAB quadprog函数求解二次规划问题
[例]求如下二次规划问题. [分析]首先应该把目标函数表示成如下矩阵形式: 这里要细说一下如何写成矩阵形式. 首先,向量x是很容易写出的,因为f(x)包含两个变量x1 ...
- 用纯RUST手撸一个开源流媒体服务(RTMP/HTTPFLV/HLS)XIU
作者工作目前在音视频流媒体行业,用了大概一年的业余时间学习Rust,并且实现了一个简单的音视频流媒体服务,虽然据说Rust已经连续多年被评为最受程序员喜欢的语言,但是在国内还是比较冷门,作者比较看好R ...