一、keepalive简介
Keepalived是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换和健检查功能,如判断LVS负载调度器、节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集。在非LVS群集环境中使用时Keepalived也可以作为热备软件使用。
Keepalived采用 VRRP(virtual router redundancy protocol,虚拟路由冗余协议 )热备份协议,以软件的方式实现 linux服务器的多机热备功能。 VRRP是针对路由器的一种备份解决方案 -----由多台路由器组成一个热备组。通过共用的虚拟 IP地址对外提供服务;每个热备组内同一时刻只有一台主服务器提供服务,其他服务器处于冗余状态,若当前在线的服务器失败,其他服务器会自动接替(优先级决定接替顺序)虚拟 IP地址,以继续提供服务。
热备组内的每台服务器都可以成为主服务器,虚拟 IP地址( VIP)可以在热备组内的服务器之间进行转移,所以也称为漂移 IP地址,使用 Keepalived时,漂移地址的实现不需要手动建立虚拟接口配置文件(如 eth0:0),而是由 Keepalived根据配置文件自动管理。
二、keepalive原理
keepalived启动后会有三个进程
父进程:内存管理,子进程管理等等
子进程:VRRP子进程
子进程:healthchecker子进程
有图可知,两个子进程都被系统WatchDog看管,两个子进程各自复杂自己的事,healthchecker子进程复杂检查各自服务器的健康程度,例如HTTP,LVS等等,如果healthchecker子进程 检查到MASTER上服务不可用了,就会通知本机上的兄弟VRRP子进程 ,让他删除通告,并且去掉虚拟IP,转换为BACKUP状态。
三、部署keepalived服务
环境:Centos6.5-x64位系统
IP:172.16.16.15(master),172.16.16.16(backup)
VIP:172.16.16.100
关闭iptables,selinux
只是演示keepalive的常用配置,因此yum安装,如有需要,请百度源码安装。
[root@localhost ~]# yum install keepalived -y
keepalive主配置文件在/etc/keepalived/下,
1.实现简单的VIP漂移
master配置文件:
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost ##########收件人邮箱,每行一个收件人
}
notification_email_from keepadmin@localhost #########发件人邮箱,可以不存在
smtp_server 127.0.0.1 ###########邮件服务器地址
smtp_connect_timeout 30 ########邮件服务器连接超时时间
router_id LVS_DEVEL #########服务器的标识
}
vrrp_instance VI_1 { ########热备实例
state MASTER ########热备状态
interface eth0 #########监控心跳,向备发送宣告
virtual_router_id 51 #########虚拟路由id,主备必须一致
priority 100 #########定义优先级,值越大优先级越高
advert_int 1 #########主备宣告的时间间隔,
authentication { #########设置验证
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.16.16.100 ######定义vip,注此机器只有一块网卡,默认加到eth0上,若多块网卡,或者子卡,可以设置为172.16.16.100 dev eth1[label eth0:0]等指定设备
}
}
backup配置文件:
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepadmin@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP ###修改此节点为备
interface eth0
virtual_router_id 51
priority 99 ########优先级要比主低
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.16.16.100
}
}
启动两个几点keepalived
master:
root@localhost keepalived]# ip addr
1: lo: 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: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:c2:cc:ff brd ff:ff:ff:ff:ff:ff
inet 172.16.16.15/16 brd 172.16.255.255 scope global eth0
inet 172.16.16.100/32 scope global eth0
inet6 fe80::20c:29ff:fec2:ccff/64 scope link
valid_lft forever preferred_lft forever
backup
[root@localhost keepalived]# ip addr show
1: lo: 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: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:5c:ef:24 brd ff:ff:ff:ff:ff:ff
inet 172.16.16.16/16 brd 172.16.255.255 scope global eth0
inet6 fe80::20c:29ff:fe5c:ef24/64 scope link
valid_lft forever preferred_lft forever
关闭master的keepalive,
master
[root@localhost keepalived]# ip addr
1: lo: 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: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:c2:cc:ff brd ff:ff:ff:ff:ff:ff
inet 172.16.16.15/16 brd 172.16.255.255 scope global eth0
inet6 fe80::20c:29ff:fec2:ccff/64 scope link
valid_lft forever preferred_lft forever
backup
[root@localhost keepalived]# ip addr
1: lo: 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: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:5c:ef:24 brd ff:ff:ff:ff:ff:ff
inet 172.16.16.16/16 brd 172.16.255.255 scope global eth0
inet 172.16.16.100/32 scope global eth0 #######vip漂移到backup
inet6 fe80::20c:29ff:fe5c:ef24/64 scope link
valid_lft forever preferred_lft forever
2.定义简单的脚本命令
在/etc/keepalived/目录下,检测到down文件,vip漂移
master/backup
global_defs {
notification_email {
root@localhost
}
notification_email_from keepadmin@localhost
smtp_server 127.0.0.1
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepadmin@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_maintainace { #######定义检测脚本参数vrrp_script,chk_maintainace自定义
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0" ##可以为脚本,或命令
interval 1 ######检测down文件的时间间隔为1秒
weight -2 ########检测到down文件,优先级-2(即100-2)
}
vrrp_instance VI_1 {
state MASTER/BACKUP
interface eth0
virtual_router_id 51
priority 100/99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.16.16.100
}
track_script {
chk_maintainace ############追踪脚本
}
}
[root@localhost keepalived]# ip addr show eth0
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:c2:cc:ff brd ff:ff:ff:ff:ff:ff
inet 172.16.16.15/16 brd 172.16.255.255 scope global eth0
inet 172.16.16.100/32 scope global eth0
inet6 fe80::20c:29ff:fec2:ccff/64 scope link
valid_lft forever preferred_lft forever
[root@localhost keepalived]# touch down
[root@localhost keepalived]# ip addr show eth0
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:c2:cc:ff brd ff:ff:ff:ff:ff:ff
inet 172.16.16.15/16 brd 172.16.255.255 scope global eth0
inet6 fe80::20c:29ff:fec2:ccff/64 scope link ######vip漂移
valid_lft forever preferred_lft forever
[root@localhost keepalived]# ip addr show eth0
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:5c:ef:24 brd ff:ff:ff:ff:ff:ff
inet 172.16.16.16/16 brd 172.16.255.255 scope global eth0
inet 172.16.16.100/32 scope global eth0 ######vip漂移到backup
inet6 fe80::20c:29ff:fe5c:ef24/64 scope link
valid_lft forever preferred_lft forever
[root@localhost keepalived]# rm -rf down 主删除down
[root@localhost keepalived]# ip addr show eth0
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:c2:cc:ff brd ff:ff:ff:ff:ff:ff
inet 172.16.16.15/16 brd 172.16.255.255 scope global eth0
inet 172.16.16.100/32 scope global eth0 ######vip漂移回master
inet6 fe80::20c:29ff:fec2:ccff/64 scope link
valid_lft forever preferred_lft forever
3.当主从切换时,实现邮件通知(运行脚本)
脚本notify.sh,在终端运行没问题,在测试。
#!/bin/bash
IP=`ifconfig eth0 | awk /'inet addr'/'{print $2}' | awk -F : '{print $2}'`
vip='172.16.16.100'
send='root@localhost'
notify(){
subject="$IP to be $1"
body="`date +%F` : $IP become $1"
echo $body | mail -s "$subject" $send
}
case "$1" in
master)
notify master
exit 0;;
backup)
notify backup
exit 0;;
fault)
notify fault
exit 0;;
*)
echo "Usage: `basename $0` (master|backup|fault)";;
esac
~
master/backup
global_defs {
notification_email {
root@localhost
}
notification_email_from keepadmin@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_maintainace {
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
interval 1
weight -2
}
vrrp_instance VI_1 {
state MASTER/BACKUP
interface eth0
virtual_router_id 51
priority 100/99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.16.16.100
}
track_script {
chk_maintainace
}
notify_master "/etc/keepalived/notify.sh master" #######当切到主时,调用脚本
notify_backup "/etc/keepalived/notify.sh backup" #######当切到从时,调用脚本
notify_fault "/etc/keepalived/notify.sh fault" #######当故障时,调用脚本
}
4.配置ipvs
环境:Centos6.5_64
MASTER:172.16.16.15,BACKUP:172.16.16.16
VIP:172.16.16.100
WEB1:172.16.16.101 WEB2:172.16.16.102
关闭iptables,selinux
软件包均采用源码安装:
master/backup
[root@localhost keepalived]# yum install ipvsadm keepalived -y
master/backup配置文件
[root@localhost keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email { ######设置收件人
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1 #######设置发件人
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER/BACKUP ###热备状态
interface eth0 #####心跳宣告的接口
virtual_router_id 51 ######虚拟路由器id,必须与backup一样
priority 100/99 ###优先级
advert_int 1 ##宣告间隔
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.16.16.100 ####vip
}
}
virtual_server 172.16.16.100 80 { ###配置lvs负载均衡
delay_loop 6 ###每隔6秒,检查一次realserver监控状态
lb_algo rr #####算法
lb_kind DR ######负载均衡机制
persistence_timeout 10 ######同一IP的连接n秒内被分配到同一台realserver
protocol TCP #######用TCP协议检查realserver状态
real_server 172.16.16.101 80 { #######第一realserver,web节点
weight 1 ####几点权重
TCP_CHECK { ##########健康检查方式
connect_port 80
connect_timeout 3 #####3秒连接不上,即为故障
nb_get_retry 3 ######重试次数
delay_before_retry 4 ###重试间隔
}
}
real_server 172.16.16.102 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 4
}
}
}
注:realserver健康检查有多种,如SSL_TCP,SSL_GET等
后台web配置,http提供web,web配置一样
[root@localhost html]# yum install httpd -y
echo 'web1/2' >> /var/www/html/index.html
调整内核ARP响应,避免MAC冲突(web1/web2)
[root@localhost keepalived]# cat /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
配置lo:0网卡
[root@localhost network-scripts]# cat ifcfg-lo:0
DEVICE=lo:0
IPADDR=172.16.16.100 #########VIP
NETMASK=255.255.255.255
ONBOOT=yes
启动服务
MASTER/BACKUP
/etc/init.d/keepalived restart
WEB
/etc/init.d/httpd restart
测试:访问172.16.16.100,分别访问到web1/web2,配置成功
5、配置双主模型
master/backup配置
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 { ###主一标识
state MASTER/BACKUP
interface eth0
virtual_router_id 51 ########主一虚拟路由标识
priority 100/99 ##优先级
advert_int 1
authentication {
auth_type PASS
auth_pass 1111 #####主一验证
}
virtual_ipaddress {
172.16.16.100 ###主一vip
}
}
vrrp_instance VI_2 { ###主二标识
state BACKUP/MASTER
interface eth0
virtual_router_id 50 ########主二虚拟路由标识
priority 49/50 ##优先级
advert_int 1
authentication {
auth_type PASS
auth_pass 2222 #####主二验证
}
virtual_ipaddress {
172.16.16.200 ###主二vip
}
}
参考:
http://blog.csdn.net/jibcy/article/details/7826158详细的keepalive配置文件讲解
http://bbs.nanjimao.com/thread-845-1-1.html
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com