高可用集群keepalived详解(基础部署与企业应用示例)

目录

一、高可用集群简介

1.1 集群的类型

 1.2系统的可用性

1.3 如何实现高可用

1.4 VRRP(虚拟路由冗余协议)---解决静态网关单点风险

1.4.1 VRRP相关术语

 1.4.2 VRRP相关技术

二、Keepalived 部署

 2.1 keepalived 架构

2.2 环境准备 

三、keepalived基本配置

3.1 全局配置以及虚拟路由器

3.1.1 在ka1上面的配置

3.1.2 在ka2上面的配置 

3.1.2 抓包测试

3.2  使得ka1,ka2能够ping vip

 3.2.1 加上vrrp_iptables

 3.2.2 注释vrrp_iptables和vrrp_strict

3.3  实现日志独立功能

3.4 实现独立子配置文件

四、应用示例配置

4.1 抢占模式和非抢占模式

 4.2 抢占延迟模式 preempt_delay

4.3 VIP单播配置

4.3.1 ka1上面

 4.3.2 ka2上面

 4.3.3 抓包测试

4.4 邮件配置并实现脚本调用

 4.4.1 编辑邮件文件 

4.4.2 编写脚本

 4.4.3编写主配置文件----添加

 4.4.4 重启服务测试


前言:前面我们学到了通过lvs实现四层负载均衡,haproxy实现七层负载均衡,但是有一个不足的地方就是,当haproxy或者lvs的中心调度器出现故障了,该服务就失效了。于是我们就可以通过备份这个调度器来解决问题。这个就是高可用集群,其可以让负载均衡实现高性能。本章主要讲解高可用集群keepalived来解决该功能。

一、高可用集群简介

1.1 集群的类型

  • LBLoad Balance 负载均衡: LVS/HAProxy/nginxhttp/upstream, stream/upstream
  • HAHigh Availability 高可用集群 数据库、Redis
  • SPoF: Single Point of Failure,解决单点故障:HPCHigh Performance Computing 高性能集群

 1.2系统的可用性

SLA Service-Level Agreement 服务等级协议(提供服务的企业与客户之间就服务的品质、水准、性能等方面所达成的双方共同认可的协议或契约)
简单来说就是:A = MTBF / (MTBF+MTTR
99.95%:(60*24*30)*(1-0.9995)=21.6 分钟 # 一般按一个月停机时间统计
指标 : 99.9%, 99.99%, 99.999%,99.9999%

1.3 如何实现高可用

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

就是使用冗余机制:有以下几种形式

  • active/passive /
  • active/active 双主
  • active --> HEARTBEAT(心跳线) --> passive
  • active <--> HEARTBEAT <--> active

keepalived的原理就是使用vrrp协议来做,来实现主备,双主。

1.4 VRRP(虚拟路由冗余协议)---解决静态网关单点风险

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

软件层:keepalived实现

主要原理就是为了让外部人员访问内部网络。

1.4.1 VRRP相关术语

  •  虚拟路由器:Virtual Router
  • 虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
  • VIPVirtual IP
  • VMAC Virutal MAC (00-00-5e-00-01-VRID)
  • 物理路由器:

    • master:主设备
    • backup:备用设备
    • priority:优先级---------主要是优先级起作用来起到主备切换。

 1.4.2 VRRP相关技术

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

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

安全认证:

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

工作模式:

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

二、Keepalived 部署

 keepalived的功能作用:

  • 基于vrrp协议完成地址流动
  • vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
  • ipvs集群的各RS做健康状态检测
  • 基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginxhaproxy等服务

 2.1 keepalived 架构

  • 用户空间核心组件:
  •         vrrp stack:VIP消息通告
  •         checkers:监测real server
  •         system call:实现 vrrp 协议状态转换时调用脚本的功能
  •         SMTP:邮件组件
  •         IPVS wrapper:生成IPVS规则
  •         Netlink Reflector:网络接口
  •         WatchDog:监控进程
  • 控制组件:提供keepalived.conf 的解析器,完成Keepalived配置
  • IO复用器:针对网络目的而优化的自己的线程抽象
  • 内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限

2.2 环境准备 

 

 准备四台虚拟机其IP,主机名配置如下

主机名IP虚拟IP(VIP)功能
ka1

172.25.254.10

172.25.254.100keepalived服务
ka2

172.25.254.20

172.25.254.100keepalived服务
rs1

172.25.254.110

web服务
rs2

172.25.254.120

web服务

注意一定要关闭selinux,和防火墙,不然在后面配置vrrp时不起作用。

在rs1,rs2 上面配置web服务:

[root@rs1 ~]# yum install httpd -y
[root@rs1 ~]# setenforce 0
[root@rs1 ~]# systemctl stop firewalld.service 
[root@rs1 ~]# echo 172.25.254.110 > /var/www/html/index.html
[root@rs1 ~]# systemctl enable --now httpd


[root@rs2 ~]# yum install httpd -y
[root@rs2 ~]# setenforce 0
[root@rs2 ~]# systemctl stop firewalld.service 
[root@rs2 ~]# echo 172.25.254.110 > /var/www/html/index.html
[root@rs2 ~]# systemctl enable --now httpd

#在ka上面能够访问
[root@ka1 ~]# curl 172.25.254.110
172.25.254.110
[root@ka1 ~]# curl 172.25.254.120
172.25.254.120

[root@ka2 ~]# curl 172.25.254.110
172.25.254.110
[root@ka2 ~]# curl 172.25.254.120
172.25.254.120

在ka1,ka2上面配置keepalived:

[root@ka1 ~]# setenforce 0
[root@ka1 ~]# systemctl stop firewalld.service 
[root@ka1 ~]# yum install keepalived -y
[root@ka1 ~]# systemctl enable --now keepalived

[root@ka2 ~]# setenforce 0
[root@ka2 ~]# systemctl stop firewalld.service 
[root@ka2 ~]# yum install keepalived -y
[root@ka2 ~]# systemctl enable --now keepalived

以上咋们的环境就搭建好了,现在就可做实验配置了。

三、keepalived基本配置

3.1 全局配置以及虚拟路由器

首先我们得keepalived的主配置文件为/etc/keepalived/keepalived.conf,我们主要是在这里面进行配置,也可以弄成子配置文件,这将会在后面进行讲解。

3.1.1 在ka1上面的配置

首先打开配置文件,找到global_defs(全局),vrrp_instance VI_1 (配置虚拟子接口)进行如下配置:

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

其优先级为100,其作为主服务器。

然后我们要重启服务,进行测试,其就出现VIP来供我们使用。

[root@ka1 ~]# systemctl restart keepalived
[root@ka1 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.25.254.10  netmask 255.255.255.0  broadcast 172.25.254.255
        inet6 fe80::20c:29ff:fe3e:a08f  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:3e:a0:8f  txqueuelen 1000  (Ethernet)
        RX packets 42163  bytes 3462633 (3.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 41245  bytes 3390930 (3.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.25.254.100  netmask 255.255.255.0  broadcast 0.0.0.0
        ether 00:0c:29:3e:a0:8f  txqueuelen 1000  (Ethernet)

3.1.2 在ka2上面的配置 

ka2也是先修改配置文件。其相对于主服务器的修改变动内容如下标红地方,其他地方的配置都是一样的。

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

优先级设为80 ,其就作为备份服务器使用,

 重启测试,然后就发现ka2上是没有VIP的。

3.1.2 抓包测试

[root@ka1 ~]# tcpdump -i ens33 -nn host 224.0.0.18
首先是10为主在发送数据。

然后关闭ka1的keepalived服务再查看该走向,其VIP就会到ka2上面

然后再重启ka1的服务,再查看,发现又出现了。

以上就是我们主备之间简单的配置。实现简单的主备服务。

3.2  使得ka1,ka2能够ping vip

 3.2.1 加上vrrp_iptables

在配置文件里面加上vrrp_iptables,就可以实现了。-----注意ka1,ka2都要设置,这样才能都实现。

测试界面如下:在ka1,ka2上面

 3.2.2 注释vrrp_iptables和vrrp_strict

在配置文件里面注释vrrp_iptables和vrrp_strict,就可以实现了。-----注意ka1,ka2都要设置,这样才能都实现。如下

测试界面如下:

3.3  实现日志独立功能

这个我就在ka1上做示例啦。

修改/etc/sysconfig/keepalived配置。如下:

[root@ka1 ~]# vim /etc/sysconfig/keepalived
[root@ka1 ~]# cat /etc/sysconfig/keepalived
# Options for keepalived. See `keepalived --help' output and keepalived(8) and
# keepalived.conf(5) man pages for a list of all options. Here are the most
# common ones :
#
# --vrrp               -P    Only run with VRRP subsystem.
# --check              -C    Only run with Health-checker subsystem.
# --dont-release-vrrp  -V    Dont remove VRRP VIPs & VROUTEs on daemon stop.
# --dont-release-ipvs  -I    Dont remove IPVS topology on daemon stop.
# --dump-conf          -d    Dump the configuration data.
# --log-detail         -D    Detailed log messages.
# --log-facility       -S    0-7 Set local syslog facility (default=LOG_DAEMON)
#

KEEPALIVED_OPTIONS="-D -S 6"

 然后再修改/etc/rsyslog.conf,添加内容如下。

最后重启测试查看。

[root@ka1 ~]# systemctl restart keepalived

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

查看日志,就出现以下内容了

3.4 实现独立子配置文件

 主要是在主配置文件中用include来包含子配置文件。

这里我是把配置vip的配置写到子配置文件中的

然后我们需要在外面创建目录文件。

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

 然后我们重启一下,发现服务还能启用,子配置文件就使用完成。

四、企业应用示例

4.1 抢占模式和非抢占模式

默认为抢占模式 preempt ,即当高优先级的主机恢复在线后,会抢占低先级的主机的 master 角色,
这样会使 vip KA 主机中来回漂移,造成网络抖动,
建议设置为非抢占模式 nopreempt ,即高优先级主机恢复后,并不会抢占低优先级主机的 master 角色
非抢占模块下 , 如果原主机 down , VIP 迁移至的新主机 , 后续也发生 down , 仍会将 VIP 迁移回原主机

注意:要关闭 VIP抢占,必须将各 keepalived 服务器state配置为BACKUP

ka1上主配置文件的配置:添加nopreempt,并修改BACKUP。

 ka2上面也要添加nopreempt。

然后我们可以通过在ka1,和ka2上面stop,restart    keepalived 服务来观察vip的走向。

 4.2 抢占延迟模式 preempt_delay

抢占延迟模式,即优先级高的主机恢复后,不会立即抢回 VIP ,而是延迟一段时间(默认 300s)再抢回 VIP
preempt_delay # # 指定抢占延迟时间为 #s ,默认延迟 300s
注意:需要各 keepalived 服务器 state BACKUP, 并且不要启用 vrrp_strict
ka1上面的配置。也是直接在主配置文件中修改

然后我们可以 通过stop再进行start 查看VIP,间隔时间为抢占延时时间。做完这个实验之后建议删掉此配置。

4.3 VIP单播配置

默认 keepalived 主机之间利用多播相互通告消息,会造成网络拥塞,可以替换成单播,减少网络流量。
注意:启用 vrrp_strict 时,不能启用单播
# 在所有节点 vrrp_instance 语句块中设置对方主机的 IP,建议设置为专用于对应心跳线网络的地址,而非使用业务网络
unicast_src_ip <IPADDR> # 指定发送单播的源 IP
unicast_peer {
<IPADDR> # 指定接收单播的对方目标主机 IP
......
}
# 启用 vrrp_strict 时,不能启用单播 , 否则服务无法启动 , 并在 messages 文件中记录下面信息
Jun 16 17:50:06 centos8 Keepalived_vrrp[23180]: (m44) Strict mode does not
support authentication. Ignoring.
Jun 16 17:50:06 centos8 Keepalived_vrrp[23180]: (m44) Unicast peers are not
supported in strict mode
Jun 16 17:50:06 centos8 Keepalived_vrrp[23180]: Stopped - used 0.000606 user
time, 0.000000 system time
Jun 16 17:50:06 centos8 Keepalived[23179]: Keepalived_vrrp exited with permanent
error CONFIG. Terminating
Jun 16 17:50:06 centos8 systemd[1]: keepalived.service: Succeeded.
Jun 16 17:50:06 centos8 Keepalived[23179]: Stopped Keepalived v2.0.10
(11/12,2018)

4.3.1 ka1上面

#ka1,添加如下内容
[root@ka1 ~]# vim /etc/keepalived/keepalived.conf 
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev ens33 label ens33:1
   }
    unicast_src_ip 172.25.254.10
    unicast_peer {
      172.25.254.20
    }
}

 4.3.2 ka2上面

#ka2,添加如下内容
[root@ka2 ~]# vim /etc/keepalived/keepalived.conf 
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 100
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev ens33 label ens33:1
    }
    unicast_src_ip 172.25.254.20
    unicast_peer {
      172.25.254.10
    }

}

 4.3.3 抓包测试

以上配置做完后要重启服务。

可以发现,此时VIP在ka1--10上面。然后我们通过src:10------dst:20来抓包测试查看。

上面可以看出此时就是单播 ,因为此时src:20------dst:10来抓包测试时是不能实现这个服务。

然后我们stop,ka1主机,此时vip就在2上面,然后就可以src:20------dst:10来抓包测试。

但是src:10------dst:20是不能实现这个服务。

以上实验现象就是我们单播的实验现象啦。

4.4 邮件配置并实现脚本调用

 mailx----这个就是我们发邮件的工具。可以通过yum install mailx -y 去下载。一般是有的。

然后我使用的邮箱是QQ邮箱,然后要在在Linux配置邮件服务器代理,需要在QQ邮箱,启动邮件授权码,把这个复制过来,会有用。就是下面这个界面

 4.4.1 编辑邮件文件 

/etc/mail.rc  -------注意两台上都要配置。

[root@ka1 ~]# vim /etc/mail.rc 
#添加
set bsdcompat
set bsdcompat
set from=2758655249@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=2758655249@qq.com
set smtp-auth-password=‘这就是我复制的授权码’
set smtp-auth=login
set ssl-verify=ignore


[root@ka2 ~]# vim /etc/mail.rc 
#添加
set bsdcompat
set bsdcompat
set from=2758655249@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=2758655249@qq.com
set smtp-auth-password=‘这就是我复制的授权码’
set smtp-auth=login
set ssl-verify=ignore

测试发送邮箱:

[root@ka1 ~]# echo hello world | mail -s test 2758655249@qq.com

然后我就会在QQ上收到邮件

4.4.2 编写脚本

我们通过脚本来实现监控我们vip的变化位置再将其发送到邮箱上面。

编写脚本:

ka1上面:

[root@ka1 ~]# vim /etc/keepalived/mail.sh
[root@ka1 ~]# cat /etc/keepalived/mail.sh
#!/bin/bash
mail_dest='2758655249@qq.com'
mail_send()
{
        mail_subj="$HOSTNAME to be $1 vip 转移"
        mail_mess="`date +%F\ %T`: vrrp 转移,$HOSTNAME 变为 $1"
        echo "$mail_mess" | mail -s "$mail_subj" $mail_dest
}
case $1 in
    master)
    mail_send master
        ;;
    backup)
    mail_send backup
        ;;
     fault)
    mail_send fault
        ;;
     *)
        exit 1
      ;;
esac

ka2上面:

[root@ka2 ~]# vim /etc/keepalived/mail.sh
[root@ka2 ~]# cat /etc/keepalived/mail.sh
#!/bin/bash
mail_dest='2758655249@qq.com'
mail_send()
{
        mail_subj="$HOSTNAME to be $1 vip 转移"
        mail_mess="`date +%F\ %T`: vrrp 转移,$HOSTNAME 变为 $1"
        echo "$mail_mess" | mail -s "$mail_subj" $mail_dest
}
case $1 in
    master)
    mail_send master
        ;;
    backup)
    mail_send backup
        ;;
     fault)
    mail_send fault
        ;;
     *)
        exit 1
      ;;
esac

然后给执行权限

[root@ka1 ~]# chmod +x /etc/keepalived/mail.sh

[root@ka2 ~]# chmod +x /etc/keepalived/mail.sh

 4.4.3编写主配置文件----添加

(两台都要添加)--vim  etc/keepalived/keepalived.conf  添加下面标红的地方注意脚本文件路径是我们自己写的脚本路径。然后后面的参数就是我们脚本中需要输入的$1。

 4.4.4 重启服务测试

然后我们在ka1,ka2上可以重启服务,停止服务,我们的邮箱就会收到邮件。

以下就是我重启和停止服务收到邮件的信息

关闭ka1上面的keepalived的服务,其VIP会转移到ka2上面 

以上就是本章的所有内容啦。 我会在下一章再补充讲解一些企业应用的示例。

  • 18
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

左水水%

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值