Keepalived

3.1Keepalived介绍

Keepalived 是一种高性能的服务器高可用或热备解决方案,Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 web 前端服务的高可用。

Keepalived 以 VRRP 协议为实现基础,用 VRRP 协议来实现高可用性(HA)。VRRP(Virtual Router Redundancy Protocol)协议是用于实现路由器冗余的协议,VRRP 协议将两台或多台路由器设备虚拟成一个 设备,对外提供虚拟路由器 IP(一个或多个),而在路由器组内部,如果实际拥有这个对外 IP 的路由器工作正常的话就是 MASTER, 或者是通过算法选举产生, MASTER 实现针对虚拟路由器 IP 的各种网络功能, 如 ARP 请求,ICMP,以及数据的转发等;其他设备不拥有该虚拟 IP,状态是 BACKUP,除了接收 MASTER 的 VRRP 状态通告信息外,不执行对外的网络功能。当主机失效时,BACKUP 将接管原先 MASTER 的网络功能。 VRRP 协议使用多播数据来传输 VRRP 数据, VRRP 数据使用特殊的虚拟源 MAC 地址发送数据而不是自身 网卡的 MAC 地址,VRRP 运行时只有 MASTER 路由器定时发送 VRRP 通告信息,表示 MASTER 工作正常以及虚 拟路由器 IP(组),BACKUP 只接收 VRRP 数据,不发送数据,如果一定时间内没有接收到 MASTER 的通告信 息,各 BACKUP 将宣告自己成为 MASTER,发送通告信息,重新进行 MASTER 选举状态。

3.2keepalived安装与配置

3.2.1keepalived安装

实验环境:

[root@localhost ~]# cat /etc/redhat-release

CentOS Linux release 7.6.1810 (Core)

[root@localhost ~]# keepalived -v

Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2

开始安装Keepalived:

[root@localhost ~]# yum install -y keepalived       #一条命令搞定

配置keepalived:

[root@localhost ~]# cp /etc/keepalived/keepalived.conf{,.bak}           #修改之前先备份

[root@localhost ~]# vim /etc/keepalived/keepalived.conf
 ! Configuration File for keepalived
 
 global_defs {                        #全局定义
  notification_email {               #邮件通知在实验中没有涉及,所以没有配置,如果需要,需要开启sendmail服务,或者其他邮件服务
  sendmail@example.com      
  receive@example.com
 }
  notification_email_from receive@example.com
  smtp_server mail.example.com
  smtp_connect_timeout 30
  router_id KA_NG_01            # 节点标识,设为主机名即可  
 }
 
 vrrp_script chk_nginx {               #检测nginx的运行状态
  script "/etc/keepalived/nginx_check.sh"            #脚本路径
  interval 2             #探测间隔时间
  weight -20            #如果条件满足,权重-20
 }

vrrp_instance VI_1 {                 #定义虚拟路由    VI_1为标识符,也可自定义           
  state MASTER                          #主节点标识,备节点为BACKUP
  interface eth0                            #绑定VIP接口,与本机IP地址接口相同
  virtual_router_id 30                   #虚拟路由ID标识号,可自定义,但是主备必须一致,也使用IP最后一段,以相同的VRID为一个组,其决定多播的MAC地址
  mcast_scr_ip 192.168.30.130      #本机IP地址
  priority 100                 #节点优先级,范围0~254,MASTER要比BACKUP高
  nopreempt                #优先级的高级设置,nopreempt解决异常恢复后再次抢占的问题
  advert_int 1                     #组播信息发送间隔,主备必须一致,默认1s
  authentication {                            #验证信息,主备需一致
  auth_type PASS
  auth_pass 1111                            #生产环境下,按实际情况来定
 }
  track_script {                     #将track_script块加入instance配置块
  chk_nginx                                     #执行Nginx检测
 }
 virtual_ipaddress {                        #虚拟IP主备需一致
  192.168.30.120                            #虚拟IP可定义多个
 }
}

编写 Nginx 状态检测脚本 /etc/keepalived/nginx_check.sh (已在 keepalived.conf 中配置)脚本要求:如果 nginx 停止运行,尝试启动,如果无法启动则杀死本机的 keepalived 进程, keepalied将虚拟 ip 绑定到 BACKUP 机器上。 内容如下:

[root@localhost ~]# vim /etc/keepalived/nginx_check.sh
 #!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
 /etc/init.d/nginx start
 sleep 2
 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
 killall keepalived
fi
fi

保存后给脚本赋执行权限:
[root@localhost ~]# chmod +x !$

chmod +x /etc/keepalived/nginx_check.sh

3.2.2keepalived配置文件详解

keepalived配置文件结构如下:

全局定义(global definition)

global_defs {

notification_email {

acassen@firewall.loc

failover@firewall.loc

sysadmin@firewall.loc

}

notification_email_from Alexandre.Cassen@firewall.loc

smtp_server 192.168.200.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

notification_email: 表示keepalived在发生诸如切换操作时需要发送email通知以及email发送给哪些邮件地址邮件地址可以多个每行一个

notification_email_from admin@example.com: 表示发送通知邮件时邮件源地址是谁

smtp_server 127.0.0.1: 表示发送email时使用的smtp服务器地址这里可以用本地的sendmail来实现

smtp_connect_timeout 30: 连接smtp连接超时时间

router_id node1: 机器标识,fa

外部脚本

vrrp_script check_running {

script "/usr/local/bin/check_running"

interval 10     #脚本执行间隔

weight 10       #脚本结果导致的优先级变更10表示优先级+10-10则表示优先级-10

}

VRRP实例(instance)配置范例

state: state指定instance(Initial)的初始状态就是说在配置好后这台 服务器的初始状态就是这里指定的但这里指定的不算还是得要通过竞选通过优先级来确定里如果这里设置为master但如若他的优先级不及另外一台 那么这台在发送通告时会发送自己的优先级另外一台发现优先级不如自己的高那么他会就回抢占为master;

interface: 实例绑定的网卡因为在配置虚拟VIP的时候必须是在已有的网卡上添加的;

dont track primary: 忽略VRRP的interface错误;

track interface: 跟踪接口设置额外的监控里面任意一块网卡出现问题都会进入故障(FAULT)状态例如用nginx做均衡器的时候内网必须正常工作如果内网出问题了这个均衡器也就无法运作了所以必须对内外网同时做健康检查;

mcast src ip: 发送多播数据包时的源IP地址这里注意了这里实际上就是在那个地址上发送VRRP通告这个非常重要一定要选择稳定的网卡端口来发送这里相当于heartbeat的心跳端口如果没有设置那么就用默认的绑定的网卡的IP也就是interface指定的IP地址;

garp master delay: 在切换到master状态后延迟进行免费的ARP(gratuitous ARP)请求,默认5s;

virtual router id: 这里设置VRID这里非常重要相同的VRID为一个组他将决定多播的MAC地址;

priority 100: 设置本节点的优先级优先级高的为master;

advert int: 设置MASTER与BACKUP负载均衡之间同步即主备间通告时间检查的时间间隔,单位为秒,默认1s;

virtual ipaddress: 这里设置的就是VIP也就是虚拟IP地址他随着state的变化而增加删除当state为master的时候就添加当state为backup的时候删除这里主要是有优先级来决定的和state设置的值没有多大关系这里可以设置多个IP地址。

3.3Keepalived+Nginx 的高可用测试

主机名

IP

VIP

Nginx:port

KeepAlived主备

Localhost

192.168.44.128

192.168.30.120

5000

MASTER

Localhost1

192.168.44.129

192.168.30.120

5000

BACKUP

首先我们同时启动192.168.44.128和192.168.44.129上的Nginx和Keepalived,

[root@localhost ~]# systemctl start nginx.service

[root@localhost ~]# systemctl start keepalived.service

[root@localhost1 ~]# systemctl start nginx.service

[root@localhost1 ~]# systemctl start keepalived.service

通过VIP(192.168.44.120)来访问Nginx,如下:

可以看出访问虚拟IP时我们优先访问的是MASTER的IP:192.168.44.128,此时我们停止IP为192.168.44.128服务器的Ngnix和Keepalived模拟宕机状态:

[root@localhost ~]# systemctl stop nginx.service

[root@localhost ~]# systemctl stop keepalived.service

此时我们再次用虚拟IP:192.168.44.120访问:

访问的是BACKUP服务器,也就是192.168.44.129,此时我们再将MASTER服务器的nginx和keepalived服务启动,会再次访问到主服务器:

[root@localhost ~]# systemctl start nginx.service

[root@localhost ~]# systemctl start keepalived.service

采用Keepalived+Nginx解决方案实现高可用的API网关(下)的更多相关文章

  1. Keepalived+Nginx解决方案实现高可用的API网关(nginx)

    一. 采用Keepalived+Nginx解决方案实现高可用的API网关. 2.1 Nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP ...

  2. 搭建 Keepalived + Nginx + Tomcat 的高可用负载均衡架构

    1 概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最简单的部署方式,但是随着业务的不断扩大,系统的访问量逐渐的上升,单机部署的模式已无法承载现有的业务量 ...

  3. Keepalived + Nginx + Tomcat 的高可用负载均衡架构搭建

    Keepalived + Nginx + Tomcat 的高可用负载均衡架构搭建 Nginx 是一个高性能的 HTTP反向代理服务器 Keepalived 是一个基于VRRP协议来实现的LVS服务高可 ...

  4. 搭建Keepalived + Nginx + Tomcat的高可用负载均衡架构

    1 概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最简单的部署方式,但是随着业务的不断扩大,系统的访问量逐渐的上升,单机部署的模式已无法承载现有的业务量 ...

  5. Keepalived+Nginx+Tomcat 实现高可用Web集群

    https://www.jianshu.com/p/bc34f9101c5e Keepalived+Nginx+Tomcat 实现高可用Web集群 0.3912018.01.08 20:28:59字数 ...

  6. keepalived+nginx实现niginx高可用,宕机自动重启

    nginx作为http服务器,在集群中 用于接受客户单发送过来的请求,并且根据配置的策略将请求 转发给具体的哪台服务器 如果在nginx服务器使用轮询策略处理客户端的请求,出现了tomcat 宕机的情 ...

  7. keepalived+nginx实现HA高可用的web负载均衡

    Keepalived 是一种高性能的服务器高可用或热备解决方案, Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 web 前端服务的高可用.Keepalived ...

  8. Keepalived+Nginx+Tomcat配置高可用负载均衡系统示例

    前言 此示例为keepalived+nginx+tomcat的基础配置示例,某些特定配置此例中不会出现,在示例中会用到三个虚拟机:两个纯命令行用于模拟服务端配置,一个带桌面环境的用于模拟客户端访问,这 ...

  9. Keepalived+Nginx搭建主从高可用并带nginx检测

    应用环境:部分时候,WEB访问量一般,或者测试使用,利用Keepalived给Nginx做高可用即可满足要求. 测试环境:   搭建步骤: 1. 安装软件 在Nginx-A和Nginx-B上: ~]# ...

随机推荐

  1. N个数求和(PTA)

    这题多输出了一个空格,卡了半天... leetcode刷多了,后遗症 这题可以用scanf("%lld/%lld"),直接读入,不过我用了stoll,也就是stoi,string ...

  2. hibernate并发时的事务处理

    两个方法 方法一: public void saveTest() { try { System.out.println("saveTest start"); User user = ...

  3. ztree-可拖拽可编辑的树

    <!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - addNodes / editName / rem ...

  4. BootStrap jQuery 在线cdn

    Bootstrap 3.3.0 js 文件 <script src="http://cdn.bootcss.com/bootstrap/3.3.0/js/bootstrap.min.j ...

  5. C语言:把分数最低的学生数据放入数组b所指的数组中,-从键盘输入若干字符串,写入文件myfile4中,用-1作字符输入结束的标志,

    //学生记录由学号和成绩组成,N名学生的数据已放入主函数中的结构体数组中,fun函数:把分数最低的学生数据放入数组b所指的数组中,分数最低的学生可能不止一个.人数返回. #include <st ...

  6. Steam 游戏 《Sudoku Universe(数独宇宙)》、《Sudoku Killer(数独杀手)》、《Sudoku Jigsaw(数独拼图)》数字位置解析 ---------C# 数独程序解析(2020年寒假小目标11)

    日期:2020.02.11 博客期:151 星期二 今天,准备肝一个 C# 的数独读写工具(汇编语言也在努力学习命令方法中...),这三个游戏我早就买下了,一直放在 Steam 库里积灰,看着它的成就 ...

  7. Centos 安装 mysql 5.7

    下载mysql yum包 wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm 安转软件源 xxx.rpm是刚刚 ...

  8. pip配置永久国内源

    1.windows配置方式: (1)打开文件资源管理器 --------在地址栏中输入 %appdata% (2)手动创建一个文件夹叫做 pip (3)在pip的文件夹里面新建一个文件 pip.ini ...

  9. linux克隆多台虚拟机后网络无法识别更无法连接上网的解决方法

    本人近期学习LINUX,想克隆多台CENTOS来练习在LINUX下安装软件,配置环境.因为对系统不是很熟悉,就想保持一个纯净版本,如果系统玩坏了就删除再重新克隆一个继续配置,以节省时间.后来发现,克隆 ...

  10. selenium 元素查找与属性

    1.首先你要安装selenium库啦 pip install selenium 2.selenium查找元素就八种方法 from selenium import webdriver driver=we ...