什么是高可用?
“高可用性”(High Availability) 通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。
高可用的原理?
一条心跳线同时连接两台服务器,若当中的一台服务器宕机了,备用服务器会出来顶替宕机的服务器继续运行。
什么是keepalived?
keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。
集群:集群的概念是和单台服务器相对应的,简单的来说,集群就是部署多台服务器协同完成一项工作。
keepalived的工作原理?
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议。
即将N台提供相同功能的服务器组成一个服务器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip。(该路由器所在局域网内其他机器的默认路由为该vip),master会发送组播,当backup收不到VRRP包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。
keepalived的故障切换工作原理?
在两台负载均衡调度器上安装keepalived以实现高可用的目的。
两个调度器之间通过VRRP协议来保证高可用性,当一台调度器宕机时,另一台备用的立即接替原主机服务,当主机被修复之后又将服务返回给主机。
在主节点正常工作的时候,会不断地向被节点广播心跳消息,用以告诉备节点自己还活着,当主节点发生故障的时候,备节点就无法收到主节点广播的消息,即可判断主节点发生故障,进而调用自身的接管程序,接管主节点的IP资源及服务。而当主节点被修复时,备节点会释放主节点故障时自己所接管的IP资源和服务,恢复到原来备用的角色。
keepalived的核心三要素?
core模块:主核心,负责master的启动,全局配置文件的解析。
check模块:负责服务器的健康检查。
VRRP协议:虚拟路由冗余协议,通过该协议实现高可用。
高可用keepalived实验拓扑图
实验
192.168.139.123 vip
192.168.139.100 dr1
192.168.139.101 dr2
192.168.139.201 web1
192.168.139.202 web2
两台web服务器
yum install -y nginx
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
ifconfig lo:0 192.168.139.123/32
测试两台web服务器页面是否正常。
两台dr服务器,安装keepalived
yum install -y keepalived
修改keepalived配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
vrrp_instance VI_1 {
state MASTER 另一台服务器dr2改为BUCKUP
interface ens33 发送心跳网卡dip
virtual_router_id 51 虚拟路由标识,master,backup必须相同
priority 100 优先级,高的是master;另一台服务器dr2改为50
advert_int 1 心跳发送间隔
authentication { 认证方式
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { vip/子网掩码 dev选项 配置网卡接口
192.168.139.123/24 dev ens37
}
}
virtual_server 192.168.139.123 80 { LVS配置,虚拟VIP地址和端口
delay_loop 3 健康检查时间间隔
lb_algo rr LVS调度算法 rr/wrr/lc/wlc/lblc
lb_kind DR LVS集群模式 NAT/DR/TUN
protocol TCP 监控服务的协议类型
real_server 192.168.139.201 80 { real_server地址和端口
weight 1 LVS权重
TCP_CHECK { 健康检查方式 TCP_CHECK/SSL_GET/HTTP_GET
connect_timeout 3 超时时间 3秒
}
}
real_server 192.168.139.202 80 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
}
启动keepalived
systemctl restart keepalived.service
测试两台dr是否实现高可用
关闭dr1的keepalived服务
查看vip是否跳到dr2上