1 keepalived
keepalived:保持存活,在网络里面即为保持在线。也就是所谓的高可用或热备,用来防止单点故障的发生(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)
keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态。如果某个服务器节点出现异常,或者工作出现故障,keepalived将监测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点。
- 特点:
主要提供 loadbalancing(负载均衡)和 high-availability(高可用)功能
负载均衡实现需要依赖Linux的虚拟服务内核模块(ipvs)
高可用是通过VRRP协议实现多台机器之间的故障转移服务
采用多进程的设计模式,每个进程负责不同的功能
2 keepalived工作原理
keepalived是以VRRP协议为实现基础的,VRRP全程Virtual Router Redundancy Protocal,即虚拟路由冗余协议。
VRRP 协议:
用于实现路由器冗余的协议
解决静态路由单点故障问题
通过一种竞选(election)协议来实现虚拟路由器的功能
虚拟路由冗余协议,可以认为是实现高路由高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master这样就可以保证路由器的高可用了。
3 keepalived高可用故障切换转移原理
在keepalived服务正常工作时,主master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备backup节点自己还活着,当主master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主master节点的心跳了,于是调用自身的接管程序,接管主master节点的IP资源及服务。而主master节点恢复时,备backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。
4 安装keepalived
在server1和server4中都进行安装
unzip keepalived-2.0.20.zip
cd keepalived-2.0.20
ls
yum install gcc openssl-devel -y #解决依赖性
./configure --prefix=/usr/local/keepalived --with-init=systemd #编译keepalived的源码包
make && make install
这里安装成功,因为IPVS和VRRP框架是YES的
- 制作软连接方便keepalived的管理与设置
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/local/keepalived/sbin/keepalived/ /sbin/
5 还原之前实验部分内容
在server1中删除VIP并关闭ldirectord服务:
systemctl stop ldirectord.service
systemctl disable ldirectord.service
ip addr del 172.25.254.100/32 dev eth0
ip addr show
6 修改keepalived的配置文件
在server1中:
cd /etc/keepalived/
ls
vim keepalived.conf
[root@server1 sbin]# cd /etc/keepalived/
[root@server1 keepalived]# ls
keepalived.conf samples
[root@server1 keepalived]# vim keepalived.conf
! Configuration File for keepalived
## 全局配置
global_defs { ##全局定义块
notification_email { ##邮件通知
root@localhost
}
#设置邮件的发送地址
notification_email_from keepalived@localhost
smtp_server 127.0.01 #设置 smtp server 地址
smtp_connect_timeout 30 #设置连接 smtp 服务器超时时间
router_id LVS_DEVEL #load balancer 的标识 ID,用于 email 警报
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
## VRRPD配置
vrrp_instance VI_1 {
state MASTER #备机改为 BACKUP,此状态是由 priority 的值来决定的,当前priority 的值小于备机的值,那么将会失去 MASTER 状态
interface eth0 #HA 监测网络接口
virtual_router_id 51 #主、备机的 virtual_router_id 必须相同,取值 0-255
priority 100 #主机的优先级,备份机改为 50,主机优先级一定要大于备机
advert_int 1 #主备之间的通告间隔秒数
authentication {
auth_type PASS #设置验证类型,主要有 PASS 和 AH 两种
auth_pass 1111
}
##指定VIP,即切换到MASTER时,这些IP会被添加,切换到BACKUP时,这些IP会被删除(传给ip addr命令),所以每台服务器可以不用绑定任何的虚拟地址。
virtual_ipaddress {
172.25.254.100
}
}
## 虚拟服务配置
virtual_server 172.25.64.100 80 { #定义虚拟服务器
delay_loop 3 #定义虚拟服务器
lb_algo rr #lvs 调度算法,这里使用轮叫
lb_kind DR #LVS 是用 DR 模式
#persistence_timeout 50 #注释掉
protocol TCP #指定转发协议类型,有 tcp 和 udp 两种
real_server 172.25.254.2 80 { #配置服务节点
TCP_CHECK{ ##TCP方式的健康检查,realserve 的状态检测设置部分,单位是秒
weight 1 ##默认为1,0为失效
connect_timeout 3 #10 秒无响应超时
retry 3 #重试次数
delay_before_retry 3 #重试间隔
}
}
real_server 172.25.254.3 80 {
TCP_CHECK {
weight 1
connect_port 80
connect_timeout 3
}
}
}
配置文件发给备机server4并修改:
scp keepalived.conf root@172.25.0.4:/etc/keepalived/
修改部分为下面框中的两处
在server1和server4中开启服务:
systemctl start keepalived.service
开启服务后在server1中可以看到VIP(自动分配vip地址)和写好的策略(server4中也会有策略):
7 测试
在classroom中来进行测试:
- server1正常工作时:
- server1宕掉时:
systemctl stop keepalived.service
在server4中查看到VIP(vip地址漂移到server4)
测试依然正常
- server1开启:
注意:VIP又重新配置在server1上,server4上的自动消失
结论:keepalived的作用就是保证节点正常工作,如果主节点宕掉,备节点就立刻上场代替主节点工作;当主节点重新正常工作时,立即将备节点替换下去。不会影响客户的使用。