目标: Keeplaived 简单模拟测试一下Nginx 故障切换
前言:C7 默认的 1.3.5 似乎有点问题,改装 keepalived-2.0.7

1:安装 Nginx 和确认 (略)
2:安装配置 Keepalived
3:Nginx 健康脚本
4:Maix 邮件报警


2:安装配置 Keepalived

2.1 安装 cheese 源
# wget http://www.nosuchhost.net/~cheese/fedora/packages/epel-7/x86_64/cheese-release-7-1.noarch.rpm
2.2 rpm -ivh cheese-release-7-1.noarch.rpm
2.3 yum install keepalived                                                    
======================================================================
 Package                      Arch    Version                         Repository    Size
======================================================================
Installing:                                                          
 keepalived                   x86_64  2.0.7-1.el7                     cheese       417 k
Installing for dependencies:                                         
 libnl                        x86_64  1.1.4-3.el7                     base         128 k
 lm_sensors-libs              x86_64  3.4.0-8.20160601gitf9185e5.el7  base          42 k
 net-snmp-agent-libs          x86_64  1:5.7.2-48.el7_8.1              updates      707 k
 net-snmp-libs                x86_64  1:5.7.2-48.el7_8.1              updates      751 k
                                                                     
Transaction Summary                                                  
======================================================================

2.4 配置
# vi /etc/keepalived/keepalived.conf
主节点配置
########## Master ##################
global_defs {
   notification_email {
     acassen@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
  #vrrp_strict             # 需要注释掉
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER         # 主节点
    interface ens192      # 网卡名称 !
    virtual_router_id 51
    priority 100         # 优先级高
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.5.40    # 虚拟IP
    }
}
########## 余下内容可先删除 ###########

备用节点配置
########## Backup ##################
global_defs {
   notification_email {
     acassen@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
  #vrrp_strict               # 需要注释掉
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state Backup         # 备用节点
    interface ens192   # 网卡名称 !
    virtual_router_id 51
    priority 90             # 优先级低
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.5.40    # 虚拟IP
    }
}
########## 余下内容可先删除 ########

2.5 服务启动
# systemctl start keepalived (主/备顺序启动)
# tailf /var/log/message  (可监控LOG)

41 systemd: Starting LVS and VRRP High Availability Monitor...
41 Keepalived[1332]: Starting Keepalived v2.0.7 (08/23,2018)
41 Keepalived[1332]: Running on Linux 3.10.0-1127.13.1.el7.x86_64 #1 SMP Tue Jun 23 (built for Linux 3.10.0)
41 Keepalived[1332]: Command line: '/usr/sbin/keepalived' '-D'
41 Keepalived[1332]: Opening file '/etc/keepalived/keepalived.conf'.
41 Keepalived[1332]: (Line 13) number '0' outside range [1e-06, 4294]
41 Keepalived[1332]: (Line 13) vrrp_garp_interval '0' is invalid
41 Keepalived[1332]: (Line 14) number '0' outside range [1e-06, 4294]
41 Keepalived[1332]: (Line 14) vrrp_gna_interval '0' is invalid
41 systemd: Started LVS and VRRP High Availability Monitor.
41 Keepalived[1333]: Starting VRRP child process, pid=1334
41 Keepalived_vrrp[1334]: Registering Kernel netlink reflector
41 Keepalived_vrrp[1334]: Registering Kernel netlink command channel
41 Keepalived_vrrp[1334]: Opening file '/etc/keepalived/keepalived.conf'.
41 Keepalived_vrrp[1334]: Assigned address 192.168.5.41 for interface ens192
41 Keepalived_vrrp[1334]: Registering gratuitous ARP shared channel
41 Keepalived_vrrp[1334]: (VI_1) removing VIPs.
41 Keepalived_vrrp[1334]: (VI_1) Entering BACKUP STATE (init)
41 Keepalived_vrrp[1334]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(8,9)]
41 Keepalived_vrrp[1334]: (VI_1) Receive advertisement timeout
41 Keepalived_vrrp[1334]: (VI_1) Entering MASTER STATE
41 Keepalived_vrrp[1334]: (VI_1) setting VIPs.
41 Keepalived_vrrp[1334]: Sending gratuitous ARP on ens192 for 192.168.5.40
41 Keepalived_vrrp[1334]: (VI_1) Sending/queueing gratuitous ARPs on ens192 for 192.168.5.40
41 Keepalived_vrrp[1334]: Sending gratuitous ARP on ens192 for 192.168.5.40

※  number '0' outside range 可以改成 0.001

# ip addr  (主节点虚拟ip OK )
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:5f:11:11 brd ff:ff:ff:ff:ff:ff
    inet 192.168.5.41/24 brd 192.168.5.255 scope global ens192
       valid_lft forever preferred_lft forever
    inet 192.168.5.40/32 scope global ens192
       valid_lft forever preferred_lft forever
       
# ip addr (备份节点 无虚拟ip)
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:22:22:22 brd ff:ff:ff:ff:ff:ff
    inet 192.168.5.42/24 brd 192.168.5.255 scope global ens192
       valid_lft forever preferred_lft forever
       
2.6 访问测试
C:\Users\liu>ping 192.168.5.40
正在 Ping 192.168.5.40 具有 32 字节的数据:
来自 192.168.5.40 的回复: 字节=32 时间=8ms TTL=63
来自 192.168.5.40 的回复: 字节=32 时间=8ms TTL=63
64 bytes from 192.168.5.40: icmp_seq=1 ttl=64 time=0.047 ms

web 服务应该也能正常访问(主节点提供)

2.7 手动切换测试
# systemctl stop keepalived (主节点 停服务)
# tailf /var/log/message  (备用节点LOG显示已经接管)
42 Keepalived_vrrp[1570]: (VI_1) Backup received priority 0 advertisement
42 Keepalived_vrrp[1570]: (VI_1) Receive advertisement timeout
42 Keepalived_vrrp[1570]: (VI_1) Entering MASTER STATE
42 Keepalived_vrrp[1570]: (VI_1) setting VIPs.
42 Keepalived_vrrp[1570]: Sending gratuitous ARP on ens192 for 192.168.5.40
42 Keepalived_vrrp[1570]: (VI_1) Sending/queueing gratuitous ARPs on ens192 for 192.168.5.40
42 Keepalived_vrrp[1570]: Sending gratuitous ARP on ens192 for 192.168.5.40

web 服务应该也能正常访问(备用节点提供)
如果主节点恢复后会重新接管服务(根据配置)

3:Nginx 健康脚本

3.1 编辑 Nginx 监控Shell(使用脚本自动检测和切换服务,注意脚本运行权限)
# vi /etc/keepalived/nginx_health.sh

#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
    /usr/sbin/nginx
    sleep 2
    counter=$(ps -C nginx --no-heading|wc -l)
    if [ "${counter}" = "0" ]; then
       systemctl stop keepalived
    fi
fi

3.2 keepalived 配置文件中添加监控项
########## Master ##################
global_defs {
   notification_email {
     acassen@firewall.loc   # mail 故障报警
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
  #vrrp_strict             # 需要注释掉
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script nginx_check {
        script "/etc/keepalived/nginx_health.sh"  # nginx 检测脚本路径
        interval 2 # 检测间隔
        weight -20 # 如果条件成立权重 -20 注意数字
}

vrrp_instance VI_1 {
    state MASTER         # 主节点
    interface eth0         # 网卡名称 !
    virtual_router_id 51
    priority 100         # 优先级高
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }   
    track_script {
         nginx_check # Nginx监控服务
    }       
    virtual_ipaddress {
        192.168.5.40    # 虚拟IP
    }
}
########## 余下内容可先删除 ########

4:Mailx 邮件报警

4.1 安装mailx和配置(略)

注意25端口是否能够发送

4.2 编辑邮件监控Shell(使用脚本自动发送服务切换邮件,注意脚本运行权限)

# vi /etc/keepalived/mail.sh

contact='admin@cnblog.xyz'
notify() {
    mailsubject="$(hostname) to be $1, vip Trans"
    mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
    echo "$mailbody" | mail -s "$mailsubject" $contact
}
case $1 in
master)
    notify master
    ;;
backup)
    notify backup
    ;;
fault)
    notify fault
    ;;
*)
    echo "Usage: $(basename $0) {master|backup|fault}"
    exit 1
    ;;
esac

4.3 手动测试一下邮件脚本

[root@ nginx-A1] # sh /etc/keepalived/mail.sh backup
正常情况下应该能收到邮件

4.4 keepalived 配置文件中添加配置

...    
vrrp_script nginx_check {
        script "/etc/keepalived/nginx_health.sh"
        interval 2
        weight -20
}
    notify_master "/etc/keepalived/mail.sh master"   
    notify_backup "/etc/keepalived/mail.sh backup"
    notify_fault "/etc/keepalived/mail.sh fault"
}

主备切换时候正常情况下应该收到2封邮件。

Centos7 安装 Keepalived的更多相关文章

  1. Centos7 安装keepalived实现高可用

    场景:尝试安装keepalived实现高可用,进而在suse环境中部署. 测试过程需要配合Nginx的相关知识:Centos7 Nginx安装 1 安装过程 问题 !!! OpenSSL is not ...

  2. centos7 安装keepalived

    node1 192.168.5.101 node2 192.168.5.102 1.安装 openssl openssl-devel yum install openssl openssl-devel ...

  3. centos7安装keepalived问题

    ● keepalived.service - LVS and VRRP High Availability Monitor Loaded: loaded (/usr/lib/systemd/syste ...

  4. Centos7安装keepalived(自定义路径安装)-高级篇

    0.Keepalived介绍 Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat.corosync.pacemaker.但 ...

  5. Centos7+LVS-DR+keepalived实验(包含sorry-server、日志、及HTTP-GET的健康检测)

    目录检索 一.简介 1.lvs-dr原理请参考原理篇 2.keepalived原理请参考原理篇 3.基于lvs-dr+keepalived故障切换架构图如下: 二.部署 1.环境 2.准备RS的web ...

  6. CentOS7.4 Keepalived+LVS 负载均衡 后台节点健康检查

    主机信息 VIP 10.10.10.55 LVS01 10.10.10.59 Web01 10.10.10.60 Web02 10.10.10.61 一.apache简单配置 1.(10.10.10. ...

  7. linux下安装keepalived

    keepalived安装文档 1. 安装环境 su - root yum -y install kernel-devel* yum -y install openssl-* yum -y instal ...

  8. HP服务器 hp 360g5 centos7安装问题

    HP服务器  hp 360g5 centos7安装问题 一 :启动盘无法识别硬盘 1.进入安装光盘,用上下键选择安装centos--Install Centos7(注意不可按Enter键),如图: 2 ...

  9. CentOS7 安装Mono及Jexus

    CentOS7安装Mono及Juxes 1 安装Mono 1.1 安装yum-utils 因为安装要用到yum-config-manager,默认是没有安装的,所以要先安装yum-utils包.命令如 ...

随机推荐

  1. 《前端运维》一、Linux基础--基础命令(1)

    在开始之前,你需要做一些准备工作,去阿里买一台服务器,服务器的具体细节其实并不是十分重要,我也不会在这里一步一步的教大家如何去买一个服务器.百度一下足够了,但是还是要贴一下这篇文章中,我所使用的服务器 ...

  2. 【JavaScript】Leetcode每日一题-二叉搜索树的范围和

    [JavaScript]Leetcode每日一题-二叉搜索树的范围和 [题目描述] 给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和. 示例1: 输入: ...

  3. 使用乌龟Git连接github

    之前自己是在Gitee+乌龟Git来进行管理项目,因为特殊的需求,需要再Github+乌龟Git来进行管理项目,这盘博客主要讲解的就是这个. 安装环境 Git 安装参考链接:https://www.c ...

  4. spring boot 与 Mybatis整合(*)

    在pom.xml文件中加入数据库.spring-mybatis整合 <!-- spring boot 整合mybatis --> <dependency> <groupI ...

  5. LinkedList作为栈和队列的使用

    最近在LeekCode用java写一些算法时,经常遇到要使用栈和队列结构,使用栈的话,Stack已经不被推荐使用了,所以栈和队列我们通常都是用LinkedList这种双链表结构实现.Linkedlis ...

  6. 引言:CTF新世界

    1. CTF的昨天和今天 CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式.CTF起源于1996年DEFCON全球黑客 ...

  7. [知识路书]beta设计和计划

    [知识路书]beta设计和计划 一.需求再分析 根据用户反馈,是否发现之前的需求分析有偏差?为什么会出现这种偏差?beta阶段你们是否能真的分析清楚用户需求?如何做到? 根据alpha阶段的推广情况以 ...

  8. 通过CRM系统改变传统工作模式

    在现在这个互联网时代,同行业的竞争越发激烈,因此许多企业都选择使用CRM来提高企业的销售业绩.CRM客户关系管理系统是能够优化企业的销售流程.维护良好的客户关系.对销售流程进行管理的强大工具.但是很多 ...

  9. linux基本命令随笔

    cd(change directory) 不跟参数,直接进入当前登录用户的家目录 . 代表当前目录 .. 代表上级目录 ls(list) -l 显示文件详细信息 -a 显示隐藏文件 -S 以文件大小排 ...

  10. 051.Python的Django框架简单使用

    一 HTTP相关概念 http协议包含由浏览器发送数据到服务器需要遵循的请求协议与服务器发送数据到浏览器需要遵循的响应协议.用于HTTP协议交互的信息被为HTTP报文.请求端(客户端)的HTTP报文 ...