web集群-高可用集群-keepalived

概念

Keepalived用来监控集群系统中各个服务节点的状态,基于C语言编译,通过VRRP协议解决静态路由的单点故障,可保证网络的不间断、稳定的运行。

作用

1、健康检测
2、故障转移:当主(MASTER)失效或出现故障时,备份(BACKUP)将自动接管主负载均衡器的所有工作。实行抢占式

官方站点http://www.keepalived.org
官方文档http://www.keepalived.org/documentation.html

原理

Keepalived dirctors之间的故障切换转移,是通过VRRP协议来实现的。
当keepalived directors正常工作时,主节点会不断向备份节点发广播心跳信息,告诉备节点自己存在,(主-------广播包----->备)
当主节点故障,备节点检测不到心跳信息将接管主节点的VIP(虚拟IP)及服务。
当主节点恢复,备节点释放自己接管的资源与服务,恢复备用角色。

运行机制

Keepalived工作在TCP/IP参考模型的第三层、第四层和第五层,也就是网络层、传输层和应用层。Keepalived运行机制如下:

网络层,运行着四个协议:互连网协议(IP)、互连网控制报文协议(ICMP)、地址转换协议(ARP)以及反向地址转换协议(RARP)。
Keepalived在网络层采用的工作方式是通过ICMP向服务器集群中的每个节点发送一个ICMP的数据包(类似于 ping 实现的功能),如果某个节点没有返回响应数据包,那么就认为此节点发生了故障,Keepalived将报告此节点失效,并从服务器集群中剔除故障节点。

传输层,提供两个协议;传输控制协议(TCP)和用户数据协议(UDP)。
Keepalived在传输层就是利用TCP的端口连接和扫描技术来判断集群节点是否正常的。
Keepalived一旦在传输层探测到这些端口没有响应数据返回,就认为这些端口发生异常,然后强制将此端口对应的节点从服务器集群组中移除。

应用层,运行FTP、TELNET、SMTP、DNS 等各种不同类型的高层协议,
Keepalived将根据用户的设定监测各种程序或服务是否允许正常,
如果Keepalived 的监测结果与用户设定不一致时,Keepalived将把对应的服务从服务器中移除。

keepalived中master与backup的选举规则

master的角色主要由vrrp_script 模块中的“priority”与vrrp_script模块中的“weight”值决定,默认只由proority值决定。
由于vrrp_script 的weight值会根据检测的服务是否成功而改变,会产生角色选举失败的现象,以至于集群不产生故障转移和切换。
不论weight的值是否正负,当 |weight|>主的priority-备的priority 该服务才不会产生错误。

安装与应用

yum安装

1、下载
# yum install keepalived -y

2、相关文件
# rpm -qc keepalived
/etc/keepalived/keepalived.conf
/etc/sysconfig/keepalived

源码安装

1、下载keepalived源码包
[root@node1 ~]# wget -c https://www.keepalived.org/software/keepalived-2.1.0.tar.gz

2、解压到指定路径
[root@node1 ~]# tar xvf keepalived-2.1.0.tar.gz -C /usr/local/src/

3、下载编译环境的包
[root@node1 ~]# yum install gcc gcc-c++ make -y

4、查看帮助
[root@node1 keepalived-2.1.0]# # ./configure --help
--prefix=PREFIX  	#即将安装的位置,默认在/usr/local目录下
--bindir=DIR		#命令放置的目录
--sbindir=DIR		#管理员命令放置的目录
--sysconfdir=DIR	#配置文件放置的目录

5、安装依赖包
[root@node1 ~]# yum install kernel-devel openssl-devel -y

6、编译安装;指定安装位置与配置文件位置
[root@node1 keepalived-2.1.0]# #./configure --prefix=/usr/local/keepalived --sysconfdir=/etc
[root@node1 keepalived-2.1.0]# #make
[root@node1 keepalived-2.1.0]# #make install

7、将命令做软连接
[root@node1 ~]# ln -vs /usr/local/keepalived/sbin/keepalived  /usr/sbin/
[root@node1 ~]# ln -vs /usr/local/keepalived/bin/genhash  /usr/sbin/

脚本文件/usr/lib/systemd/system/keepalived.service
配置文件/etc/keepalived/keepalived.conf

不抢占模式与抢占模式

不抢占模式说明

在高可用(HA)集群中,当主节点宕机,备份节点接管资源与服务,当主节点恢复使用,备份节点继续服务。

抢占模式说明

在集群中,当主节点宕机,备份节点接管资源与服务,当主节点恢复使用,备份节点回归备份角色,主节点重新接管资源与服务。

keepalived的抢占机制说明:

keepalived默认抢占机制
keepalived不抢占参数:nopreempt
keepalived不抢占机制中主备节点的状态必须都为BACKUP

示例配置

主备节点keepalived 尽量版本一致
本示例都以源码按装,版本keepalived-2.1.0
基础环境:关闭防火墙及SElinux

# systemctl stop firewalld.service 

1、单实例双主模式的keepalived测试

主机名及地址 作用
node01:192.168.16.11 keepalived主节点
node02:192.168.16.12 keepalived备节点
内核版本 3.10.0-1062.el7.x86_64
发行版本 CentOS Linux release 7.7.1908 (Core)

默认抢占模式

主节点:node1

[root@node1 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
   
   notification_email {
   
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
#   vrrp_skip_check_adv_addr
#   vrrp_strict
#   vrrp_garp_interval 0
#   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
   
    state MASTER			#主节点状态
    interface ens33 		#修改网卡名
    virtual_router_id 51
    priority 100			#主节点优先级
    advert_int 1
    authentication {
   
        auth_type PASS		#验证类型:明文
        auth_pass 1111		#掩码;255.255.255.255
    }
    virtual_ipaddress {
   
        192.168.16.100		#虚拟IP(VIP)
    }   
} 

备节点:node2

[root@node1 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   
   notification_email {
   
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
#   vrrp_skip_check_adv_addr
#   vrrp_strict
#   vrrp_garp_interval 0
#   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
   
    state BACKUP			#修改状态名,为备节点
    interface ens33			#修改网卡名,与自己本机匹配
    virtual_router_id 51
    priority 80				#修改优先级,比主节点小
    advert_int 1
    authentication {
   
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
   
        192.168.16.100		#配置虚拟ip
    }   
}

主备开启服务:

# systemctl start keepalived.service 

测试:

1、主节点查看是否有虚拟IP
[root@node1 ~]# ip a | grep 192.168.16.100
    inet 192.168.16.100/32 scope global ens33

2、跟踪主节点日志,关闭主节点keepalived服务,观察keepalived运行机制
[root@node1 ~]# systemctl stop keepalived.service 

[root@node1 ~]# tail -f /etc/log
Mar  7 19:49:58 node1 Keepalived[35756]: Stopping
Mar  7 19:49:58 node1 systemd: Stopping LVS and VRRP High Availability Monitor...
Mar  7 19:49:58 node1 Keepalived_vrrp[35757]: (VI_1) sent 0 priority	#设置优先级为0
Mar  7 19:49:58 node1 Keepalived_vrrp[35757]: (VI_1) removing VIPs. 	#移除VIP
Mar  7 19:49:59 node1 Keepalived_vrrp[35757]: Stopped - used 0.005873 user time, 0.200858 system time
Mar  7 19:49:59 node1 Keepalived[35756]: CPU usage (self/children) user: 0.000000/0.005888 system: 0.002349/0.202549
Mar  7 19:49:59 node1 Keepalived[35756]: Stopped Keepalived v2.1.0 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值