一、keepalived高可用

1.什么是高可用

  1. 一般是指2台机器启动着完全相同的业务系统,当有一台机器down机了,另外一台服务器就能快速的接管,对于访问的用户是无感知的。

2.高可用使用的工具

  1. 1.硬件:
    F5
    2.软件:
    keepalived

3.keepalived 如何保持高可用性

  1. keepalived是基于VRRP协议实现的

    如何才能做到出现故障自动转移,此时VRRP就出现了,我们的VRRP其实是通过软件或者硬件的形式在MasterBackup外面增加一个虚拟的MAC地址(VMAC)与虚拟IP地址(VIP),那么在这种情况下,PC请求VIP的时候,无论是Master处理还是Backup处理,PC仅会在ARP缓存表中记录VMACVIP的信息

4.高可用的使用场景

  1. 通常业务系统需要保证7×24小时不DOWN机,比如公司内部的OA系统,每天公司人员都需要使用,则不允许Down机,作为业务系统来说随时都可用

5.高可用keepalived的核心概念

  1. 1.如何确定谁是主节点谁是背节点(选举投票,优先级)
    2.如果Master故障,Backup自动接管,那么Master恢复后会夺权吗(抢占式、非抢占式)
    3.如果两台服务器都认为自己是Master会出现什么问题(脑裂)

二、keepalived搭建

1.环境准备

主机 IP 身份
web01 172.16.1.7  
web03 172.16.1.9  
nfs 172.16.1.31  
db01 172.16.1.51  
lb01 172.16.1.4 master
lb02 172.16.1.5 backup
  10.0.0.3 VIP

2.保证两台七层负载均衡一致

  1. [root@lb01 ~]# scp /etc/nginx/conf.d/* 172.16.1.5:/etc/nginx/conf.d/

    #访问测试
    10.0.0.5 linux.blog.com
    10.0.0.4 linux.blog.com

3.安装keepalived

  1. [root@lb01 ~]# yum install -y keepalived
    [root@lb02 ~]# yum install -y keepalived

4.配置keepalived主节点

  1. #查找配置文件
    [root@lb01 ~]# rpm -qc keepalived
    /etc/keepalived/keepalived.conf

    [root@lb01 ~]# vim /etc/keepalived/keepalived.conf
    global_defs { #全局配置
      router_id lb01 #身份识别
    }
    vrrp_instance VI_1 { #VRPP协议配置
      state MASTER #告诉你一开始这台机器是主
      interface eth0 #绑定的网卡
      virtual_router_id 51 #虚拟路由标识,就是编组,将master和backup分为一组
      priority 100 #优先级(真正判断是主还是备的条件)
      advert_int 1 #检测心跳的时间间隔
      authentication { #认证相关
          auth_type PASS #以密码的形式认证
          auth_pass 1111 #密码
      }
      virtual_ipaddress { #指定VIP地址
           10.0.0.3
      }  
    }

    [root@lb01 ~]# vim /etc/keepalived/keepalived.conf
    global_defs {
      router_id lb01
    }
    vrrp_instance VI_1 {
      state MASTER
      interface eth0
      virtual_router_id 51
      priority 100
      advert_int 1
      authentication {
          auth_type PASS
          auth_pass 1111
      }
      virtual_ipaddress {
           10.0.0.3
      }  
    }

5.配置keepalived备节点

  1. [root@lb02 ~]# vim /etc/keepalived/keepalived.conf
    global_defs {
      router_id lb02
    }
    vrrp_instance VI_1 {
      state BACKUP
      interface eth0
      virtual_router_id 51
      priority 90
      advert_int 1
      authentication {
          auth_type PASS
          auth_pass 1111
      }
      virtual_ipaddress {
           10.0.0.3
      }
    }

6.主备节点配置区别

区别 master主节点 backup备节点
router_id(唯一标识符) lb01 lb02
state(角色状态) MASTER BACKUP
priority(优先级) 100 90

7.启动服务

  1. [root@lb02 ~]# systemctl start keepalived.service
    [root@lb02 ~]# tail -f /var/log/messages

    [root@lb01 ~]# systemctl start keepalived.service
    [root@lb02 ~]# tail -f /var/log/messages

8.配置keepalived日志

  1. #配置keepalived
    [root@lb02 ~]# vim /etc/sysconfig/keepalived
    KEEPALIVED_OPTIONS="-D -d -S 0"

    #配置rsyslog
    [root@lb02 ~]# vim /etc/rsyslog.conf
    local0.*               /var/log/keepalived.log

    #重启服务
    [root@lb02 ~]# systemctl restart rsyslog
    [root@lb02 ~]# systemctl restart keepalived

    #查看日志
    [root@lb02 ~]# tail -f /var/log/keepalived.log

三、高可用keepalived的抢占式与非抢占式

1.两个节点都启动

  1. #由于节点1的优先级高于节点2,所以VIP在节点1上面
    [root@lb01 ~]# ip addr | grep 10.0.0.3
      inet 10.0.0.3/32 scope global eth0

    [root@lb02 ~]# ip addr | grep 10.0.0.3

2.停止主节点

  1. [root@lb01 ~]# systemctl stop keepalived

    #节点2联系不上节点1,主动接管VIP
    [root@lb02 ~]# ip addr | grep 10.0.0.3
    inet 10.0.0.3/32 scope global eth0

3.重新启动主节点

  1. [root@lb01 ~]# systemctl start keepalived

    #由于节点1的优先级高于节点2,所以恢复节点1之后,vip又漂回节点1
    [root@lb01 ~]# ip addr | grep 10.0.0.3
      inet 10.0.0.3/32 scope global eth0

4.配置非抢占式

1)节点一修改
  1. [root@lb01 ~]# vim /etc/keepalived/keepalived.conf
    ... ...
    vrrp_instance VI_1 {
      state BACKUP
      nopreempt
      ......
    }

    [root@lb01 ~]# systemctl restart keepalived
2)节点二修改
  1. [root@lb02 ~]# vim /etc/keepalived/keepalived.conf
    ... ...
    vrrp_instance VI_1 {
      state BACKUP
      nopreempt
      ......
    }

    [root@lb02 ~]# systemctl restart keepalived
3)配置注意事项
  1. 1.两台机器节点状态都要改成 BACKUP
    2.两个节点都要加上 nopreempt
    3.优先级不需要改变

5.访问页面测试

  1. #配置hosts
    10.0.0.3 linux.blog.com

    #访问页面
    http://linux.blog.com/

    #节点测试
    [root@lb01 ~]# ip addr | grep 10.0.0.3
      inet 10.0.0.3/32 scope global eth0
    #访问网站,并且windows查看mac地址测试
    C:\Users\11764>arp -a
    VIP VMAC
     10.0.0.3              00-0c-29-d7-bc-2c     动态
     10.0.0.4              00-0c-29-d7-bc-2c     动态
     10.0.0.5              00-0c-29-89-2f-10     动态
     
    #关闭节点1keepalived
    [root@lb01 ~]# systemctl stop keepalived.service
    [root@lb02 ~]# ip addr | grep 10.0.0.3
      inet 10.0.0.3/32 scope global eth0
    #访问网站,并且windows查看mac地址测试
    C:\Users\11764>arp -a
    VIP VMAC
     10.0.0.3              00-0c-29-89-2f-10     动态
     10.0.0.4              00-0c-29-d7-bc-2c     动态
     10.0.0.5              00-0c-29-89-2f-10     动态

四、高可用的脑裂现象

1.脑裂现象介绍

  1. 由于某些原因,导致两台keepalived高可用服务器在指定时间内,无法检测到对方的心跳,各自取得资源及服务的所有权,而此时的两台高可用服务器又都还活着。

2.脑裂的原因

  1. 1.服务器网线松动等网络故障
    2.服务器硬件故障发生损坏现象而崩溃
    3.主备都开启firewalld防火墙

3.故障演示

1)开启防火墙
  1. [root@lb01 ~]# systemctl start firewalld
    [root@lb02 ~]# systemctl start firewalld
2)查看两个节点
  1. [root@lb01 ~]# ip addr | grep 10.0.0.3
      inet 10.0.0.3/32 scope global eth0
       
    [root@lb02 ~]# ip addr | grep 10.0.0.3
      inet 10.0.0.3/32 scope global eth0
3)访问项目页面
  1. #拒绝访问,需要配置防火墙规则
    [root@lb01 ~]# firewall-cmd --add-service=http
    success
    [root@lb01 ~]# firewall-cmd --add-service=https
    success

    #访问页面正常

4.解决脑裂的方法

  1. #如果发生闹裂,则随机kill掉一台即可
    #在备节点上编写检测脚本, 测试如果能ping通主,并且备节点还有VIP的话则认为产生了脑裂
    [root@lb02 ~]# vim /scripts/check_split_brain.sh
    #!/bin/sh
    vip=10.0.0.3
    lb01_ip=10.0.0.4
    lb02_vip=$(ip add|grep "$vip"|wc -l)
    while true;do
       ssh $lb01_ip "ip add|grep $vip" &>/dev/null
       if [ $? -eq 0 -a $lb02_vip -eq 1 ];then
           echo "ha is split brain.warning."
       else
           echo "ha is ok"
       fi
    sleep 5
    done

    -eq #等于
    -ne #不等于
    -lt #小于
    -gt #大于
    -le #小于等于
    -ge #大于等于

五、高可用keepalived与nginx

  1. Nginx默认监听在所有的IP地址上,VIP会飘到一台节点上,相当于那台nginx多了VIP这么一个网卡,所以可以访问到nginx所在机器

    但是.....如果nginx宕机,会导致用户请求失败,但是keepalived没有挂掉不会进行切换,所以需要编写一个脚本检测Nginx的存活状态,如果不存活则killkeepalived

1.nginx故障切换脚本

  1. [root@lb01 ~]# vim check_web.sh
    #!/bin/sh
    nginxpid=$(ps -C nginx --no-header|wc -l)
    #1.判断Nginx是否存活,如果不存活则尝试启动Nginx
    if [ $nginxpid -eq 0 ];then
      systemctl start nginx
       sleep 3
       #2.等待3秒后再次获取一次Nginx状态
       nginxpid=$(ps -C nginx --no-header|wc -l)
       #3.再次进行判断, 如Nginx还不存活则停止Keepalived,让地址进行漂移,并退出脚本  
       if [ $nginxpid -eq 0 ];then
          systemctl stop keepalived
      fi
    fi
    #给脚本增加执行权限
    [root@lb01 ~]# chmod +x /root/check_web.sh

2.调用脚本

  1. [root@lb01 ~]# vim /etc/keepalived/keepalived.conf
    global_defs {          
      router_id lb01      
    }
    #每5秒执行一次脚本,脚本执行内容不能超过5秒,否则会中断再次重新执行脚本
    vrrp_script check_web {
      script "/root/check_web.sh"
      interval 5
    }
    vrrp_instance VI_1 {
      state MASTER        
      interface eth0      
      virtual_router_id 50    
      priority 100        
      advert_int 1        
      authentication {    
          auth_type PASS  
          auth_pass 1111  
      }
      virtual_ipaddress {
           10.0.0.3    
      }
       #调用并运行脚本
    track_script {
      check_web
    }
    }
    #在Master的keepalived中调用脚本,抢占式,仅需在master配置即可。(注意,如果配置为非抢占式,那么需要两台服务器都使用该脚本)

第十九章 keepalived高可用的更多相关文章

  1. 十一.keepalived高可用服务实践部署

    期中集群架构-第十一章-keepalived高可用集群章节======================================================================0 ...

  2. Linux 笔记 - 第十八章 Linux 集群之(一)Keepalived 高可用集群

    一.前言 Linux 集群从功能上可以分为两大类:高可用集群和负载均衡集群.此处只讲高可用集群,负载均衡放在下一篇博客讲解. 高可用集群(High Availability Cluster,简称 HA ...

  3. Nginx知多少系列之(十四)Linux下.NET Core项目Nginx+Keepalived高可用(主从模式)

    目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略 8.加权轮询(round rob ...

  4. 高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群

    高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群 libnet软件包<-依赖-heartbeat(包含ldirectord插件(需要perl-MailTools的rpm包)) l ...

  5. 第十九章——使用资源调控器管理资源(2)——使用T-SQL配置资源调控器

    原文:第十九章--使用资源调控器管理资源(2)--使用T-SQL配置资源调控器 前言: 在前一章已经演示了如何使用SSMS来配置资源调控器.但是作为DBA,总有需要写脚本的时候,因为它可以重用及扩展. ...

  6. keepalived高可用集群。

    keepalived故障切换转移原理1vrrp协议:(vritual router redundancy protocol)虚拟路由冗余协议,2故障转移.keepalived三大功能1实现物理高可用, ...

  7. MySQL的keepalived高可用监控脚本

    MySQL的keepalived高可用监控脚本 MySQL(或者其它服务)的keepalived高可用监控脚本 开发脚本需求 :我们知道,keepalive是基于虚拟ip的存活来判断是否抢占maste ...

  8. Linux实战教学笔记31:Keepalived高可用集群应用实践

    1.1 Keepalived高可用软件 1.1.1 Keepalived介绍 Keepalived软件起初是专门为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入 ...

  9. 20190908 On Java8 第十九章 类型信息

    第十九章 类型信息 RTTI(RunTime Type Information,运行时类型信息)能够在程序运行时发现和使用类型信息. Java 主要有两种方式在运行时识别对象和类信息: "传 ...

随机推荐

  1. 乔悟空-CTF-i春秋-Web-SQL

    2020.09.05 是不是有些题已经不能做了--费了半天,到最后发现做不出来,和网上大神的方法一样也不行,最搞笑的有个站好像是别人运营中的,bug好像被修复了-- 做题 题目 题目地址 做题 尝试简 ...

  2. [LeetCode]Sql系列4

    ##题目1 626. 换座位 小美是一所中学的信息科技老师,她有一张 seat 座位表,平时用来储存学生名字和与他们相对应的座位 id. 其中纵列的 id 是连续递增的 小美想改变相邻俩学生的座位. ...

  3. 腾讯云COS对象存储 Web 端直传实践(JAVA实现)

    使用 腾讯云COS对象存储做第三方存储云服务,把一些文件都放在上面,这里主要有三中实现方式:第一种就是在控制台去设置好,直接上传文件.第二种就是走服务端,上传文件,就是说,上传文件是从服务端去上传上去 ...

  4. Redis 部署方式(单点、master/slaver、sentinel、cluster) 概念与区别

    转载自 https://blog.csdn.net/java_zyq/article/details/83818341 在K8S上部署Redis集群时突然遇到一个(sentinel哨兵模式)概念,感觉 ...

  5. git修改未push和已经push的注释信息

    修改还未push的注释: git commit --amend 修改后保存退出. 刚刚push到远端还没有人其他人下载或改动的: git commit --amend1进入修改页面修改注释信息,修改后 ...

  6. vue中axios的使用

    新开了一个vue项目,从头到尾都是一个人做的,所以就自己配置了一个axios.js文件 第一种方法.使用axios 需要下载安装   npm install axios,下载完成之后 在main.js ...

  7. linux下Crontab定时任务

    1.命令格式 crontab [-u user] file crontab [-u user] [-e | -l | -r ] 2.命令参数 -u user:用来设定某个用户的crontab服务: f ...

  8. SVN合并分支提示不是祖先关系

    开发:dev 测试:test 开发完成后,需要合并到test然后部署,进入测试. F:主干 合并到那里,那里就是主干(要合并到的分支)[起始] T:分支 从那里合并那里就是分支[结束] 备注:需要精确 ...

  9. Linux I2C驱动框架

    Linux的I2C体系结构分为3个组成部分: I2C核心(  i2c-core.c ): I2C核心提供了I2C总线驱动和设备驱动的注册.注销方法.I2C通信方法("algorithm&qu ...

  10. C++vector and opencv Mat

    转载:https://blog.csdn.net/u012507022/article/details/50979011?utm_source=blogxgwz5 最近在写Opencv程序,用到离散小 ...