keepalived

高可用—keepalived

什么是高可用?

简单的来讲,高可用就是通过设计减少系统不能提供服务的时间。

Keepalived软件主要是通过VRRP协议实现高可用功能的。(提供故障切换和健康检查)

Keepalived 是一种基于 VRRP 协议的热备方式,能很好的完成服务器之间的故障切换,解决了单点故障的问题,每台热备组可以有多台服务器,最常用的还是双机热备(根据虚拟 IP 的漂移来实现),可适用于各种应用服务.

VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。

高可用部署服务过程

准备环境:

Web01:yum install –y nginx  10.0.0.7

Web02:yum install –y nginx   10.0.0.8

Web03: yum install –y nginx    10.0.0.9

Lb01:yum install –y nginx ,yum install –y keepalived  10.0.0.5

Lb02: yum install –y nginx ,yum install –y keepalived  10.0.0.6

 

第一个里程:确认后端节点是否可以正常访问

    web01 web02 web03

    curl -H host:www.goodboy.com 10.0.0.7

    curl -H host:www. goodboy.com 10.0.0.8

    curl -H host:www. goodboy.com 10.0.0.9

   

    第二个里程:确认负载均衡服务配置

    curl -H hosts:www. goodboy.com  10.0.0.5

    curl -H hosts:www. goodboy.com  10.0.0.6

   

    第三个里程:需要负载均衡服务器部署安装keepalived

    yum install -y keepalived

PS:确认系统epel源是否更新成功

第四个里程:编写高可用配置文件

Lb01配置

global_defs {                   --- 全局配置信息

    router_id lb01             --- 标记主机身份信息 lb01

   }

 

vrrp_instance test {              --- vrrp冗余功能配置

    state MASTER              --- 规划确认主机角色身份

    interface eth0              --- 虚拟IP地址在哪个网卡上生成

    virtual_router_id 51           --- 定义路由组播标号

    priority 100                  --- 定义网站服务优先级

    advert_int 1                --- 组播发送间隔时间

    authentication {              --- 开启网站认证功能

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {                  --- 定义虚拟IP地址  

       10.0.0.3

    }

}

 

Lb02上配置

global_defs {                   --- 全局配置信息

    router_id lb02              --- 标记主机身份信息 lb02

   }

 

vrrp_instance test {              --- vrrp冗余功能配置

    state BACKUP              --- 规划确认主机角色身份

    interface eth0              --- 虚拟IP地址在哪个网卡上生成

    virtual_router_id 51           --- 定义路由组播标号

    priority 50                  --- 定义网站服务优先级

    advert_int 1                --- 组播发送间隔时间

    authentication {              --- 开启网站认证功能

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {                  --- 定义虚拟IP地址  

       10.0.0.3

    }

}

PS:确认vip地址是否和域名建立解析

        www.goodboy.com ~  10.0.0.3

强调:主和备keepalived配置主要有3个地方不一致

    ① router_id xxx

    ② state BACKUP/MASTER

    ③ priority xxx

什么是脑裂?

在HA集群系统中,节点a和节点b是通过心跳线来感知对方的存活状态,当节点a出现异常时,节点b就会接管a的资源,以此类推,当节点b出现异常时,节点a就会接管b的资源。但是,当网络出现故障时,导致2个节点都出现了故障,那么双方就会认为对方都出现了异常开始互相接管对方的资源,那么脑裂的问题就出现了。

如何解决脑裂?

参考网址:https://www.cnblogs.com/fatzi/p/13358993.html

解决方案:

利用监控软件进行监控管理  zabbix

利用编写监控脚本文件      shell -- 实现监控监本编写/实现自动化管理服务/实现服务菜单管理

编写脚本:

当监控备服务器上出现vip地址报警

#!/bin/bash

ip a s eth0|grep "10.0.0.3" &>/dev/null

if [ $? -eq 0 ]

then

   echo "出现脑裂问题,请及时排查";

fi

监控服务状态信息

nginx负载均衡服务活着,keepalived服务存活就有意义

nginx负载均衡服务死去,keepalived服务就没有存在意义

如何释放主服务器上流量资源:

1) 当nginx服务出现问题,直接关闭keepalived服务

#!/bin/bash

Netstat –lntup |grep 80 &> /dev/null

if [ $? -ne 0 ]

then

    systemctl stop keepalived

fi

第二个里程:可以将脚本信息加载到高可用配置文件中

global_defs {

    router_id lb01

   }

vrrp_script check_web {

       script "/server/scripts/web_check.sh"

       interval 1

       weight 10

}

 

vrrp_instance test {

    state MASTER

    interface eth0

    virtual_router_id 51

    priority 60

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        10.0.0.3

    }

    track_script {

      check_web

   }

}

第三个里程:设置脚本权限并重启keepalived服务进行测试

    chmod +x  /server/scripts/web_check.sh

    systemctl restart keepalived

2)当nginx服务出现问题,将keepalived资源进行转移  利用weight参数功能

    nginx 自动恢复机制 +  keepalived自动恢复机制

lb01 主服务器

    nginx服务活着时候,keepalived优先级高于备服务器

    nginx服务宕掉时候,keepalived优先级降低 

weight 值为正数:

    条件:

    监控脚本执行成功=返回值为0   优先级+weight

    监控脚本执行失败=返回值非0   默认优先级

weight 值为负数:

    条件:

    监控脚本执行成功=返回值为0   默认优先级

    监控脚本执行失败=返回值非0   优先级+weight

主服务器上:

当nginx服务停止时,脚本执行失败  weight设置为负数   优先级+weight < 备服务优先级

当nginx服务恢复时,脚本执行成功  weight设置为负数   默认优先级 > 备服务优先级

#!/bin/bash

netstat -lntup|grep 80 &>/dev/null

if [ $? -ne 0 ]

then

    exit 1

else

    exit 0

fi

 

global_defs {

    router_id lb01

   }

vrrp_script check_web {

       script "/server/scripts/web_check.sh"

       interval 1

       weight -20

}

 

vrrp_instance test {

    state MASTER

    interface eth0

    virtual_router_id 51

    priority 60

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        10.0.0.3

    }

    track_script {

      check_web

   }

}

 

负载均衡双主配置过程

出现双主配置,主要是缓解主服务压力(负载均衡服务器lb01)

双主==实现互为主备

实现过程:

规划:

www.goodboy.com  --- lb01 10.0.0.5(vip10.0.0.3) --- web01/02/03

bbs.goodboy.com  --- lb02 10.0.0.6(vip10.0.0.4) --- web01/02/03

   

    第一个里程:配置集群节点信息并测试

    lb01 -- web01-03  www网站/bbs网站

    [root@lb01 scripts]# curl -H host:www. goodboy.com 10.0.0.7

    www 10.0.0.7

    [root@lb01 scripts]# curl -H host: www. goodboy.com 10.0.0.8

    www 10.0.0.8

    [root@lb01 scripts]# curl -H host: www. goodboy.com 10.0.0.9

    www 10.0.0.9

    [root@lb01 scripts]# curl -H host:bbs.goodboy.com 10.0.0.7

    bbs 10.0.0.7

    [root@lb01 scripts]# curl -H host: bbs.goodboy.com 10.0.0.8

    bbs 10.0.0.8

    [root@lb01 scripts]# curl -H host: bbs.goodboy.com 10.0.0.9

    bbs 10.0.0.9

   

    lb02 -- web01-03  bbs网站/www网站

    [root@lb02 scripts]# curl -H host: www. goodboy.com 10.0.0.7

    www 10.0.0.7

    [root@lb02 scripts]# curl -H host: www. goodboy.com 10.0.0.8

    www 10.0.0.8

    [root@lb02 scripts]# curl -H host: www. goodboy.com 10.0.0.9

    www 10.0.0.9

    [root@lb02 scripts]# curl -H host: bbs.goodboy.com 10.0.0.7

    bbs 10.0.0.7

    [root@lb02 scripts]# curl -H host: bbs.goodboy.com 10.0.0.8

    bbs 10.0.0.8

    [root@lb02 scripts]# curl -H host: bbs.goodboy.com 10.0.0.9

    bbs 10.0.0.9

   

    第二个里程:确认负载均衡服务负载情况

    [root@web01 ~]# curl -H host: www. goodboy.com 10.0.0.5

    www 10.0.0.7

    [root@web01 ~]# curl -H host: www. goodboy.com 10.0.0.5

    www 10.0.0.8

    [root@web01 ~]# curl -H host: www. goodboy.com 10.0.0.5

    www 10.0.0.9

    [root@web01 ~]# curl -H host: bbs.goodboy.com 10.0.0.5

    bbs 10.0.0.7

    [root@web01 ~]# curl -H host: bbs.goodboy.com 10.0.0.5

    bbs 10.0.0.8

    [root@web01 ~]# curl -H host: bbs.goodboy.com 10.0.0.5

    bbs 10.0.0.9

   

    [root@web01 ~]# curl -H host: bbs.goodboy.com 10.0.0.6

    bbs 10.0.0.7

    [root@web01 ~]# curl -H host: bbs.goodboy.com 10.0.0.6

    bbs 10.0.0.8

    [root@web01 ~]# curl -H host: bbs.goodboy.com 10.0.0.6

    bbs 10.0.0.9

    [root@web01 ~]# curl -H host: www. goodboy.com 10.0.0.6

    www 10.0.0.7

    [root@web01 ~]# curl -H host: www. goodboy.com 10.0.0.6

    www 10.0.0.8

    [root@web01 ~]# curl -H host: www. goodboy.com 10.0.0.6

    www 10.0.0.9

   

    第三个里程:编写keepalived配置文件

    lb01  www主  bbs备

    global_defs {

    router_id lb01

   }

 

vrrp_instance www {

    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

    }

}

vrrp_instance bbs {

    state BACKUP

    interface eth0

    virtual_router_id 52

    priority 50

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        10.0.0.4

    }

}

    lb02  www备  bbs主

    global_defs {

    router_id lb02

   }

 

vrrp_instance www {

    state BACKUP

    interface eth0

    virtual_router_id 51

    priority 50

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

       10.0.0.3

    }

}

vrrp_instance bbs {

    state MASTER

    interface eth0

    virtual_router_id 52

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

       10.0.0.4

    }

}第四个里程:配置dns解析与测试

 keepalived

 

上一篇:阿里云“网红"运维工程师白金:做一个平凡的圆梦人


下一篇:三十四、www服务apache进阶