一、双机热备
双机热备特指基于高可用系统中的两台服务器的热备(或高可用),因两机高可用在国内使用较多,故得名双机热备,双机高可用按工作中的切换方式分为:主-备方式(Active-Standby方式)和双主机方式(Active-Active方式),主-备方式即指的是一台服务器处于某种业务的激活状态(即Active状态),另一台服务器处于该业务的备用状态(即Standby状态)。而双主机方式即指两种不同业务分别在两台服务器上互为主备状态(即Active-Standby和Standby-Active状态)。
二、热备方案
Linux+HA,keepalived,zookeeper,DNS等,本文着重介绍keepalived。
三、keepalived
1. 特点
vrrp心跳:周期发送,维持主备关系
选举:根据设备优先级来选举出主设备
notify机制:状态转换时,用户可以指定要执行的文件
虚拟IP:主备共用一个IP地址
健康检查:子进程,可以检查业务的网络,传输,应用层,并可以自动根据结果来调整优先级
IP漂移: 当发生主备切换时,通过发送免费ARP来实现IP的漂移
抢占模式:nopeerm
keepalived简单,基本与业务层没关系,可以实现高可用,主备容灾,宕机时间也比较短。
2. 原理及工作过程
状态转换图:
初始化,若为IP拥有者(VIP和本地IP相同)则转为master状态,向外发送免费ARP来宣告自己的MAC、IP地址,否则转为backup状态。
在热备环境下,master承担一切VIP机器上的业务,backup机器任务就是监视master的状态。
在工作过程中,主机周期向备份组(具有相同“虚拟路由ID”)发送VRRP通告来宣告自己的状态,若收到比自己优先级大的VRRP通告,则转为backup,停止发送VRRP通告
在工作中,备机通过接收主机的VRRP通告来监控主机状态,并与本机优先级比较,若小于本机优先级,则自己转为master,对外发布VRRP通告;或者3个周期内没有收到主机VRRP通告,自己转为主机,周期发送VRRP通告。
3. 配置
配置分三个部分:全局配置,同步组配置,虚拟服务器配置。写配置文件时,要注意每个开头和‘{’间要隔一个空格,否则配置不起作用。切记!!!
#全局配置
! Configuration File for keepalived
global_defs {
# notification_email { #邮件通知
# acassen@firewall.loc #被通知用户的Email地址
# failover@firewall.loc
# sysadmin@firewall.loc
# }
# notification_email_from Alexandre.Cassen@firewall.loc #发送Email的地址
# smtp_server 192.168.200.1 #发送服务器地址
# smtp_connect_timeout 30 #
router_id LVS_DEVEL //设备标识,不同设备间最好不要相同
}
vrrp_script checkhaproxy{ #健康检查脚本,可以不写
script"/home/check.sh" #脚本目录
interval3 #脚本执行周期
weight -20} #脚本执行失败时,优先级减少20个点
#同步组配置,同步组内的实例具有相同的动作,可实现同时切换
vrrp_sync_group VGM { //定义一个vrrp组
group {
VI_1
}
}
vrrp_instance VI_1 { //定义vrrp实例
state MASTER //主LVS是MASTER,从的BACKUP;这个可以随便配置,选举时最终是看优先级大小
interface eth0 //LVS监控的网络接口;
virtual_router_id 51 //同一实例下virtual_router_id必须相同
priority 100 //定义优先级,数字越大,优先级越高
advert_int 5 //VRRP 通告发送周期,单位是秒
authentication { //验证类型和密码
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { //虚拟IP
192.168.1.8
# 192.168.1.9/24 //如果有多个,往下加就行了,最好带上子网掩码前缀长度
# 192.168.1.7
}
track_script {
checkhaproxy #调用健康检查脚本
}
}
#负载均衡时需要配置,不使用负载均衡时可以不配置
virtual_server 192.168.1.8 80 { //定义虚拟服务器
delay_loop 6 //健康检查时间,单位是秒
lb_algo rr //负载调度算法,这里设置为rr,即轮询算法
lb_kind DR //LVS实现负载均衡的机制,可以有NAT、TUN和DR三个模式可选
persistence_timeout 50 //会话保持时间,单位是秒(可以适当延长时间以保持session)
protocol TCP //转发协议类型,有tcp和udp两种
sorry_server 127.0.0.1 80 //web服务器全部失败,vip指向本机80端口
real_server 192.168.1.16 80 { //定义WEB服务器
weight 1 //权重
TCP_CHECK { //通过tcpcheck判断RealServer的健康状态
connect_timeout 5 //连接超时时间
nb_get_retry 3 //重连次数
delay_before_retry 3 //重连间隔时间
connect_port 80 //检测端口
}
}
real_server 192.168.1.17 80 {
weight 1
TCP_CHECK {
connect_timeout 5
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
4. 启动服务
service keepalived start/restart/reload/stop 启动,重启,重新加载,停止服务
5. 指定日志文件
默认日志文件是/var/log/syslog
编辑/etc/syslog.conf. 修改keepalived服务器的日志目录
6. 安装
apt-get install keepalived