keepalived

一、高可用集群

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实现高可用

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

二、Keepalived部署

2.1keepalived 简介

vrrp 协议的软件实现,原生设计目的为了高可用 ipvs 服务
官网: http://keepalived.org/
功能:
基于 vrrp 协议完成地址流动
vip 地址所在的节点生成 ipvs 规则 ( 在配置文件中预先定义 )
ipvs 集群的各 RS 做健康状态检测
基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持 nginx haproxy 等服务

2.2Keepalived 架构

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

2.3Keepalived环境准备

四台7.9克隆机

KA1:172.25.254.10

KA2:17225.254.20

realserver1:172.25.254.110

realserver2:172.25.254.120

在realserver1和realserver2安装

测试:

2.4KeepAlived配置说明

2.4.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.4.2全局配置

2.4.3配置虚拟路由器

2.4.4启用keepalived日志功能

[root@KA1 ~]# vim /etc/sysconfig/keepalived

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

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

2.4.5实现独立子配置文件

当生产环境复杂时, /etc/keepalived/keepalived.conf 文件中内容过多,不易管理
将不同集群的配置,比如:不同集群的 VIP 配置放在独立的子配置文件中利用 include 指令可以实现包含 子配置文件
[root@KA1 ~]# mkdir /etc/keepalived/conf.d
[root@KA1 ~]# vim /etc/keepalived/keepalived.conf

.Keepalived 企业应用示例

3.1 实现master/slave Keepalived 单主架构

3.1.1 MASTER配置

[root@KA1 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
594233887@qq.com
}
notification_email_from keepalived@KA1.lee.org
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id KA1.lee.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 ens33
virtual_router_id 20
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.254.100/24 dev ens33 label ens33:1

}

3.2 抢占模式和非抢占模式

3.2.1 非抢占模式 nopreempt

默认为抢占模式 preempt ,即当高优先级的主机恢复在线后,会抢占低先级的主机的 master 角色,
这样会使 vip KA 主机中来回漂移,造成网络抖动, 建议设置为非抢占模式 nopreempt ,即高优先级主机恢复后,并不会抢占低优先级主机的 master 角色
非抢占模块下 , 如果原主机 down , VIP 迁移至的新主机 , 后续也发生 down , 仍会将 VIP 迁移回原主机
#ka1主机配置
 vrrp_instance VI_1 {
 state BACKUP
 interface ens33
 virtual_router_id 20
 priority 100   #优先级高
 nopreempt      #非抢占模式
 advert_int 1
 authentication {
 auth_type PASS
 auth_pass 1111
 }
 virtual_ipaddress {
 172.25.254.100/24 dev ens33 label ens33:1
 }
}

#KA2主机配置
 vrrp_instance VI_1 {
 state BACKUP
 interface ens33
 virtual_router_id 20
 priority 80   #优先级低
 advert_int 1
 nopreempt     #非抢占模式
 authentication {
 auth_type PASS
 auth_pass 1111
 }
 virtual_ipaddress {
172.25.254.100/24 dev etns33 label ens33:1
}
}

3.2.2 抢占延迟模式 preempt_delay

抢占延迟模式,即优先级高的主机恢复后,不会立即抢回 VIP ,而是延迟一段时间(默认 300s )再抢回 VIP
#ka1主机配置
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 20
priority 100 #优先级高
preempt_delay 10s #抢占延迟10s
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.254.100/24 dev ens33 label ens33:1
}
}
#KA2主机配置
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 20
priority 80 #优先级低
advert_int 1
preempt_delay 10s #抢占延迟10S
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.254.100/24 dev ens33 label ens33:1
}

3.3 VIP单播配置

默认 keepalived 主机之间利用多播相互通告消息,会造成网络拥塞,可以替换成单播,减少网络流量
[root@KA1 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
2961538434@qq.com
}
notification_email_from keepalived@KA1.lee.org
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id KA1.lee.org
vrrp_skip_check_adv_addr
#vrrp_strict          #注释此参数,与vip单播模式冲突
vrrp_garp_interval 0
vrrp_gna_interval 0
vrrp_ipsets keepalived
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 20
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 #本机IP
unicast_peer {
172.25.254.20       #指向对方主机IP
                    #如果有多个keepalived,再加其它节点的IP
} 
}
##在KA2主机中
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 20
priority 80
advert_int 1
preempt_delay 60
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 #本机ip
unicast_peer {
172.25.254.10 #对端主机IP
}
}
测试:

3.4 Keepalived 通知脚本配置

keepalived 的状态变化时,可以自动触发脚本的执行,比如:发邮件通知用户
默认以用户 keepalived_script 身份执行脚本
如果此用户不存在,以 root 执行脚本可以用下面指令指定脚本执行用户的身份

3.4.1 邮件配置

#安装邮件发送工具
[root@KA2 ~]# dnf install mailx -y
QQ邮箱配置
发送测试邮件
[root@ka1 ~]# echo hello world |mail -s test 2961538434@qq.com

3.4.2  实现 Keepalived 状态切换的通知脚本

创建通知脚本
# 在所有 keepalived 节点配置如下
#在所有 keepalived节点配置如下
[root@KA1 + KA2 ~]# vim /etc/keepalived/mail.sh
 #!/bin/bash
 mail_dest='2961538434@qq.com'
 mail_send()
 {
 mail_subj="$HOSTNAME to be $1 vip move"
 mail_mess="`date +%F\ %T`: vrrp move,$HOSTNAME change $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
 ;;
 *)
 ;;
 esac
[root@KA1 +KA2 ~]# chmod +x /etc/keepalived/mail.sh
[root@KA1 +K2 ~]#vim /etc/keepalived/keepalived.conf

3.4.3脚本的调用方法 

在 vrrp_instance VI_1 语句块的末尾加下面行
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
测试

3.5 实现 master/master Keepalived 双主架构    

master/slave 的单主架构,同一时间只有一个 Keepalived 对外提供服务,此主机繁忙,而另一台主机却 很空闲,利用率低下,可以使用master/master 的双主架构,解决此问题。

                     

3.6 实现IPVS的高可用性

准备web服务器并使用脚本绑定VIPweb服务器lo网卡

#准备两台后端RS主机
[root@realserver1~]# yum install httpd -y
[root@realserver1~]# echo  - 172.25.254.110 > /var/www/html/index.html
[root@realserver1 ~]# ip addr add 172.25.254.100/32 dev lo
[root@realserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@realserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@realserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@realserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

[root@realserver2 ~]# yum install httpd -y
[root@realserver1 ~]# echo - 172.25.254.120 > /var/www/html/index.html
[root@realserver2 ~]# ip addr add 172.25.254.100/32 dev lo
[root@realserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@realserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@realserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@realserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
配置 keepalived
[root@rhel7-ka1 ~]# vim /etc/keepalived/keepalived.conf
virtual_server 172.25.254.100 80 {
 delay_loop 6
 lb_algo wrr
 lb_kind DR
 protocol TCP

real_server 172.25.254.110 80 {
 weight 1
 HTTP_GET {
   url{
   path /
   status_code 200
 connect_timeout 3
 nb_get_retry 2
 delay_before_retry 2
}
}


real_server 172.25.254.120 80 {
 weight 1
 HTTP_GET {
  url {
  path /
  status_code 200
}
 connect_timeout 3
 nb_get_retry 2
 delay_before_retry 2
}
}
}

[root@ka1 ~]# systemctl stop keepalived.server

3.7 实现其它应用的高可用性 VRRP Script

keepalived 利用 VRRP Script 技术,可以调用外部的辅助脚本进行资源监控,并根据监控的结果实现优先 动态调整,从而实现其它应用的高可用性功能
参考配置文件: /usr/share/doc/keepalived/keepalived.conf.vrrp.localcheck

3.7.1 VRRP Script 配置

分两步实现:
 ·  定义脚本
    vrrp_script :自定义资源监控脚本, vrrp 实例根据脚本返回值,公共定义,可被多个实例调用,定 义在 vrrp 实例之外的独立配置块,一般放在 global_defs 设置块之后。
   通常此脚本用于监控指定应用的状态。一旦发现应用的状态异常,则触发对 MASTER 节点的权重减至 低于SLAVE 节点,从而实现 VIP 切换到 SLAVE 节点
vrrp_script <SCRIPT_NAME> {
script <STRING>|<QUOTED-STRING>      #此脚本返回值为非0时,会触发下面OPTIONS执行
OPTIONS
}
·调用脚本
      track_script :调用 vrrp_script 定义的脚本去监控资源,定义在 VRRP 实例之内,调用事先定义的
vrrp_script
track_script {
SCRIPT_NAME_1
SCRIPT_NAME_2
}

3.7.2利用脚本实现主从角色切换

[root@ka1 ~]# vim /etc/keepalived/test.sh
#!/bin/bash
[ ! -f "/mnt/lee" ]
[root@ka1 ~]# chmod +x /etc/keepalived/test.sh
[root@ka1 ~]# vim /etc/keepalived/keepalived.conf
  vrrp_script check_lee {
    script "/etc/keeplived/test.sh"
    interval 1
    weight -30
    fall 2
    rise 2
    timeout 2
}
3.7.3 实现 HAProxy 高可用
#在两个ka1和ka2先实现haproxy的配置
[root@ka1 & ka2 ~]# vim /etc/haproxy/haproxy.cfg
   listen webserver
     bind 172.25.254.100:80
     server web1 172.25.254.101:80 check
     server web2 172.25.254.102:80 check
#在两个ka1和ka2两个节点启用内核参数
[root@ka1 & ka2 ~]# vim /etc/sysctl.conf
net.ipv4.ip_nonlocal_bind = 1

#在ka1中编写检测脚本
[root@ka1 ~]# vim /etc/keepalived/test.sh
#!/bin/bash
/usr/bin/killall -0 haproxy
[root@ka1 ~]# chmod +x /etc/keepalived/test.sh
#在ka1中配置keepalived
[root@ka1 ~]#cat /etc/keepalived/keepalived.conf
   vrrp_script check_haproxy {
        script "/etc/keepalived/test.sh"
        interval 1
        weight -30
        fall 2
        rise 2
        timeout 2
}
测试:
root@ka1 ~]# systemctl stop haproxy.service

  • 10
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值