Keepalived安装与配置

Keepalived的安装过程

keepalived的安装非常简单,以操作系统环境Centos7为例,建议通过yum方式直接安装:

yum install keepalived

如果需要lvs功能,还需要安装ipvs模块:

yum install ipvsadm

也可以通过源码安装,过程如下:

#安装编译依赖工具
yum install -y gcc gcc-c++ wget popt-devel openssl openssl-devel
yum install -y libnl libnl-devel libnl3 libnl3-devel
yum install -y libnfnetlink-devel
cd /data
wget https://keepalived.org/software/keepalived-2.2.7.tar.gz
tar xf keepalived-2.2.7.tar.gz
cd keepalived-2.2.7/
#编译安装
./configure --sysconf=/etc
make -j 2 && make install
systemctl enable keepalived

在编译选项中,--sysconf指定了keepalived配置文件的安装路径,即路径为/etc/keepalived/keepalived.conf

Keepalived的全局配置

在上节安装Keepalived的过程中,指定了Keepalived配置文件的路径为/etc/Keepalived/Keepalived.conf,Keepalived的所有配置均在这个配置文件中完成。

由于Keepalived.conf文件中可配置的选项比较多,这里根据配置文件所实现的功能,将Keepalived配置分为三类,分别是:

  • 全局配置(Global Configuration)

  • VRRPD配置

  • LVS配置。

下面将主要介绍下Keepalived配置文件中一些常用配置选项的含义和用法。

Keepalived的配置文件都是以块(block)的形式组织的,每个块的内容都包含在{}中,以#!开头的行都是注释。

全局配置就是对整个Keepalived都生效的配置,基本内容如下:

! Configuration File for keepalived
global_defs  {
   notification_email {
     dba.gao@gmail.com
     ixdba@163.com
   }
   notification_email_from Keepalived@localhost
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL	 
}

全局配置以global_defs作为标识,在global_defs区域内的都是全局配置选项,其中:

  • notification_email用于设置报警邮件地址,可以设置多个,每行一个。注意,如果要开启邮件报警,需要开启本机的Sendmail服务。
  • notification_email_from用于设置邮件的发送地址。
  • smtp_server用于设置邮件的smtp server地址。
  • smtp_connect_timeout用于设置连接smtp server的超时时间。
  • router_id表示运行Keepalived服务器的一个标识,是发邮件时显示在邮件主题中的信息。

Keepalived的VRRPD配置

VRRPD配置是Keepalived所有配置的核心,主要用来实现Keepalived的高可用功能。

下面进入VRRP实例的配置,也就是配置Keepalived的高可用功能。

VRRP实例段主要用来配置节点角色(主或从)、实例绑定的网络接口、节点间验证机制、集群服务IP等。

下面是实例VI_1的一个配置样例。

vrrp_instance VI_1 {
    state MASTER		
    interface eth0		
    virtual_router_id  151	
    priority 100	
    advert_int 1  	
 	track_interface {
		eth0 
		eth1
	}
    authentication {
        auth_type PASS
        auth_pass qwaszx
    }
    virtual_ipaddress {		
        192.168.200.16
        192.168.200.17 dev eth1
        192.168.200.18 dev eth2
    }
	nopreempt 
	preemtp_delay  300
	notify_master "/etc/keepalived/master.sh "
    notify_backup "/etc/keepalived/backup.sh"
    notify_fault "/etc/keepalived/fault.sh"
}

以上VRRP配置以vrrp_instance作为标识,在这个实例中包含了若干配置选项,分别介绍如下:

  • vrrp_instance 是VRRP实例开始的标识,后跟VRRP实例名称。

  • state 用于指定Keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器。

  • interface 用于指定HA监测网络的接口。

  • virtual_router_id 是虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识,即在同一个vrrp_instance下,MASTER和BACKUP必须是一致的

  • priority 用于定义节点优先级,数字越大表示节点的优先级就越高。在一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级。

  • advert_int 用于设定MASTER与BACKUP主机之间同步检查的时间间隔,单位是秒。

  • track_interface 用于设置一些额外的网络监控接口,其中任何一个网络接口出现故障,Keepalived都会进入FAULT状态。

  • authentication 用于设定节点间通信验证类型和密码,验证类型主要有PASS和AH两种,在一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信。

  • virtual_ipaddress 用于设置虚拟IP地址(VIP),又叫做漂移IP地址。

    可以设置多个虚拟IP地址,每行一个。之所以称为漂移IP地址,是因为Keepalived切换到Master状态时,这个IP地址会自动添加到系统中,而切换到BACKUP状态时,这些IP又会自动从系统中删除。

    Keepalived通过ip address add命令的形式将VIP添加进系统中。要查看系统中添加的VIP地址,可以通过ip add命令实现。virtual_ipaddress段中添加的IP形式可以多种多样

    例如可以写成 192.168.16.189/24 dev eth1 这样的形式,而Keepalived会使用IP命令ip addr add 192.168.16.189/24 dev eth1将IP信息添加到系统中。

    因此,这里的配置规则和IP命令的使用规则是一致的。

  • nopreempt 设置的是高可用集群中的不抢占功能。

    在一个HA Cluster中,如果主节点死机了,备用节点会进行接管,主节点再次正常启动后一般会自动接管服务。这种来回切换的操作,对于实时性和稳定性要求不高的业务系统来说,还是可以接受的,而对于稳定性和实时性要求很高的业务系统来说,不建议来回切换,毕竟服务的切换存在一定的风险和不稳定性,在这种情况下,就需要设置nopreempt这个选项了。设置nopreempt可以实现主节点故障恢复后不再切回到主节点,让服务一直在备用节点工作,直到备用节点出现故障才会进行切换。

    在使用不抢占时,只能在state状态为BACKUP的节点上设置,而且这个节点的优先级必须高于其他节点

  • preemtp_delay 用于设置切换的延时时间,单位是秒。有时候系统启动或重启之后网络需要经过一段时间才能正常工作,在这种情况下进行发生主备切换是没必要的,此选项就是用来设置这种情况发生的时间间隔。在此时间内发生的故障将不会进行切换,而如果超过“preemtp_delay”指定的时间,并且网络状态异常,那么才开始进行主备切换。

  • notify_master:指定当Keepalived进入Master状态时要执行的脚本,这个脚本可以是一个状态报警脚本,也可以是一个服务管理脚本。Keepalived允许脚本传入参数,因此灵活性很强。

  • notify_backup:指定当Keepalived进入Backup状态时要执行的脚本,同理,这个脚本可以是一个状态报警脚本,也可以是一个服务管理脚本。

  • notify_fault:指定当Keepalived进入Fault状态时要执行的脚本,脚本功能与前两个类似。

  • notify_stop:指定当Keepalived程序终止时需要执行的脚本。

Keepalived的LVS配置

由于Keepalived属于LVS的扩展项目

因此, Keepalived可以与LVS无缝整合,轻松搭建一套高性能的负载均衡集群系统。

下面是Keepalived配置文件中关于LVS配置段的配置方法。

LVS段的配置以virtual_server作为开始标识,此段内容有两部分组成

分别是

  • real_server段
  • 健康检测段

下面是virtual_server段常用选项的一个配置示例:

virtual_server 192.168.12.200 80 {        
    delay_loop 6
	lb_algo rr	
	lb_kind DR 
	persistence_timeout 50
    persistence_granularity  <NETMASK>
	protocol TCP
	sorry_server <IPADDR>  <PORT>

下面介绍每个选项的含义。

  • virtual_server:设置虚拟服务器的开始,后面跟虚拟IP地址和服务端口,IP与端口之间用空格隔开。

  • delay_loop:设置健康检查的时间间隔,单位是秒。

  • lb_algo:设置负载调度算法,可用的调度算法有rr、wrr、lc、wlc、lblc、sh、dh等,常用的算法有rr和wlc。

  • lb_kind:设置LVS实现负载均衡的机制,有NAT、TUN和DR三个模式可选。

  • persistence_timeout:会话保持时间,单位是秒。

    这个选项对动态网页是非常有用的,为集群系统中的session共享提供了一个很好的解决方案。

    有了这个会话保持功能,用户的请求会一直分发到某个服务节点,直到超过这个会话的保持时间。

    需要注意的是,这个会话保持时间是最大无响应超时时间,也就是说,用户在操作动态页面时,如果在50秒内没有执行任何操作,那么接下来的操作会被分发到另外的节点,但是如果用户一直在操作动态页面,则不受50秒的时间限制。

  • persistence_granularity:此选项是配合persistence_timeout的,后面跟的值是子网掩码,表示持久连接的粒度。

    默认是255.255.255.255,也就是一个单独的客户端IP。

    如果将掩码修改为255.255.255.0,那么客户端IP所在的整个网段的请求都会分配到同一个real server上。

  • protocol:指定转发协议类型,有TCP和UDP两种可选。

  • ha_suspend:节点状态从Master到Backup切换时,暂不启用real server节点的健康检查。

  • sorry_server:相当于一个备用节点,在所有real server失效后,这个备用节点会启用。


下面是real_server段的一个配置示例:

real_server 192.168.12.132 80 {
	weight 3
	inhibit_on_failure
	notify_up  <STRING> | <QUOTED-STRING>
	notify_down <STRING> | <QUOTED-STRING>
}

下面介绍每个选项的含义。

  • real_server:是real_server段开始的标识,用来指定real server节点,后面跟的是real server的真实IP地址和端口,IP与端口之间用空格隔开。
  • weight:用来配置real server节点的权值。权值大小用数字表示,数字越大,权值越高。设置权值的大小可以为不同性能的服务器分配不同的负载,为性能高的服务器设置较高的权值,而为性能较低的服务器设置相对较低的权值,这样才能合理地利用和分配了系统资源。
  • inhibit_on_failure:表示在检测到real server节点失效后,把它的weight值设置为0,而不是从IPVS中删除。
  • notify_up:此选项与上面介绍过的notify_maser有相同的功能,后跟一个脚本,表示在检测到real server节点服务处于UP状态后执行的脚本。
  • notify_down:表示在检测到real server节点服务处于DOWN状态后执行的脚本。

健康检测段允许多种检查方式,常见的有HTTP_GET、SSL_GET、TCP_CHECK、SMTP_CHECK、MISC_CHECK。首先看TCP_CHECK检测方式示例:

TCP_CHECK  {
	connect_port 80
	connect_timeout  3
	nb_get_retry  3
	delay_before_retry  3 
} 

下面介绍每个选项的含义介。

  • connect_port:健康检查的端口,如果无指定,默认是real_server指定的端口。

  • connect_timeout:表示无响应超时时间,单位是秒,这里是3秒超时。

  • nb_get_retry | retry

    • 1.X版本是nb_get_retry
    • 2.X版本是retry

    表示重试次数,这里是3次。

  • delay_before_retry:表示重试间隔,这里是间隔3秒。


下面是HTTP_GET和SSL_GET检测方式的示例:

HTTP_GET |SSL_GET {
url  {         
path  /index.html
digest  e6c271eb5f017f280cf97ec2f51b02d3
status_code   200 
}
connect_port 80
bindto  192.168.12.80	
connect_timeout  3
nb_get_retry  3 
delay_before_retry  2 
} 

下面介绍每个选项的含义。

  • url:用来指定HTTP/SSL检查的URL信息,可以指定多个URL。

  • path:后跟详细的URL路径。

  • digest:SSL检查后的摘要信息,这些摘要信息可以通过genhash命令工具获取。

    例如:genhash -s 192.168.12.80 -p 80 -u /index.html。

  • status_code:指定HTTP检查返回正常状态码的类型,一般是200。

  • bindto:表示通过此地址来发送请求对服务器进行健康检查。


下面是MISC_CHECK检测方式的示例:

MISC_CHECK {
misc_path  /usr/local/bin/script.sh
misc_timeout  5
!misc_dynamic
}

MISC健康检查方式可以通过执行一个外部程序来判断real server节点的服务状态,使用非常灵活。
以下是常用的几个选项的含义。

  • misc_path:用来指定一个外部程序或者一个脚本路径。

  • misc_timeout:设定执行脚本的超时时间。

  • misc_dynamic:表示是否启用动态调整real server节点权重,!misc_dynamic表示不启用,相反则表示启用。

    在启用这功能后,Keepalived的healthchecker进程将通过退出状态码来动态调整real server节点的“weight”值,如果返回状态码为0,表示健康检查正常,real server节点权重保持不变;如果返回状态码为1,表示健康检查失败,那么就将real server节点权重设置为0;如果返回状态码为2~255之间任意数值,表示健康检查正常,但real server节点的权重将被设置为返回状态码减2,例如返回状态码为10,real server节点权重将被设置为8(10-2)。

到这里为止,Keepalived配置文件中常用的选项已经介绍完毕,在默认情况下,Keepalived在启动时会查找/etc/Keepalived/Keepalived.conf配置文件,如果配置文件放在其他路径下,通过Keepalived -f参数指定配置文件的路径即可。

在配置Keepalived.conf时,需要特别注意配置文件的语法格式,因为Keepalived在启动时并不检测配置文件的正确性,即使没有配置文件,Keepalived也照样能够启动,所以一定要保证配置文件正确。

补充

防火墙策略

普通iptables

$ iptables -I INPUT -p vrrp -j ACCEPT
$ ip6tables -I INPUT -p vrrp -j ACCEPT

# centos中的保存
$ service iptables save

ubuntu

$ vim /etc/ufw/after.rules
# 或者
$ vim /etc/ufw/after6.rules

-I INPUT -p vrrp -j ACCEPT

$ systemctl restart ufw
posted @ 2023-02-13 10:27  厚礼蝎  阅读(421)  评论(0编辑  收藏  举报