本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告

【高可用】Keepalived 2.07编译安装与配置教程

发布:TangLu2019-2-19 11:23分类: 负载均衡 标签: keepalived 负载均衡 高可用

Keepalived作为一款高可用软件,经常和LVS等负载均衡配合使用,Keepalived可以让LVS的命令配置文件化,不用再去配置ipvsadm。Keepalived可以实现VIP的自动漂移,并且会检测后端服务器的状态,当主服务器工作出现故障时会将其剔除,并将备用服务器上线;当主服务器修复后,又会自动将备用服务器下线,让主服务器上线。这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障服务器。

一、Keepalived安装与配置

1、Keepalived的下载在官方网站http://www.keepalived.org/Keepalived1.2和1.4版本对环境要求有略微区别,由于1.4版本开始需要对IPV6进行支持,所以在编译安装Keepalived之前要先安装如下环境:

yum install -y libnl-devel libnl3-devel libnfnetlink-devel

2、在需要进行高可用配置的节点上都编译安装Keepalived编译安装完成后注意看是否有如图出现几个yes的标记,这个是代表安装Keepalived所支持的功能

./configure --prefix=/usr/local/keepalived 
 make 
 make install
/usr/local/keepalived/sbin/keepalived -v  #查看版本


如果编译时出现!!! OpenSSL is not properly installed on your system. !!! Can not include OpenSSL headers files.!!! 这样的报错需要先安装openssl-devel这个软件包

yum install openssl-devel -y



keep.png

 

3、keepalived在运行时需要指定配置文件,在安装好keepalived后有提供许多的配置文件模板(在keepalived/etc中)。启动Keepalived时默认会在/etc/keepalived目录中去找keepalived.conf文件,如果没有将配置文件放在该目录,启动Keepalived时需要使用-f选项来指定配置文件路径

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/  #拷贝配置文件到/etc/keepalived目录,该目录需要先创建
/usr/local/keepalived/sbin/keepalived -f /usr/local/keepalived/etc/keepalived/keepalived.conf  #以指定配置文件的方式来启动服务

4、启动服务后使用ps命令查看是否有进程在工作。然后通过ip add命令可以看到配置出的VIP信息已经出现在Master节点上(用ifconfig是看不到的) ,当Master挂掉后该VIP会自动绑定到Slave节点去。

keep2.png


keepalived1.png

5、下面是Keepalived配置文件示例,主备节点除了state标识和priority权重上需要调整,其他配置基本一样,如果发现有错误的话可以查看系统日志,keepalived把日志都写在了/var/log/message中

global_defs {
  # 全局设置,主要是主备切换时发送邮件通知,可以直接注释
  # notification_email {
  #   acassen@firewall.loc
  #   failover@firewall.loc
  #   sysadmin@firewall.loc
  # }
  # notification_email_from Alexandre.Cassen@firewall.loc
  # smtp_server 192.168.145.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  #标记该节点是master还是backup,但并不起实际作用,为了防止脑裂抢占IP可以都设置为backup
    interface eth0  #配置VIP绑定的网卡,这里使用和外网通信的网卡
    virtual_router_id 51  #取1-255之间的值,主备需要相同,这样才能成为一个组
    priority 100  #权重,数值高的主机是master,这是影响主备的关键
    nopreempt  #非抢占模式,需要设置state为backup
    advert_int 1  #主备之间通讯的间隔秒数,用于判断主节点是否存活
    authentication {
        auth_type PASS  #进行安全认证的方式,PASS或者AH方式,推荐PASS
        auth_pass 1111  #PASS的密码
    }
    virtual_ipaddress {
        192.168.145.200  #VIP地址最多可以写20个,keepalive启动后会自动配置该处VIP
    }
#    virtual_server 192.168.145.200 {  #如果访问VIP的话可以转发到后端其他节点
#        delay_loop 6 
#        protocol TCP
#        lb_algo rr
#        lb_kind DR
#        real_server 192.168.145.101 80{  #后端节点1
#          weight 1        }
#        
#        real_server 192.168.145.102 80{  #后端节点2
#           weight 1       }
#    }
# }



6、要验证服务的话可以在主备节点都安装好Nginx,然后将两台节点的默认首页文件分别修改(比如写上各自的IP做为标记),然后用VIP访问Nginx(或者设置一个域名解析到VIP上),看获取的页面内容是啥。最后将主节点关机或者杀掉keepalived,再次查看Nginx的内容,发现内容发生了切换,说明已经VIP已经自动跳到另一台节点。当之前的Keepalive恢复后又会将VIP抢过来,如果要防止抢占的话需要在配置文件中增加nopreempt选项,且state都需要是BACKUP,否则nopreempt无效。还有一个需要提醒开发人员注意的地方就是使用负载均衡后的session问题。


二、Keepalived脑裂问题

如果keepalived在使用中被强行杀死或者网络会出现脑裂问题,VIP会同时出现在主备节点上,只能通过重启网络解决

#两种导致脑裂的操作
pkill -9 keepalived 
iptables -A OUTPUT -p vrrp -j DROP
#恢复办法
systemctl restart network


三、Keepalived健康检查

在Keepalived的实际运用中需要对后端服务(比如Nginx)做一个健康检查来判断服务是否正常,否则Keepalived检查的对象是Keepalived自身服务而不是其他应用服务。所以存在后端Nginx服务挂了但是Keepalived还在正常工作,这个时候就不会切换VIP到正常的服务器上去。

Keepalived健康检查功能支持TCP_CHECK、HTTP_GET、MISC_CHECK、VRRP_SCRIPT方式。前两种比较简单,配置示例:

TCP_CHECK {
  connect_port 80
  connect_timeout 6
  nb_get_retry 3 
  delay_before_retry 3 
}

HTTP_GET {
  url {
    path /index.html
    status_code 200
  }
  connect_timeout 6
  nb_get_retry 3 
  delay_before_retry 3 
}


再看看vrrp_script脚本检查,该选项配合track_script使用。使用自定义脚本来判断服务是否异常或网关是否无法ping通等,如果出现异常就应该移除掉VIP,也就是主动来停止Keepalived服务:

global_defs {  #全局部分设置,全部注释都可以,主要是邮件信息
   notification_email {
     tanglu@qq.com  #主从切换时发送邮件通知,这里是收件人地址
   }
   notification_email_from tanglu@postfix.com  #发件人地址
   smtp_server 192.168.200.1  #邮件服务器地址
   smtp_connect_timeout 30  #发送邮件超时时间
   router_id LVS_DEVEL
}

vrrp_script check_nginx {  #定义循环检测
    script "/scripts/check_nginx.sh"
    interval 5  #5秒运行一次检测脚本
}

vrrp_instance VI_1 {
    interface ens33  
    nopreempt
    priority 100 
    advert_int 1  
    virtual_ipaddress {
        192.168.68.250  #VIP,最多设置20个
    }
    track_script {  #调用循环检测
    check_nginx
  }
}

check_nginx.sh脚本代码参考:

#!/bin/bash    
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]    
then    
/usr/local/nginx/sbin/nginx    
sleep 5    
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]    
then    
killall keepalived    
fi    
fi 


温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《【高可用】Keepalived 2.07编译安装与配置教程
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-266.html  [生成短网址]

已有 0/6427 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~