文章目录
- 前言
- 一、Keepalived简介
- 二、keepalived工作原理
- 三、配置文件
- 四、实验
- 1.某台Real Server down
- 2.LVS本身down
- 实验过程:
- 五、代码详细演示整体过程
- 调度器安装软件、设置
- 测试keepalived对后端RS的健康检测
- backup服务主机设置
前言
一、Keepalived简介
Keepalived是linux下一个轻量级别的高可用解决方案。高可用:广义来讲,是指整个系统的高可用行;狭义的来讲就是主机的冗余和接管。用来解决单点故障
Keepalived部署和使用非常的简单,所有配置只需要一个配置文件即可以完成
二、keepalived工作原理
keepalived是以VRRP协议为实现基础的,VRRP全称 Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样就可以保证路由器的高可用了。
keepalived主要有三个模块,分别是core、check和vrrp。
core模块:keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。
check:负责健康检查,包括常见的各种检查方式。
vrrp模块:实现VRRP协议的。
三、配置文件
global_defs {
notification_email {
root@localhost ##定义接收警告的人
}
notification_email_from root@localhost ##定义发邮件地址
smtp_server 172.0.0.1 ##定义发邮件地址,若为127.0.0.1则使用本机自带邮件服务的脚本
smtp_connect_timeout 30
router_id LVS_DEVEL
}
#vrrp_script ##自定义名字,后面还会用到它
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER ##角色为master,备份机的为BACKUP
interface eth0 ##针对哪个网卡监听VIP
virtual_router_id 51
priority 100 ##权重为100,master要比backup大
advert_int 1
authentication {
auth_type PASS
auth_pass 1111 ##定义密码,这个密码自定义
}
virtual_ipaddress {
172.25.70.100 ##定义VIP
}
}
virtual_server 172.25.70.100 80 {
delay_loop 6 #健康检查的时间间隔
lb_algo rr #LVS调度算法
lb_kind DR #LVS模式
#persistence_timeout 50 #持久化超时时间,单位是秒。默认是6分钟
protocol TCP #4层协议(TCP|UDP|SCTP)
real_server 172.25.70.2 80 {
weight 1 #给服务器指定权重。默认是1
TCP_CHECK { #real_server中的健康检查
connect_timeout 3 #连接超时时间。默认是5s
nb_get_retry 3 #get尝试次数
delay_before_retry 3 #在尝试之前延迟多长时间
}
}
real_server 172.25.70.3 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
四、实验
LVS对后端不具备健康检测
1.某台Real Server down
现象
2.LVS本身down
现象
实验过程:
问题一:某台Real Server down:
down服务器2的http时,ipvsadm -ln会自动删除服务器2的策略,并收到一封邮件,服务器3也是同样的;重启http后,ipvsadm -ln会自动生成策略
问题二:LVS本身down,做备份主机,当调度器down后,备份主机变为调度机,但是优先级低于主调度器!!!
备份机:yum install ipvsadm -y进行测试
调度器:systemctl stop keepalived,用备份机测试:
调度器停止服务后(关机、网络问题等等问题),VIP会被拿掉,备份机会生成VIP,变为MASTER角色!!!VIP跟着MASTER走!
调度器开始服务后,由于优先级高,会接管VIP,变为MASTER角色。
切换过程会有一点点损失
五、代码详细演示整体过程
调度器安装软件、设置
server1:
清除资源
[root@server1 ~]# ip a d 192.168.56.100/24 dev eth0
[root@server1 ~]# ipvsadm -C
安装高可用软件
[root@server1 ~]# yum install -y keepalived
[root@server1 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.56.100
}
}
virtual_server 192.168.56.100 80 {
delay_loop 3
lb_algo rr
lb_kind DR
#persistence_timeout 50
protocol TCP
real_server 192.168.56.12 80 {
weight 1
TCP_CHECK {
connect_timeout 3
delay_before_retry 3
}
}
real_server 192.168.56.13 80 {
weight 1
TCP_CHECK {
connect_timeout 3
delay_before_retry 3
}
}
}
[root@server1 ~]# systemctl enable --now keepalived
测试keepalived对后端RS的健康检测
[root@server2 ~]# systemctl stop httpd
[root@server1 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.56.100:80 rr
-> 192.168.56.13:80 Route 1 0 0
故障的RS会自动从调度列表中被摘除
再次启动服务
[root@server2 ~]# systemctl start httpd
恢复的RS会自动添加到调度列表
backup服务主机设置
server4:
安装高可用软件
[root@server4 ~]# yum install -y keepalived
从server1拷贝配置文件
[root@server1 ~]# scp /etc/keepalived/keepalived.conf server4:/etc/keepalived/
[root@server4 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.56.100
}
}
virtual_server 192.168.56.100 80 {
delay_loop 3
lb_algo rr
lb_kind DR
#persistence_timeout 50
protocol TCP
real_server 192.168.56.12 80 {
weight 1
TCP_CHECK {
connect_timeout 3
delay_before_retry 3
}
}
real_server 192.168.56.13 80 {
weight 1
TCP_CHECK {
connect_timeout 3
delay_before_retry 3
}
}
}
[root@server4 ~]# systemctl enable --now keepalived
测试:
停止server1上服务
[root@server1 ~]# systemctl stop keepalived.service
查看资源是否自动迁移到server4