keepalived

简介

1 高可用服务的概念介绍
2 部署安装高可用服务
3 高可用服务配置文件参数说明
4 高可用服务VRRP协议原理
5 高可用服务常见问题(脑裂文件)
6 高可用服务如何进行监控
7 高可用服务实现双主配置

高可用服务介绍说明
避免负载均衡服务出现单点问题

高可用服务的原理

实现部署高可用服务
利用keepalived软件实现
作用:

  1. 为LVS服务而诞生出来的 k8s + 容器技术docker 容器<--镜像<--仓库 春节抢红包
    keepalived + LVS负载均衡软件(4层)
  2. 实现高可用服务功能

高可用keepalived服务部署流程

第一个历程: 准备高可用服务架构

第二个历程: 安装部署keepalived软件 (lb01 lb02)
yum install -y keepalived

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

vim /etc/keepalived/keepalived.conf
GLOBAL  CONFIGURATION           --- 全局配置部分
VRRPD   CONFIGURATION           --- VRRP协议配置部分
LVS     CONFIGURATION           --- LVS服务管理配置部分

[root@lb01 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {                   --- 全局配置部分
   notification_email {         --- 设置发送邮件信息的收件人
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from oldboy@163.com   --- 设置连接的邮件服务器信息
   smtp_server 163.smtp.xxx_
   smtp_connect_timeout 30 
   router_id LVS_DEVEL           --- 高可用集群主机身份标识(集群中主机身份标识名称不能重复)
}

vrrp_instance oldboy {           --- Vrrp协议家族 oldboy
    state MASTER                 --- 标识所在家族中的身份 (MASTER/BACKUP)
    interface eth0               --- 指定虚拟IP地址出现在什么网卡上
    virtual_router_id 51         --- 标识家族身份信息 多台高可用服务配置要一致 
    priority 100                 --- 设定优先级 优先级越高,就越有可能成为主
    advert_int 1                 --- 定义组播包发送的间隔时间(秒)  主和备配置要一样  1
    authentication {             --- 实现通讯需要有认证过程
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {          --- 配置虚拟IP地址信息
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }
}

删掉多余信息
lb01配置信息:
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
    router_id lb01
}

vrrp_instance oldboy {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3/24
    }
}
lb02配置信息:
! Configuration File for keepalived

global_defs {
   router_id lb02
}

vrrp_instance oldboy {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3/24
    }   
}

第三个历程: 启动keepalived服务
...

第四个历程: 修改域名和IP地址解析关系

高可用服务企业应用

高可用服务常见异常问题---脑裂问题

如何解决脑裂问题:
出现原因:
高可用备服务器接收不到主服务器发送的组播包,备服务器上会自动生成VIP地址

如何解决脑裂问题:
物理原因:
高可用集群之间通讯线路出现问题

如何解决脑裂问题:
逻辑原因:
有安全策略阻止

如何解决脑裂问题:

  1. 进行监控,发出告警
    备服务器出现VIP地址的原因:
    a 主服务器出现故障
    b 出现脑裂问题

可用shell脚本(备机)监控

#!/bin/bash
ip a s eth0|grep "10.0.0.3" >/dev/null
if [ $? -eq 0 ]
then
  echo "keepalived服务出现异常,请进行检查"|mail -s 异常告警-keepalived  330882721@qq.com
fi

## 结合while循环可实时监控

shell脚本进行比较判断
-eq  等于
-ne  不等于
-lt  小于
-gt  大于
-le  小于等于
-ge  大于等于

实现keepalived服务自动释放vip地址资源

nginx(皇帝) + keepalived(妃子): nginx服务停止(皇帝死了),keepalived也必须停止(殉情)

第一个历程: 编写监控nginx服务状态监控(主机)
vim check_web.sh

#!/bin/bash
num=`ps -ef|grep -c nginx`
if [ $num -lt 2 ]
then
   systemctl stop keepalived
fi

加上执行权限
第二个历程: 测试监控脚本

第三个历程: 实时监控nginx服务状态---keepalived配置文件

# check_web=/server/scripts/check_web.sh

vrrp_script check_web {
   script "/server/scripts/check_web.sh"   --- 定义需要监控脚本(脚本是执行权限)   
   interval 2                              --- 执行脚本的间隔时间(秒)  
   weight 2                                --- ???
}

$check_web
track_script {                             
     check_web                             --- 调用执行你的脚本信息
}   

#位置要放正确,见下面

############################################
keepalived信息配置  
[root@lb01 scripts]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
 global_defs {
   router_id lb01
}

vrrp_script check_web {
 script "/server/scripts/check_web.sh"  
 interval 3   
 weight 2
}

vrrp_instance oldboy {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
     10.0.0.3/24
    }
   track_script {
         check_web
   }
}

高可用集群双主配置

第一个历程: 编写lb01服务器keepalived配置文件

[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
 global_defs {
   router_id lb01
}

vrrp_instance oldboy {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
     10.0.0.3/24
    }
}
vrrp_instance oldgirl {
    state BACKUP
    interface eth0
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
     10.0.0.4/24
    }
}

第二个历程: 编写lb02服务器keepalived配置文件

! Configuration File for keepalived
global_defs {
   router_id lb02
}

vrrp_instance oldboy {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3/24
    }
}
vrrp_instance oldgirl {
    state MASTER
    interface eth0
    virtual_router_id 52
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.4/24
    }
}

第三个历程: 编写域名和IP地址解析信息
进行抓包查看:
www.oldboy.com --- 10.0.0.3(10.0.0.5)
10.0.0.1 --- 10.0.0.3
10.0.0.5 --- 10.0.0.7
10.0.0.7 --- 10.0.0.5
10.0.0.3 --- 10.0.0.1

bbs.oldboy.com --- 10.0.0.4(10.0.0.6)
10.0.0.1 --- 10.0.0.4
10.0.0.6 --- 10.0.0.7
10.0.0.7 --- 10.0.0.6
10.0.0.4 --- 10.0.0.1

高可用服务安全访问配置(负载均衡服务)

第一个历程: 修改nginx负载均衡文件

upstream oldboy {
   server 10.0.0.7:80;
   server 10.0.0.8:80;
   server 10.0.0.9:80;
}
server {
    listen       10.0.0.3:80;  ## 只监听虚拟ip
    server_name  www.oldboy.com;
    location / {
       proxy_pass http://oldboy;
       proxy_set_header Host $host;
       proxy_set_header X-Forwarded-For $remote_addr;
       proxy_next_upstream error timeout http_404 http_502 http_403;
    }
}
server {
    listen       10.0.0.4:80;  ################
    server_name  bbs.oldboy.com;
    location / {
       proxy_pass http://oldboy;
       proxy_set_header Host $host;
       proxy_set_header X-Forwarded-For $remote_addr;
    }
}

第二个历程: 修改内核文件
异常问题:

  1. 如何设置监听网卡上没有的地址
    解决: 需要修改内核信息

    echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf  (可以监听本地网卡没有的地址)
    sysctl -p 加载配置

第三个历程: 重启nginx负载均衡服务(改监听地址一定要重启)
systemctl restart nginx

weight参数: 权重值参数,主要用于和优先级进行运算

(网盘d44_02)
重要知识点01:
求和运算: weight数值必须是正数 weight + priority 自动提升优先级, 使主机可以成为主服务器
求差运算: weight数值必须是负数 weight - priority 自动降低优先级, 使主机可以成为备服务器
重要知识点02:
运行一个脚本, 执行脚本结束之后, 脚本的执行结果可以为真 看脚本执行返回值 $?==0
运行一个脚本, 执行脚本结束之后, 脚本的执行结果可以为假 看脚本执行返回值 $$<>0
重要知识点03:
如何将知识01 + 知识02
权重值为正数:

  1. 脚本运行后为真 weight + priority
  2. 脚本运维后为假 priority
    权重值为负数:
  3. 脚本运行后为真 priority
  4. 脚本运维后为假 weight - priority

高可用服务总结

1) 负载均衡服务扩展补充
根据用uri信息进行负载均衡(动静分离架构)
根据user_agent信息进行负载均衡(手机用户和浏览器访问用户页面信息可以不一致)

2) 高可用服务作用(避免出现单点故障)

3) keepalived高可用服务

  1. 管理LVS负载均衡软件
  2. 实现高可用功能(vrrp原理)

4) keepalived服务配置文件

5) keepalived服务企业应用

  1. 可能出现脑裂问题 --- 脚本编写
  2. 如何实现自动释放资源 --- 脚本(监控web服务) 修改keepalived文件
  3. 如何实现双主配置 --- 编写keepalived配置文件 编写多个vrrp实例
  4. 如何实现负载均衡安全访问 --- 编写负载均衡nginx配置文件 配置监听vip地址信息
服务器技术交流群请加微信 YJZyjz