设为首页 收藏本站
查看: 1462|回复: 1

[经验分享] HA 集群软件 keepalived 详解

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-7-29 09:17:42 | 显示全部楼层 |阅读模式
下面的内容根据上课笔记总结而来

1、HA集群中的相关术语
1.1  节点(node)
运行keepalived进程的一个独立主机,称为节点,节点是HA的核心组成部分,每个节点上运行着操作系统和keepalived软件服务,在keepalived集群中,节点有主次之分,分别称为主节点和备用节点,每个节点拥有唯一的主机名,并且拥有属于自己的一组资源,例如  磁盘,文件系统,网络地址和应用服务等,主节点一般运行着一个或多个应用服务,而备用节点一般处于监控状态
1.2 资源(resource)
资源是一个节点可以控制的实体,并且当节点发生故障时,这些资源能够被其他节点接管,keepalived中,可以当做资源的实体有
磁盘分区   文件系统
VIP地址
应用程序服务
NFS文件系统
3.事件(event)
也就是集群中可能发生的事情,例如节点系统故障,网络连通故障,网卡驱动,应用程序故障等,这些事情都会导致节点的资源发生转移,HA的测试也是基于这些事情来进行的
4.动作(action)
事件发生时HA的响应方式,动作是由shell脚本控制的,例如当某个节点发送故障后,备份节点将通过事先设定好的执行脚本进行服务的关闭或启动,进而接管故障节点的资源
2、keepalived简介
keepalived是LInux下一个轻量级的高可用解决方案,他与heartbeat 实现的功能类似,都可以实现服务或网络的高可用,但又有区别,heartbeat是一个专业的,功能完善的高可用软件,它提供了HA软件所需的基本功能,比如心跳检测和资源接管,监测集群中的系统服务,在集群节点间转移vip的,heartbeat功能强大,但是部署和使用相对比较麻烦,与heartbeat相比,keepalived主要通过vrrp协议来实现高可用功能,部署和使用非常简单,所有配置只需一个配置文件即可
2.1 keepalived的用途
keepalived起初视为lvs设计的,专门用来监控集群系统中各个服务节点的状态,他根据layer 3,4交换机制检查每个服务节点的状态,如果某个服务节点出现异常,或工作出现故障,keepalived将检测到,并将出现故障的服务节点从集群系统中剔除,而在故障节点恢复正常后,keepalived又可以自动将服务节点重新加入到服务器集群中,而这些工作全部都自动完成,不需要人工干预,需要人工干预的只是修复出现故障的服务节点
keepalived后来又引入了vrrp,他的出现就是解决单点故障,实现高可用功能,因此keepalived一方面具有服务器状态监测和故障隔离功能,另一方面也具有HA功能,对于vrrp协议不明白的可以看我之前写过的hsrp及vrrp

2.2 keepalived的体系架构
keepalived是一个高度模块化的软件,结构简单,但扩展性很强,下面是keepalived体系架构图
QQ截图20160729091633.png
从图中可以看出,keepalived从整体上分为两层,用户空间层和内核空间层
内核空间层包含ipvs和NETLINK两个模块,ipvs是keepalived引入的一个第三方模块,通过ipvs可以实现基于IP的负载均衡集群,ipvs默认包含在lvs软件中


NETLINK模块主要用于实现一些高级路由框架和一些相关的网络功能,完成用户空间层netlink reflector模块发来的各种网络请求
用户空间层位于内核层之上,keepalived所有功能都在这里实现
3、keepalived的安装  ( 操作系统centos6.7)

[iyunv@centos01 tools]# wget http://www.keepalived.org/software/keepalived-1.2.12.tar.gz

[iyunv@centos01 tools]# tar xf keepalived-1.2.12.tar.gz
[iyunv@centos01 tools]# cd keepalived-1.2.12
[iyunv@centos01 keepalived-1.2.12]# ./configure --sysconf=/etc --with-kernel-dir=/usr/src/kernels/2.6.32-573.el6.x86_64/
QQ截图20160729091639.png
[iyunv@centos01 keepalived-1.2.12]# make && make install
QQ截图20160729091644.png

[iyunv@centos01 keepalived-1.2.12]# ln -s /usr/local/sbin/keepalived /sbin
[iyunv@centos01 keepalived-1.2.12]# chkconfig --add keepalived
[iyunv@centos01 keepalived-1.2.12]# chkconfig --level 345 keepalived on

说明:
--sysconf 指定了keepalived配置文件的安装路径,即路径为 /etc/keepalived/keepalived.conf

--with-kernel-dir 是个很重要的参数,这个参数并不是要把keepalived编译进内核,而是指定使用内核源代码中的头文件,即include目录,只有在使用lvs是才需要用到这个参数,其他时候是不需要的


4.keepalived基础功能应用实例
作为一个高可用集群软件,keepalived没有heartbeat专业的高可用集群软件功能强大,它不能实现集群资源的托管,也不能实现对集群中运行服务的监控,但这并不妨碍keepalived的易用性,他提供了
vrrp_script  nofify_master  nofify_backup等多个功能模块,通过这些模块也可以实现对集群自的托管以及集群服务的监控
4.1keepalived集成HA功能演示
在默认情况下,keepalived可以实现对系统死机,网络异常及keepalived本身进行监控,但这些还是不够的 ,因为集群中运行的服务也随时可能出现问题,因此还需要对集群运行服务的状态进行监控,当服务出现问题时也进行主备切换,keepalived作为一个优秀的高可用集群软件也考虑到了这一点,它提供了一个vrrp_script模块专门用来对集群服务资源进行监控
keepalived高可用集群环境部署说明 vip地址172.16.80.100

QQ截图20160729091649.png


主节点配置文件如下
[iyunv@centos01 keepalived]# cat keepalived.conf
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id http_master
}

vrrp_script check_httpd {

        script "killall -0 httpd"
        interval 2
}

vrrp_instance HA_1 {
    state MASTER
    interface eth0
    virtual_router_id 80
    priority 100
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass 1111
    }

notify_master "/etc/keepalived/master.sh"
notify_backup "/etc/keepalived/backup.sh"
notify_fault "/etc/keepalived/fault.sh"

track_script {
  check_httpd

}

    virtual_ipaddress {
        172.16.80.100
    }
}

备用节点配置如下
[iyunv@centos02 keepalived]# cat keepalived.conf
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id http_backup
}

vrrp_script check_httpd {

        script "killall -0 httpd"
        interval 2
}

vrrp_instance HA_1 {
    state BACKUP
    interface eth0
    virtual_router_id 80
    priority 85
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass 1111
    }

notify_master "/etc/keepalived/master.sh"
notify_backup "/etc/keepalived/backup.sh"
notify_fault "/etc/keepalived/fault.sh"

track_script {
  check_httpd

}

    virtual_ipaddress {
        172.16.80.100
    }
}

其中 master.sh 文件内容如下
[iyunv@centos01 keepalived]# cat master.sh
#!/bin/bash

LOGFILE=/var/log/keepalived-http-state.log
echo "[Master]">>$LOGFILE
date >> $LOGFILE

backup.sh内容如下
[iyunv@centos01 keepalived]# cat backup.sh
#!/bin/bash

LOGFILE=/var/log/keepalived-http-state.log
echo "[Backup]">>$LOGFILE
date >> $LOGFILE

fault.sh内容如下
[iyunv@centos01 keepalived]# cat fault.sh
#!/bin/bash

LOGFILE=/var/log/keepalived-http-state.log
echo "[Fault]">>$LOGFILE
date >> $LOGFILE

这三个脚本是监控keepalived角色的切换过程


4.2keepalived的启动过程分析
将配置好的master.sh  backup.sh  fault.sh三个文件一起复制到keepalived 备用节点的对应路径下面
先启动httd服务 最后启动keepalived服务

[iyunv@centos01 keepalived]# /etc/init.d/httpd start
[iyunv@centos01 keepalived]# /etc/init.d/keepalived start
观察主节点日志
QQ截图20160729091657.png









Jul 28 11:40:41 centos01 Keepalived[65330]: Starting Keepalived v1.2.12 (07/28,2016)
Jul 28 11:40:41 centos01 Keepalived[65331]: Starting Healthcheck child process, pid=65333
Jul 28 11:40:41 centos01 Keepalived[65331]: Starting VRRP child process, pid=65334
Jul 28 11:40:41 centos01 Keepalived_healthcheckers[65333]: Netlink reflector reports IP 172.16.80.116 added
Jul 28 11:40:41 centos01 Keepalived_healthcheckers[65333]: Netlink reflector reports IP 172.16.10.100 added
Jul 28 11:40:41 centos01 Keepalived_vrrp[65334]: Netlink reflector reports IP 172.16.80.116 added
Jul 28 11:40:41 centos01 Keepalived_vrrp[65334]: Netlink reflector reports IP 172.16.10.100 added
Jul 28 11:40:41 centos01 Keepalived_vrrp[65334]: Netlink reflector reports IP fe80::20c:29ff:fe4c:62c9 added
Jul 28 11:40:41 centos01 Keepalived_vrrp[65334]: Netlink reflector reports IP fe80::20c:29ff:fe4c:62d3 added
Jul 28 11:40:41 centos01 Keepalived_vrrp[65334]: Registering Kernel netlink reflector
Jul 28 11:40:41 centos01 Keepalived_vrrp[65334]: Registering Kernel netlink command channel
Jul 28 11:40:41 centos01 Keepalived_vrrp[65334]: Registering gratuitous ARP shared channel
Jul 28 11:40:41 centos01 Keepalived_vrrp[65334]: Opening file '/etc/keepalived/keepalived.conf'.
Jul 28 11:40:41 centos01 Keepalived_healthcheckers[65333]: Netlink reflector reports IP fe80::20c:29ff:fe4c:62c9 added
Jul 28 11:40:41 centos01 Keepalived_healthcheckers[65333]: Netlink reflector reports IP fe80::20c:29ff:fe4c:62d3 added
Jul 28 11:40:41 centos01 Keepalived_healthcheckers[65333]: Registering Kernel netlink reflector
Jul 28 11:40:41 centos01 Keepalived_healthcheckers[65333]: Registering Kernel netlink command channel
Jul 28 11:40:41 centos01 Keepalived_healthcheckers[65333]: Opening file '/etc/keepalived/keepalived.conf'.
Jul 28 11:40:41 centos01 Keepalived_healthcheckers[65333]: Configuration is using : 7653 Bytes
Jul 28 11:40:41 centos01 Keepalived_vrrp[65334]: Configuration is using : 65695 Bytes
Jul 28 11:40:41 centos01 Keepalived_vrrp[65334]: Using LinkWatch kernel netlink reflector...
Jul 28 11:40:41 centos01 Keepalived_vrrp[65334]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]
Jul 28 11:40:41 centos01 Keepalived_healthcheckers[65333]: Using LinkWatch kernel netlink reflector...
Jul 28 11:40:41 centos01 Keepalived_vrrp[65334]: VRRP_Script(check_httpd) succeeded
Jul 28 11:40:43 centos01 Keepalived_vrrp[65334]: VRRP_Instance(HA_1) Transition to MASTER STATE
Jul 28 11:40:45 centos01 Keepalived_vrrp[65334]: VRRP_Instance(HA_1) Entering MASTER STATE
Jul 28 11:40:45 centos01 Keepalived_vrrp[65334]: VRRP_Instance(HA_1) setting protocol VIPs.
Jul 28 11:40:45 centos01 Keepalived_vrrp[65334]: VRRP_Instance(HA_1) Sending gratuitous ARPs on eth0 for 172.16.80.100
Jul 28 11:40:45 centos01 Keepalived_healthcheckers[65333]: Netlink reflector reports IP 172.16.80.100 added
Jul 28 11:40:50 centos01 Keepalived_vrrp[65334]: VRRP_Instance(HA_1) Sending gratuitous ARPs on eth0 for 172.16.80.100

QQ截图20160729091702.png
[iyunv@centos01 keepalived]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:4c:62:c9 brd ff:ff:ff:ff:ff:ff
    inet 172.16.80.116/24 brd 172.16.80.255 scope global eth0
    inet 172.16.80.100/32 scope global eth0   
    inet6 fe80::20c:29ff:fe4c:62c9/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:4c:62:d3 brd ff:ff:ff:ff:ff:ff
    inet 172.16.10.100/24 brd 172.16.10.255 scope global eth1
    inet6 fe80::20c:29ff:fe4c:62d3/64 scope link
       valid_lft forever preferred_lft forever

观察备用节点日志
QQ截图20160729091707.png
[iyunv@centos02 keepalived]# tail -f /var/log/messages
Jul 28 11:40:52 centos02 Keepalived[4360]: Starting Keepalived v1.2.12 (07/22,2016)
Jul 28 11:40:52 centos02 Keepalived[4361]: Starting Healthcheck child process, pid=4363
Jul 28 11:40:52 centos02 Keepalived[4361]: Starting VRRP child process, pid=4364
Jul 28 11:40:52 centos02 Keepalived_healthcheckers[4363]: Netlink reflector reports IP 172.16.80.117 added
Jul 28 11:40:52 centos02 Keepalived_vrrp[4364]: Netlink reflector reports IP 172.16.80.117 added
Jul 28 11:40:52 centos02 Keepalived_healthcheckers[4363]: Netlink reflector reports IP fe80::20c:29ff:fe45:fe30 added
Jul 28 11:40:52 centos02 Keepalived_healthcheckers[4363]: Registering Kernel netlink reflector
Jul 28 11:40:52 centos02 Keepalived_healthcheckers[4363]: Registering Kernel netlink command channel
Jul 28 11:40:52 centos02 Keepalived_vrrp[4364]: Netlink reflector reports IP fe80::20c:29ff:fe45:fe30 added
Jul 28 11:40:52 centos02 Keepalived_vrrp[4364]: Registering Kernel netlink reflector
Jul 28 11:40:52 centos02 Keepalived_vrrp[4364]: Registering Kernel netlink command channel
Jul 28 11:40:52 centos02 Keepalived_vrrp[4364]: Registering gratuitous ARP shared channel
Jul 28 11:40:53 centos02 Keepalived_healthcheckers[4363]: Opening file '/etc/keepalived/keepalived.conf'.
Jul 28 11:40:53 centos02 Keepalived_healthcheckers[4363]: Configuration is using : 7508 Bytes
Jul 28 11:40:53 centos02 Keepalived_healthcheckers[4363]: Using LinkWatch kernel netlink reflector...
Jul 28 11:40:53 centos02 Keepalived_vrrp[4364]: Opening file '/etc/keepalived/keepalived.conf'.
Jul 28 11:40:53 centos02 Keepalived_vrrp[4364]: Configuration is using : 65550 Bytes
Jul 28 11:40:53 centos02 Keepalived_vrrp[4364]: Using LinkWatch kernel netlink reflector...
Jul 28 11:40:53 centos02 Keepalived_vrrp[4364]: VRRP_Instance(HA_1) Entering BACKUP STATE
Jul 28 11:40:53 centos02 Keepalived_vrrp[4364]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]
Jul 28 11:40:53 centos02 Keepalived_vrrp[4364]: VRRP_Script(check_httpd) succeeded
[iyunv@centos02 keepalived]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:45:fe:30 brd ff:ff:ff:ff:ff:ff
    inet 172.16.80.117/24 brd 172.16.80.255 scope global eth0
    inet6 fe80::20c:29ff:fe45:fe30/64 scope link
       valid_lft forever preferred_lft forever
可以看到在备用节点上面是不会VIP地址的,如果别用节点也出现了VIP地址,说明集群出现了脑裂,这是一种不正常的情况

这次我们先加快的的介绍到这里,keepalived的缺点就是配置文件没有语法检查功能,配置错了 依然能启动,这点需要特别注意,下次我们再来介绍故障切换及恢复 及通过vrrp_script实现对集群资源的监控

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-250959-1-1.html 上篇帖子: HA 集群软件 keepalived 详解2 下篇帖子: Linux HA Cluster高可用集群之HeartBeat2 软件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表