keepalived结合nginx实现nginx高可用的方法

1.简介

Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。Keepalived是VRRP的完美实现,因此在介绍keepalived之前,先介绍一下VRRP的原理。

1.VRRP 协议简介

在现实的网络环境中,两台需要通信的主机大多数情况下并没有直接的物理连接。对于这样的情况,它们之间路由怎样选择?主机如何选定到达目的主机的下一跳路由,这个问题通常的解决方法有二种:

  1. 在主机上使用动态路由协议(RIP、OSPF等)
  2. 在主机上配置静态路由

很明显,在主机上配置动态路由是非常不切实际的,因为管理、维护成本以及是否支持等诸多问题。配置静态路由就变得十分流行,但路由器(或者说默认网关default gateway)却经常成为单点故障。VRRP的目的就是为了解决静态路由单点故障问题,VRRP通过一竞选(election)协议来动态的将路由任务交给LAN中虚拟路由器中的某台VRRP路由器。

2.VRRP 工作机制

在一个VRRP虚拟路由器中,有多台物理的VRRP路由器,但是这多台的物理的机器并不能同时工作,而是由一台称为MASTER的负责路由工作,其它的都是BACKUP,MASTER并非一成不变,VRRP让每个VRRP路由器参与竞选,最终获胜的就是MASTER。MASTER拥有一些特权,比如,拥有虚拟路由器的IP地址,我们的主机就是用这个IP地址作为静态路由的。拥有特权的MASTER要负责转发发送给网关地址的包和响应ARP请求。

VRRP通过竞选协议来实现虚拟路由器的功能,所有的协议报文都是通过IP多播(multicast)包(多播地址224.0.0.18)形式发送的。虚拟路由器由VRID(范围0-255)和一组IP地址组成,对外表现为一个周知的MAC地址。所以,在一个虚拟路由 器中,不管谁是MASTER,对外都是相同的MAC和IP(称之为VIP)。客户端主机并不需要因为MASTER的改变而修改自己的路由配置,对客户端来说,这种主从的切换是透明的。

在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP通告信息(VRRPAdvertisement message),BACKUP不会抢占MASTER,除非它的优先级(priority)更高。当MASTER不可用时(BACKUP收不到通告信息), 多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性。由于安全性考虑,VRRP包使用了加密协议进行加密。

3.VRRP 工作流程

(1).初始化:

路由器启动时,如果路由器的优先级是255(最高优先级,路由器拥有路由器地址),要发送VRRP通告信息,并发送广播ARP信息通告路由器IP地址对应的MAC地址为路由虚拟MAC,设置通告信息定时器准备定时发送VRRP通告信息,转为MASTER状态;否则进入BACKUP状态,设置定时器检查定时检查是否收到MASTER的通告信息。

(2).Master

  1. 设置定时通告定时器;
  2. 用VRRP虚拟MAC地址响应路由器IP地址的ARP请求;
  3. 转发目的MAC是VRRP虚拟MAC的数据包;
  4. 如果是虚拟路由器IP的拥有者,将接受目的地址是虚拟路由器IP的数据包,否则丢弃;
  5. 当收到shutdown的事件时删除定时通告定时器,发送优先权级为0的通告包,转初始化状态;
  6. 如果定时通告定时器超时时,发送VRRP通告信息;
  7. 收到VRRP通告信息时,如果优先权为0,发送VRRP通告信息;否则判断数据的优先级是否高于本机,或相等而且实际IP地址大于本地实际IP,设置定时通告定时器,复位主机超时定时器,转BACKUP状态;否则的话,丢弃该通告包;

(3).Backup

  1. 设置主机超时定时器;
  2. 不能响应针对虚拟路由器IP的ARP请求信息;
  3. 丢弃所有目的MAC地址是虚拟路由器MAC地址的数据包;
  4. 不接受目的是虚拟路由器IP的所有数据包;
  5. 当收到shutdown的事件时删除主机超时定时器,转初始化状态;
  6. 主机超时定时器超时的时候,发送VRRP通告信息,广播ARP地址信息,转MASTER状态;
  7. 收到VRRP通告信息时,如果优先权为0,表示进入MASTER选举;否则判断数据的优先级是否高于本机,如果高的话承认MASTER有效,复位主机超时定时器;否则的话,丢弃该通告包;

4.ARP查询处理

当内部主机通过ARP查询虚拟路由器IP地址对应的MAC地址时,MASTER路由器回复的MAC地址为虚拟的VRRP的MAC地址,而不是实际网卡的 MAC地址,这样在路由器切换时让内网机器觉察不到;而在路由器重新启动时,不能主动发送本机网卡的实际MAC地址。如果虚拟路由器开启的ARP代理 (proxy_arp)功能,代理的ARP回应也回应VRRP虚拟MAC地址。

2.搭建环境

1.服务器1:10.63.0.154  安装keeplived并设置priority 优先值为100
2.服务器2:10.63.0.155  安装keeplived并设置priority 优先值为98
3.设置两台服务器对应的虚拟ip为:10.63.0.158

3.安装keepalived主节点

本次安装keepalived采用yum的模式,在服务器1上安装,主要操作步骤如下:

1.安装ipvsadm,指令:yum install ipvsadm,安装完成后,可通过指令ipvsadm –v查看版本号。
2.安装keepalived,指令:yum install keepalived,安装完成后,可通过指令Keepalived –v查看版本号。
3.创建/usr/local/nginx/nginx_check.sh脚本。脚本内容如下:

#!/bin/bash
#判断nginx服务是否启动,如果不存在,调用nginx启用命令,并停止2秒,若#启动失败,杀掉keepalived
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
 /usr/sbin/nginx
 sleep 2
 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
  killall keepalived
 fi
fi

设置nginx_check.sh权限,设置命令为:chmod  777   /usr/local/nginx/nginx_check.sh

4.配置keepalived节点信息,默认配置文件为/etc/keepalived/keepalived.conf。keepalived.conf配置文件如下:

! Configuration File for keepalived

global_defs {
 router_id nginx_master154
}

vrrp_script chk_nginx {
 script "/usr/local/nginx/nginx_check.sh"
 interval 2
 weight 20
}
vrrp_instance VI_1 {
 state MASTER
 interface eth0
 virtual_router_id 154
 mcast_src_ip 10.63.0.154
 priority 100
 nopreempt
 advert_int 1
 authentication {
  auth_type PASS
  auth_pass 1111
 }
 track_script {
  chk_nginx
 }
 virtual_ipaddress {
  10.63.0.158
 }
}
}

配置文件关键参数说明:

  1. router_id   //定义节点名称
  2. vrrp_script chk_nginx {    script "/etc/keepalived/nginx_check.sh"     interval 2     weight -20  }    //每隔2秒中去执行/etc/keepalived/nginx_check.sh脚本一次,这项检查从开始便一直进行,interval表示间隔时间,weight -20的意思是,脚本执行当判断异常时,把10.63.0.154这个节点的优先级降低20。
  3. state MASTER   //表示该节点角色定义为MASTER
  4. virtual_router_id 154  //定义虚拟的节点标识
  5. interface eth0   //定义网卡名称 查看服务器网卡名称可通过指令:ifconfig或者ip  a,如图:

以上配置文件完成后,启动nginx,启动keepalived,可测试nginx是否可被虚拟ip地址访问。启动keepalived指令:systemctl start keepalived.service,启动后可通过指令 systemctl status keepalived.service查看状态。利用虚拟ip访问nginx主界面截图如下:

3.安装keepalived备用节点

在服务器2上面安装keepalived的方法和服务器1完全一样,在keepalived.conf配置文件中只需修改三个地方:

  1. interface eth0   //定义网卡名称 查看服务器2的网卡 如网卡名称为 eno24 ,则定义为:interface eno24
  2. priority  //优先值设置为98
  3. mcast_src_ip 10.63.0.155

两台服务器上面的keepalived安装成功后,通过虚拟ip10.63.0.158调用测试,发现始终是主节点的页面,不会调用备用节点的页面。设置把服务器1上面的keepalived关闭后,再次调用,会出现备用节点的主界面,如下图:

4.Linux服务管理工具systemctl

Linux中,有service和chkconfig两个命令管理服务。systemctl 是管理服务的主要工具, 它整合了chkconfig 与 service功能于一体。(可以通过该命令管理yum安装软件,同时设置是否开机启动)

  1. systemctl is-enabled servicename.service #查询服务是否开机启动
  2. systemctl enable *.service #开机运行服务
  3. systemctl disable *.service #取消开机运行
  4. systemctl start *.service #启动服务
  5. systemctl stop *.service #停止服务
  6. systemctl restart *.service #重启服务
  7. systemctl reload *.service #重新加载服务配置文件
  8. systemctl status *.service #查询服务运行状态
  9. systemctl --failed #显示启动失败的服务

注:*代表某个服务的名字,如http的服务名为httpd

例如在CentOS 7 上安装http

[root@CentOS7 ~]# yum -y install httpd

启动服务(等同于service httpd start)  systemctl start httpd.service
停止服务(等同于service httpd stop)  systemctl stop httpd.service
重启服务(等同于service httpd restart) systemctl restart httpd.service
查看服务是否运行(等同于service httpd status) systemctl status httpd.service 开机自启动服务(等同于chkconfig httpd on)  systemctl enable httpd.service
开机时禁用服务(等同于chkconfig httpd on) systemctl disable httpd.service

ps -ef | grep nginx #查看服务进程

#非systemctl配置开机启动:chmod +x /etc/rc.d/rc.local
#打开rc.localvi /etc/rc.local
#加入启动脚本其中路径一定要用全路径如:/usr/local/nginx/sbin/nginx

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解Keepalived+Nginx实现高可用(HA)

    keepalived的HA分为抢占模式和非抢占模式,抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来.非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP.下面分别介绍CentOS7下抢占模式和非抢占模式的配置方式: 1.方案规划 VIP IP 主机名 Nginx端口 192.168.1.210 192.168.1.201 nginx-01 80 192.168.1.210 192.168.1.202 nginx-02 80 两台服务器的VIP

  • nginx+keepalived 高可用主从配置详解

    本文介绍了nginx+keepalived 高可用主从配置详解,分享给大家,具体如下: 一.系统环境及软件版本 CentOS 6.6 x64 keepalived-1.2.18.tar.gz nginx-1.6.2.tar.gz 主服务器:192.168.38.64 从服务器:192.168.38.66 VIP :192.168.38.100 二.nginx安装 (主从安装一致) 1.安装依赖环境 复制代码 代码如下: yum install gcc gcc-c++ make automake

  • keepalived+nginx高可用实现方法示例

    1.keepalived介绍 keepalived最初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了实现高可用的VRRP功能.keepalived除了能够管理LVS软件外,还能支持其他服务的高可用解决方案. keepalived通过VRRP协议实现高可用功能的.VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议.VRRP出现的目的就是为了解决静态路由单点故障问题,它能保证当个别节点宕机时,整个网络可以不

  • keepalived实现nginx高可用

    keepalived直译就是保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生,keepalived实现的基础是vrrp,至于vrrp是什么请直接看这里vrrp,下面我们直接看应用吧. keepalived使用 为了方便使用,写了一个基于ubuntu 16.04 server 的一键配置脚本,配置使用相关就在脚本里见吧 #!/bin/bash # nginx+keepalived 高可用一键脚本for

  • Keepalived+Nginx+Tomcat 实现高可用Web集群的示例代码

    Keepalived+Nginx+Tomcat 实现高可用Web集群 一.Nginx的安装过程 1.下载Nginx安装包,安装依赖环境包 (1)安装 C++编译环境 yum -y install gcc #C++ (2)安装pcre yum -y install pcre-devel (3)安装zlib yum -y install zlib-devel (4)安装Nginx 定位到nginx 解压文件位置,执行编译安装命令 [root@localhost nginx-1.12.2]# pwd

  • Keepalived实现Nginx负载均衡高可用的示例代码

    第一章:keepalived介绍 VRRP协议 目的就是为了解决静态路由单点故障问题的 第二章: keepalived工作原理 2.1 作为系统网络服务的高可用功能(failover) keepalived高可用功能实现的基本原理为: 两台主机同时安装好keepalived软件并启动服务,开始正常工作时 角色为Master的主机获得所有资源并对用户提供服务 角色为Backup的主机作为Master主机的热备; 当角色为Master的主机失效或出现故障时 角色为Backup的主机将自动接管Mast

  • keepalived结合nginx实现nginx高可用的方法

    1.简介 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障.一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性.Keepalived是VRRP的完美实现,因此在介绍keepalived之前,先介绍

  • xxl-job 带参数执行和高可用部署方法

    目录 1. 单参数 2. 多参数 3. 多节点部署 xxl-job 获取参数: String param = XxlJobHelper.getJobParam(); 1. 单参数 @XxlJob("TestOneHandler") public ReturnT<String> jobDemo(String s) throws Exception { String param = XxlJobHelper.getJobParam(); System.out.println(&

  • nginx结合keepalived实现高可用的完整步骤

    前言 为了满足系统的高可用,一般都需要搭建集群.当主机挂掉的时候,我们的系统还可以继续提供服务.当我们使用nginx作为反向代理和动静分离服务器的时候,也是如此.实现系统的高可用性,是我们程序员关注的重点.本文介绍了nginx结合keepalived实现主从模式搭建高可用集群. 前提知识 本文不作过多的nginx相关配置介绍,默认读者已经了解nginx的相关知识. keepalived的介绍 Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepali

  • 生产环境之Nginx高可用方案实现过程解析

    准备工作: 192.168.16.128 192.168.16.129 两台虚拟机.安装好Nginx 安装Nginx 更新yum源文件: rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7

  • nginx搭建高可用集群的实现方法

    目录 Keepalived+Nginx 高可用集群(主从模式) Keepalived+Nginx 高可用集群(主从模式) 集群架构图 1.准备两台装有Nginx虚拟机 2.都需安装Keepalived yum install keepalived -y 查看是否安装成功 rpm -q -a keepalived 安装之后,在 etc 里面生成目录 keepalived,有文件 keepalived.conf 3.完成高可用配置(主从配置) 修改/etc/keepalived/keepalivec

  • keepalived双机热备nginx的配置方法

    nginx目前是我最常用的反向代理服务,线上环境为了能更好的应对突发情况,一般会使用keepalived双机热备nginx或者使用docker跑nginx集群,keepalived是比较传统的方式,虽然用docker跑nginx集群更方便,但传统的方式总是有他的可取之处,并且多学一些东西也很好.以后也会写如何使用docker跑nginx集群. 环境准备: 2台centos: 192.168.0.105 和192.168.0.118, 虚拟IP(VIP)为192.168.0.119 配置keepa

  • Keepalived+HAProxy高可用集群K8S实现

    目录 本文采用Keepalived+HAProxy的方式构建高可用集群.当你如果你有硬件负载均衡设备当然更好了. 准备环境: 主机 ip k8s-master01 192.168.10.4 k8s-master02 192.168.10.5 k8s-master03 192.168.10.6 VIP 192.168.10.150 架构图 注意:master集群采用奇数台数,3.5.7… 所有节点都进行hosts文件解析 tail -3 /etc/hosts 192.168.10.4 k8s-ma

随机推荐