【一】高可用集群keepaLived-介绍、安装及配置详解

一.高可用集群keepalived详解

keepalived起初是为LVS设计的专门用来监控集群系统中各个服务节点的状态如果某个服务节点出现异常或者工作出现故障,keepalived将检测到,并将出现故障的服务节点从集群系统中剔除,而在故障节点恢复正常后,keepalived又可以自动将该服务节点重新加入集群中,这些工作全部自动完成。这部分功能类似于nginx 等反向代理的应用探活功能实现后端服务高可用。
后来又加入了VRRP的功能,VRRP(Virtual Router Redundancy Protocol),虚拟路由协议出现的目的是为了解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此keepalived一方面具有服务器状态检测和故障隔离功能,另一方面也有HA cluster功能;这个功能实现各种中间件高可用。

1.1 集群类型

  • LB:Load Balance 负载均衡

  • LVS/HAProxy/nginx(http/upstream, stream/upstream)

  • HA:High Availability 高可用集群 数据库、Redis

  • SPoF: Single Point of Failure,解决单点故障

  • HPC:High Performance Computing 高性能集群

1.2 系统可用性

SLA:Service-Level Agreement 服务等级协议(提供服务的企业与客户之间就服务的品质、水准、性能 等方面所达成的双方共同认可的协议或契约)

A = MTBF / (MTBF+MTTR)

 99.95%:(60*24*30)*(1-0.9995)=21.6分钟 #一般按一个月停机时间统计

99.95%:(602430)*(1-0.9995)=21.6分钟 #一般按一个月停机时间统计

1.3 系统故障

硬件故障:设计缺陷、wear out(损耗)、非人为不可抗拒因素

软件故障:设计缺陷 bug

1.4 实现高可用

提升系统高用性的解决方案:降低MTTR- Mean Time To Repair(平均故障时间) 解决方案:建立冗余机制

  • active/passive 主/备

  • active/active 双主

  • active --> HEARTBEAT --> passive

  • active <--> HEARTBEAT <--> active

1.5.VRRP

(Virtual Router Redundancy Protocol)

虚拟路由冗余协议,解决静态网关单点风险

  • 物理层:路由器、三层交换机

  • 软件层:keepalived

1.5.1 VRRP 相关术语
  • 虚拟路由器:Virtual Router

  • 虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器

  • VIP:Virtual IP

  • VMAC:Virutal MAC (00-00-5e-00-01-VRID)

  • 物理路由器:

    • master:主设备

    • backup:备用设备

    • priority:优先级

1.5.2 VRRP 相关技术

通告:心跳,优先级等;周期性

工作方式:抢占式,非抢占式

安全认证:

  • 无认证

  • 简单字符认证:预共享密钥

  • MD5

工作模式:

  • 主/备:单虚拟路由器

  • 主/主:主/备(虚拟路由器1),备/主(虚拟路由器2)

二.Keepalived 部署

2.1 keepalived 简介

vrrp 协议的软件实现,原生设计目的为了高可用 ipvs服务

官网: Keepalived for Linux

功能:

  • 基于vrrp协议完成地址流动

  • 为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)

  • 为ipvs集群的各RS做健康状态检测

  • 基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务

2.2 Keepalived 架构

  • 用户空间核心组件:

    vrrp stack:VIP消息通告

    checkers:监测real server

    system call:实现 vrrp 协议状态转换时调用脚本的功能

    SMTP:邮件组件

    IPVS wrapper:生成IPVS规则

    Netlink Reflector:网络接口

    WatchDog:监控进程

  • 控制组件:提供keepalived.conf 的解析器,完成Keepalived配置

  • IO复用器:针对网络目的而优化的自己的线程抽象

  • 内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限

2.3 Keepalived 环境准备

  • 各节点时间必须同步:ntp, chrony

  • 关闭防火墙及SELinux

  • 各节点之间可通过主机名互相通信:非必须

  • 建议使用/etc/hosts文件实现:非必须

  • 各节点之间的root用户可以基于密钥认证的ssh服务完成互相通信:非必须

2.4 Keepalived 相关文件

  • 软件包名:keepalived

  • 主程序文件:/usr/sbin/keepalived

  • 主配置文件:/etc/keepalived/keepalived.conf

  • 配置文件示例:/usr/share/doc/keepalived/

  • Unit File:/lib/systemd/system/keepalived.service

  • Unit File的环境配置文件:/etc/sysconfig/keepalived

环境准备

RHEL7中可能会遇到一下bug

systemctl restart keepalived #新配置可能无法生效 systemctl stop keepalived;systemctl start keepalived #无法停止进程,需要 kill 停 止

主机ip
ka1.timinglee.orgeth0:172.25.254.10
ka2.timinglee.orgeth0:172.25.254.20
realserver1.timinglee.orgeth0:172.25.254.110
realserver2.timinglee.orgeth0:172.25.254.120
  • realserver1与realserver2
[root@realserver2 ~]# yum install httpd -y
[root@realserver1 ~]# echo 172.25.254.110 > /var/www/html/index.html
[root@realserver1 ~]# systemctl enable --now httpd

[root@realserver2 ~]# yum install httpd -y
[root@realserver2 ~]# echo 172.25.254.120 > /var/www/html/index.html
[root@realserver2 ~]# systemctl enable --now httpd

2.5keepalive 安装

  • ka1与ka2

[root@ka1 ~]# yum install keepalived -y

[root@ka2 ~]# yum install keepalived -y

2.6KeepAlived 配置说明

2.6.1 配置文件组成部分

配置文件:/etc/keepalived/keepalived.conf

配置文件组成

  • GLOBAL CONFIGURATION

    Global definitions: 定义邮件配置,route_id,vrrp配置,多播地址等

  • VRRP CONFIGURATION

    VRRP instance(s):定义每个vrrp虚拟路由器

  • LVS CONFIGURATION

    Virtual server group(s)

    Virtual server(s):LVS集群的VS和RS

2.6.2 配置语法说明
  • 帮助

man keepalived.conf

范例:
# 配置master端
[root@ka1 ~]# vim /etc/keepalived/keepalived.conf 

global_defs {
   notification_email {
        2803408609@qq.com
   }

   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 172.0.0.1
   smtp_connect_timeout 30
   router_id ka1.timinglee.org
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.0.18
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
}
[root@ka1 ~]# systemctl enable --now keepalived.service 

# 配置slave端
[root@ka2 ~]# vim /etc/keepalived/keepalived.conf 

global_defs {
   notification_email {
        2803408609@qq.com
   }

   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 172.0.0.1
   smtp_connect_timeout 30
   router_id ka1.timinglee.org
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.0.18
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
[root@ka1 ~]# systemctl enable --now keepalived.service 

抓包

[root@ka2 ~]# systemctl enable --now keepalived.service 
# 查看抓包 20流量并没有过来

# 此时关闭keepalived1服务 ka1
[root@ka1 ~]# systemctl stop  keepalived.service 

# 继续抓包 20流量出现
[root@ka1 ~]# tcpdump -i eth0 -nn host 224.0.0.18
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
11:06:34.929804 IP 172.25.254.20 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 80, authtype simple, intvl 1s, length 20


# 开启keepalived1的服务  ka1
[root@ka1 ~]# systemctl start  keepalived.service 

# 抓包 ,流量重新回到ka1
[root@ka1 ~]# tcpdump -i eth0 -nn host 224.0.0.18

流量重新返回

2.6.2.3启动keepalived日志功能

需将KA1与KA2相互ping通

第一步:查看无法ping通

第二步:172.25.254.10与172.25.254.20 同时添加参数

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf 
...此处省略...
   vrrp_iptable
}
...此处省略...
[root@ka1 ~]# systemctl restart keepalived.service 

[root@ka2 ~]# vim /etc/keepalived/keepalived.conf 
...此处省略...  
  vrrp_iptables
}
...此处省略...
[root@ka2 ~]# systemctl restart keepalived.service 

第二种方法:同时注销

第三步:测试

[root@ka1 ~]# ping 172.25.254.100
PING 172.25.254.100 (172.25.254.100) 56(84) bytes of data.
64 bytes from 172.25.254.100: icmp_seq=2 ttl=64 time=0.060 ms
64 bytes from 172.25.254.100: icmp_seq=3 ttl=64 time=0.052 ms
64 bytes from 172.25.254.100: icmp_seq=4 ttl=64 time=0.063 ms
From 172.25.254.10 icmp_seq=1 Destination Host Unreachable
[root@ka1 ~]# vim /etc/sysconfig/keepalived

KEEPALIVED_OPTIONS="-D -S 6"

[root@ka1 ~]# vim /etc/rsyslog.conf 
# Save boot messages also to boot.log
...此处省略...
local7.*                                                /var/log/boot.log
local6.*                                                /var/log/keepalived.log
...此处省略...

[root@ka1 ~]# systemctl restart rsyslog.service 

[root@ka1 ~]# systemctl restart rsyslog.service
[root@ka1 ~]# systemctl restart keepalived.service
[root@ka1 ~]# ll /var/log/keepalived
-rw------- 1 root root 4647 8月  12 13:40 /var/log/keepalived
[root@ka1 ~]#
2.6.2.4 实现独立子配置文件

当生产环境复杂时, /etc/keepalived/keepalived.conf 文件中内容过多,不易管理

将不同集群的配置,比如:不同集群的VIP配置放在独立的子配置文件中利用include 指令可以实现包含 子配置文件

  • 格式

include /path/file

范例:

# 创建子配置文件
[root@ka1 ~]# mkdir -p /etc/keepalived/conf.d

[root@ka1 ~]# vim /etc/keepalived/conf.d/172.25.254.100.conf
[root@ka1 ~]# cat /etc/keepalived/conf.d/172.25.254.100.conf
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
       172.25.254.100/24 dev eth0 label eth0:1
    }
}


[root@ka1 ~]# vim /etc/keepalived/keepalived.conf 

#vrrp_instance VI_1 {
#    state MASTER
#    interface eth0
#    virtual_router_id 100
#    priority 100
#    advert_int 1
#    authentication {
#        auth_type PASS
#        auth_pass 1111
#    }
#    virtual_ipaddress {
#       172.25.254.100/24 dev eth0 label eth0:1
#    }
#}

include "/etc/keepalived/conf.d/*.conf"   #相关子配置文件
[root@ka1 ~]# systemctl restart keepalived.service

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值