目录
keepalived概念
抢占与非抢占
主要模块
部署
keepalived概念
keepalived 其实和DR模式整体框架非常类似,只是多了一个备用服务器,基于VRRP协议来实现高可用,预防单点故障。
同样的,整个集群对外也表现为一个虚拟ip,有主服务器(MASTER)和备用服务器(BACKUP),原理与VRRP协议相同,主服务器在工作时会发送心跳报文给备用服务器,告诉备用服务器自身的存活状态,当备用服务器不再收到主服务器的报文时,默认主服务器宕机,此时备用服务器承担起转发数据等工作,在此之前,备用服务器只对主服务器进行监听,不参与任何工作。
抢占与非抢占
在最初设置的时候,两台服务器会根据预设的优先级,选举出MASTER,另一台服务器为BACKUP。和VRRP协议一样,不过多赘述,配置里有一个抢占模式,可以稍微叙述一下。如果两台服务器配置了抢占模式,在MASTER从故障中恢复后,会重新接管工作,BACKUP顶替了一段时间继续恢复只监听不工作的状态,这就是抢占模式,很好理解;非抢占模式就是,MASTER从故障中恢复后,默认成为BACKUP,原来的BACKUP晋级成为MASTER,接管工作。
主要模块
keepalived 有几个主要模块
core模块:core模块是keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
vrrp模块:是来实现VRRP协议的。
check模块:负责健康检查,常见的方式有端口检查及URL检查。
部署
模拟 keepalived 的部署需要至少三台机器,我准备了四台,使用nginx 来实现keepalived高可用
首先确认两台机器里都有keepalived 和 nginx 服务,nginx需要安装,keepalived 可以 yum
主:172.16.233.101
备:172.16.233.102
web1:172.16.233.103
web2:172.16.233.104
然后我们对两台机器进行同样的配置,只有略微不同
vim /etc/keepalived/keepalived.conf
备用服务器按照文字那样写就行,其他的完全一样
源码:
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 172.16.233.101
smtp_connect_timeout 30
router_id LVS_01
vrrp_skip_check_adv_addr
# vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_http_ port {
script "/usr/local/src/nginx_check.sh"
interval 2
weight 2
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123123
}
virtual_ipaddress {
172.16.233.150
}
}
如果不采用nginx的话后面需要加上virtual_server、real_server等配置
随后在脚本识别的目录里创建脚本文件
赋权
chmod +x .....
重启nginx和keepalived 服务即可
systemctl restart nginx
systemctl restart keepalived
来到网页进行测试
输入172.16.233.150(虚拟ip)
现在我们关掉主服务器的服务,看看备用服务器能不能顶上
为了区分页面,我在备用服务器的 /usr/local/nginx/html/index.html 网页里的<body>内添加了一段
---备用服务器
然后在主配置文件server模块下,修改字符集编译中文
charset utf-8
重启nginx
我们再刷新页面
备用服务器顶上去了,配置完成