前言
即便想 nginx 这么牛B的服务器, 也不能保证他不挂啊, 就算不是机器出故障, 比如, 停电了, 那么机器挂了, 很正常啊. 这时候, 没有分发服务器, 网站就不能正常访问了, 咋搞?
网站不开了, 大家放假回家咯! - 不错的办法啊.
我们想回家, 但是老板不许, 没办法, 加个备份机吧, 有点像是备胎. 可以借助 keepalived + nginx 来实现主备.
一. keepalived是干啥的
keepalived主要的工作就是检测 web 服务器的状态, 如果有一台 web 服务器挂了, keepalived 检测到后, 会将有故障的 web 服务器从环境中剔除, 完成切换操作.当 web 服务器工作正常后, keepalived 会自动将该 web 服务器加入到 服务器群组中.
这么看, keepalived 是集群管理中, 保证集群高可用的一个服务软件, 可以防止单点故障.
二. keepalived 工作原理
keepalived 是以VRRP协议为实现基础的. VRRP又叫 虚拟路由冗余协议, 可以人为是实现路由器高可用的协议, 将 n 台提供相同功能的路由器组成一个路由器群组, 这个组里面有一个 master(主服务器) 和 多个 backup(备胎机).
master 里面有一个对外提供服务的 vip( virtual ip address, 虚拟 ip 地址, 该路由器所在局域网内, 其他机器的默认路由为该 vip), master会发组播, 当backup接收不到的时候, 会人为master挂掉了, 这时, 需要推举一个武林盟主出来. 但是这不是乱推的, 得按照辈分(优先级)来推举. 这样, 就能保证在群组中, 总有一个nginx服务器是可用的.
三. keepalived 工作流程大致如下
master 没有挂的情况下, 是这么工作的:
当master挂掉之后, 就会切换服务器
当master回复正常之后, 会再次切换回第一幅图那样.