设为首页 收藏本站
查看: 1396|回复: 0

[经验分享] keepalived安装部署及Flume+keepalived高可用

[复制链接]

尚未签到

发表于 2017-4-17 23:04:06 | 显示全部楼层 |阅读模式
Keepalived简介

keepalived是一款失效转发机制的软件, 基于VRRP协议来实现的WEB服务高可用方案,可以利用其来避免单点故障。它的作用是检测web服务器的状态,一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

Keepalived工作机制

在一个VRRP虚拟路由器中,有多台物理的VRRP路由器,但是这多台的物理的机器并不能同时工作,而是由一台称为MASTER的负责路由工作,其它的都是BACKUP,MASTER并非一成不变,VRRP让每个VRRP路由器参与竞选,最终获胜的就是MASTER。MASTER拥有一些特权,比如拥有虚拟路由器的IP地址,我们的主机就是用这个IP地址作为静态路由的。拥有特权的MASTER要负责转发发送给网关地址的包和响应ARP请求。


VRRP通过竞选协议来实现虚拟路由器的功能,所有的协议报文都是通过IP多播(multicast)包(多播地址224.0.0.18)形式发送的。虚拟路由器由VRID(范围0-255)和一组IP地址组成,对外表现为一个周知的MAC地址。所以,在一个虚拟路由器中,不管谁是MASTER,对外都是相同的MAC和IP(称之为VIP)。客户端主机并不需要因为MASTER的改变而修改自己的路由配置,对他们来说,这种主从的切换是透明的。


在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP广告包(VRRPAdvertisement message),BACKUP不会抢占MASTER,除非它的优先级(priority)更高。当MASTER不可用时(BACKUP收不到广告包), 多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性。

由于安全性考虑,VRRP包使用了加密协议进行加密。

初始化

路由器启动时,如果路由器的优先级是255(最高优先级,路由器拥有路由器地址),要发送VRRP通告信息,并发送广播ARP信息通告路由器IP地址对应的MAC地址为路由虚拟MAC,设置通告信息定时器准备定时发送VRRP通告信息,转为MASTER状态;否则进入BACKUP状态,设置定时器检查定时检查是否收到MASTER的通告信息。
  

  MASTER服务器

主机状态下的路由器要完成如下功能:

设置定时通告定时器;

用VRRP虚拟MAC地址响应路由器IP地址的ARP请求;

转发目的MAC是VRRP虚拟MAC的数据包;

如果是虚拟路由器IP的拥有者,将接受目的地址是虚拟路由器IP的数据包,否则丢弃;

当收到shutdown的事件时删除定时通告定时器,发送优先权级为0的通告包,转初始化状态;

如果定时通告定时器超时时,发送VRRP通告信息;

收到VRRP通告信息时,如果优先权为0,发送VRRP通告信息;否则判断数据的优先级是否高于本机,或相等而且实际IP地址大于本地实际IP,设置定时通告定时器,复位主机超时定时器,转BACKUP状态;否则的话,丢弃该通告包;


BACKUP服务器

备机状态下的路由器要实现以下功能:

设置主机超时定时器;

不能响应针对虚拟路由器IP的ARP请求信息;

丢弃所有目的MAC地址是虚拟路由器MAC地址的数据包;

不接受目的是虚拟路由器IP的所有数据包;

当收到shutdown的事件时删除主机超时定时器,转初始化状态;

主机超时定时器超时的时候,发送VRRP通告信息,广播ARP地址信息,转MASTER状态;
  收到VRRP通告信息时,如果优先权为0,表示进入MASTER选举;否则判断数据的优先级是否高于本机,如果高的话承认MASTER有效,复位主机超时定时器;否则的话,丢弃该通告包;



ARP查询处理

  当内部主机通过ARP查询虚拟路由器IP地址对应的MAC地址时,MASTER路由器回复的MAC地址为虚拟的VRRP的MAC地址,而不是实际网卡的 MAC地址,这样在路由器切换时让内网机器觉察不到;而在路由器重新启动时,不能主动发送本机网卡的实际MAC地址。如果虚拟路由器开启的ARP代理 (proxy_arp)功能,代理的ARP回应也回应VRRP虚拟MAC地址;
  


安装Keepalived



下载地址:http://www.keepalived.org/download.html
安装keepalived依赖组件:
yum install -y openssl-devel openssl
yum install -y popt-devel
编译安装:
tar zxvf keepalived-1.2.19.tar.gz
cd keepalived-1.2.19
./configure --prefix=/usr/local/keepalived
make && make install
配置为服务:
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
可以这样启动/停止:
service keepalived start|stop|reload|restart|condrestart|status
设为开机启动:
chkconfig keepalived on
查看keepalived日志:
tail -f  /var/log/message

keepalived+flume搭建高可用采集框架

下面以keepalived+flume为例,通过keepalived虚拟ip搭建Flume的高可用框架:

主服务器IP:10.0.1.68

从服务器IP:10.0.1.69

虚拟IP:10.0.1.71

主从服务器分别安装Nginx和Keepalived,可以将网站的域名解析到虚拟IP:10.0.1.254,这样主从服务器可以轮流的接管该虚拟IP,保证网站正常的对外访问。

主服务器(10.0.1.68)Keepalived的配置:
[iyunv@testcluster68 data]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
517894513@qq.com#这里可以定义多个报警邮箱
}
notification_email_from 516973786@qq.com
smtp_server smtp.qq.com
smtp_connect_timeout 30
router_id LVS_DEVEL
}

vrrp_script check_port {
script "/data/check_port.sh"
interval 2     #检测的间隔
weight 2    #如果脚本执行结果非0,并且weight配置的值小于0,则优先级相应的减少;如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加;其他情况,维持原本prority的优先级。
}
vrrp_instance VI_1 {
state MASTER     #显示定义为主服务器
interface eth0   #绑定的网口,该网口即上面提到的两个IP的接口
virtual_router_id 51     #定义的ID,官方的是51,主从服务器必须一致
mcast_src_ip 10.0.1.68   #主服务器的IP
priority 100    #优先级,任意定义,但是一定要比从服务器高
advert_int 1    #VRRPMulticast广播周期秒数
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {   #绑定的虚IP
10.0.1.71
}
track_script {
check_port    #调用检测脚本
}
}


从服务器(10.0.1.69)Keepalived的配置:
[iyunv@testcluster69 data]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
517894513@qq.com    #这里可以定义多个报警邮箱
}
notification_email_from 516973786@qq.com  #报警人
smtp_server smtp.qq.com
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script check_port {
script "/data/check_port.sh"
interval 2    #检测的间隔
weight 2      #如果脚本执行结果非0,并且weight配置的值小于0,则优先级相应的减少;如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加;其他情况,维持原本prority的优先级。
}
vrrp_instance VI_1 {
state BACKUP     #显示定义为从服务器
interface eth0   #绑定的网口,该网口即上面提到的两个IP的接口
virtual_router_id 51    #定义的ID,官方的是51,主从服务器必须一致
mcast_src_ip 10.0.1.69   #从服务器的IP
priority 100    #优先级,任意定义,但是一定要比从服务器高
advert_int 1     #VRRPMulticast广播周期秒数
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {   #绑定的虚IP
10.0.1.71
}
track_script {
check_port    #调用检测脚本
}
}


主从服务器的check_port.sh脚本:

这是脚本检查flume进程是否存在,如果不存在就killall keepalived,来达到主从切换的作用,这样keepalived的Backup服务器就无法收到Master服务器的消息,就会促使Backup服务器选举出Master服务器。
[iyunv@testcluster68 data]# cat check_port.sh
#!/bin/bash
N=`ps aux|grep flume | grep -v grep | wc -l`
if [ $N -eq 0 ];then
killall keepalived
fi
<pre name="code" class="java">[iyunv@testcluster68 data]# chmod 755 check_port.sh
修改成可执行的文件。


启动主从服务器后,查看主服务器的IP情况:[iyunv@testcluster68 ~]# /sbin/ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 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 74:d4:35:2e:dd:9b brd ff:ff:ff:ff:ff:ff
inet 10.0.1.68/24 brd 10.0.1.255 scope global eth0
inet 10.0.1.71/32 scope global eth0
inet6 fe80::76d4:35ff:fe2e:dd9b/64 scope link
valid_lft forever preferred_lft forever


查看从服务器的IP情况:
[iyunv@testcluster69 ~]# /sbin/ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 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 74:d4:35:2e:dd:92 brd ff:ff:ff:ff:ff:ff
inet 10.0.1.69/24 brd 10.0.1.255 scope global eth0
inet6 fe80::76d4:35ff:fe2e:dd92/64 scope link
valid_lft forever preferred_lft forever可见虚拟IP已经绑定到10.0.1.68。



现在我们关闭主服务器的Flume进程,查看主服务器的虚拟IP变化:
[iyunv@testcluster68 ~]# /sbin/ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 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 74:d4:35:2e:dd:9b brd ff:ff:ff:ff:ff:ff
inet 10.0.1.68/24 brd 10.0.1.255 scope global eth0
inet6 fe80::76d4:35ff:fe2e:dd9b/64 scope link
valid_lft forever preferred_lft forever虚拟IP被移除,keepalived进程也被kill。


查看从服务器的虚拟IP变化:
[iyunv@testcluster69 ~]# /sbin/ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 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 74:d4:35:2e:dd:92 brd ff:ff:ff:ff:ff:ff
inet 10.0.1.69/24 brd 10.0.1.255 scope global eth0
inet 10.0.1.71/32 scope global eth0
inet6 fe80::76d4:35ff:fe2e:dd92/64 scope link
valid_lft forever preferred_lft forever从服务器挂载了虚拟IP

运维网声明 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-365639-1-1.html 上篇帖子: LVS+keepalived+HTTPD 集群 下篇帖子: LVS + Keepalived之dr模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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