keepalived

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了keepalived相关的知识,希望对你有一定的参考价值。

1>keepalived原理及配置介绍
什么是Keepalived呢,keepalived观其名可知,保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生,Keepalived通过请求一个vip来达到请求真实IP地址的功能,而VIP能够在一台机器发生故障时候,自动漂移到另外一台机器上,从来达到了高可用HA功能。那说到keepalived时不得不说的一个协议就是VRRP协议,可以说这个协议就是keepalived实现的基础,那么首先我们来看看VRRP协议。

一,VRRP协议
学过网络的朋友都知道,网络在设计的时候必须考虑到冗余容灾,包括线路冗余,设备冗余等,防止网络存在单点故障,那在路由器或三层交换机处实现冗余就显得尤为重要,在网络里面有个协议就是来做这事的,这个协议就是VRRP协议,Keepalived就是巧用VRRP协议来实现高可用性(HA)的只需要把服务器当作路由器即可!keepalived完全遵守VRRP协议,包括竞选机制等等

二,Keepalived原理

Keepalived原理
keepalived也是模块化设计,不同模块实现不同的功能,下面是keepalived的组件
core check vrrp libipfwc libipvs-2.4 libipvs-2.6

core:是keepalived的核心,复杂主进程的启动和维护,全局配置文件的加载解析等
check:负责healthchecker(健康检查),包括了各种健康检查方式,以及对应的配置的解析包括LVS的配置解析
vrrp:VRRPD子进程,VRRPD子进程就是来实现VRRP协议的
libipfwc:iptables(ipchains)库,配置LVS会用到
libipvs*:配置LVS会用到
注意,keepalived和LVS完全是两码事,只不过他们各负其责相互配合而已

常用作用: 高可用web架构: LVS+keepalived+nginx+tomcat+php+eaccelerator(+nfs可选 可不选)
keepalived启动后会有三个进程
父进程:内存管理,子进程管理等等
子进程:VRRP子进程
子进程:healthchecker子进程

安装
yum -y install keepalived
systemctl enable keepalived
keepalived.conf配置文件说明
vim /etc/keepalived/keepalived.conf
keepalived服务安装完成之后,后面的主要工作就是在keepalived.conf文件中配置HA和负载均衡。一个功能比较完整的常用的keepalived配置文件,主要包含三块:全局定义块、VRRP实例定义块和虚拟服务器定义块。全局定义块是必须的,如果keepalived只用来做ha,虚拟服务器是可选的。下面是一个功能比较完整的配置文件模板:
全局定义块:global_defs
#email通知(notification_email、smtp_server、smtp_connect_timeout):用于服务有故障时发送邮件报警,可选项,不建议用。需要系统开启sendmail服务,建议用第三独立监控服务,如用nagios全面监控代替。
#vrrp_strict: 在全局配置下使用了vrrp_strict 参数。此参数为严格控制VRRP协议,不支持单播模式, 如果配置了此参数,keepalived 在启动后会在iptables中自动添加一条DROP VIP的规则,会导致vip无法通讯。注释掉此选项,将不会默认添加DROP规则。
router_id:用户标识本节点的名称,通常为hostname
VRRP实例定义块:vrrp_instance VI_1
vrrp_instance vrrp_test {
实例名

state MASTER
实例状态,只有MASTER 和 BACKUP两种状态,并且需要全部大写。抢占模式下,其中MASTER为工作状态,BACKUP为备用状态。当MASTER所在的服务器失效时,BACKUP所在的服务会自动把它的状态由BACKUP切换到MASTER状态。当失效的MASTER所在的服务恢复时,BACKUP从MASTER恢复到BACKUP状态。

interface eth0
对外提供服务的网卡接口,即VIP绑定的网卡接口。如:eth0,eth1。当前主流的服务器都有2个或2个以上的接口(分别对应外网和内网),在选择网卡接口时,一定要核实清楚。

virtual_router_id 66
虚拟路由ID,主备必须为一样,取值在0-255之间,用来区分多个instance的VRRP组播,同一网段内ID不能重复;

priority 100
节点优先级,用来选举master的,取值范围0~254,MASTER要比BACKUP高

advert_int 1
检查间隔默认为1秒,即1秒进行一次master选举(可以认为是健康查检时间间隔)

authentication {
auth_type PASS
auth_pass 1111
}
认证类型和验证密码。类型主要有 PASS、AH 两种,默认使用PASS类型,据说AH使用时有问题。验证密码为明文,同一vrrp 实例MASTER与BACKUP使用相同的密码才能正常通信。

nopreempt
禁止抢占服务。默认情况,当MASTER服务挂掉之后,BACKUP自动升级为MASTER并接替它的任务,当MASTER服务恢复后,升级为MASTER的BACKUP服务又自动降为BACKUP,把工作权交给原MASTER。当配置了nopreempt,MASTER从挂掉到恢复,不再将服务抢占过来。

virtual_ipaddress {
192.168.100.6
192.168.100.7
}
}
虚拟IP地址池,可以有多个IP,每个IP占一行,不需要指定子网掩码。注意:这个IP必须与我们的设定的vip保持一致。虚拟服务器:virtual_server定义块,该部分是用来管理LVS的,是实现keepalive和LVS相结合的模块。ipvsadm命令可以实现的管理在这里都可以通过参数配置实现
virtual_server 192.168.100.6 666 {
定义一个虚拟服务器,这个ip是virtual_ipaddress中定义的其中一个,后面一个空格,然后加上虚拟服务的端口号。

delay_loop 3
健康检查时间间隔,单位:秒

lb_algo rr
负载均衡调度算法,互联网应用常用方式为wlc或rr

lb_kind DR
负载均衡转发规则。包括DR、NAT、TUN 3种,一般使用路由(DR)转发规则

persistence_timeout 50
http服务会话保持时间,单位:秒

protocol tcp
转发协议,分为TCP和UDP两种

real_server 192.168.10.9 666 {
真实服务器IP和端口,可以定义多个

weight 1
负载权重,值越大,转发的优先级越高
notify_down
检测到real_server服务down后执行脚本

notify_up
检测real_server到服务up后执行脚本

TCP_CHECK { #健康检查方式, 健康检查方式一共有HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK这些
connect_timeout 3 #连接超时时间
nb_get_retry 3 #重连次数
delay_before_retry 3 #重连间隔时间
connect_port 23 #健康检查的端口
bindto <ip> #健康检查的IP地址
}
}
}
启动服务
systemctl start keepalived

启用ip转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

以上是关于keepalived的主要内容,如果未能解决你的问题,请参考以下文章

排错思路

keepalived快速入门

keepalived高可用

keepalived高可用

keepalived高可用

keepalived服务配置