目录
一、Keepalived简介
二、keepalived工作原理
三、keepalived配置文件
1、global_defs 区域
2、vrrp_script区域
3、vrrp_instance区域
四、keepalived实战项目
1、Haproxy_Director(分发器)+Keepalived
(1)haproxy负载均衡
(2)keepalived实现调度器HA
(3)master服务器宕机测试
(4)对调度器Haproxy的健康检查(扩展)
2、Nginx_director+Keepalived
(1)nginx负载均衡
(2)keepalived实现调度器HA
(3)master服务器宕机测试
(4)对调度器nginx健康检查
keepalived是集群管理中保证集群高可用的一个服务软件,它的作用是检测web服务器的状态。
如果有一台服务器死机,或工作出现故障,keepalived将检测到,并将有故障的服务器从系统中剔除,当web服务器工作正常后,自动将web服务器加入到服务器集群中。解决了静态路由的单点故障问题。
keepalived是以VRRP协议为实现基础的,VRRP全称(Virtual Router Redundancy Protocol),即虚拟路由冗余协议。实现路由器高可用的协议。
N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip,master不断向backup发送心跳信息,告诉backup自己还活着,当backup收不到心跳的时候就认为master已经宕机,就需要根据VRRP的优先级来选举一个backup当master,从而保证高可用。
keepalived主要有三个模块:
core模块:为keepalived的核心,负责进程的启动,维护,以及全局配置文件的加载和解析。
check模块:负责健康检查,包括常见的各种检查方式。
vrrp模块:是实现VRRP协议的。
keepalived配置文件:keepalived.conf。里面主要包括以下几个配置区域,分别是:
global_defs 全局配置
static_ipaddress 静态路由配置
vrrp_script 检测脚本
vrrp_instance 定义高可用相关的配置
virtual_server 定义配置服务器
主要是配置故障发生时的通知对象以及机器标志
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
notification_email:故障发生时给谁发邮件通知
notification_email_from:通知邮件从哪个地址发出
smtp_server:通知邮件的smtp地址
smtp_connect_timeout:连接smtp服务器的超时时间
enable_traps:开启SNMP陷阱
router_id:标志本节点的字符串,通常为ip地址,故障发生时邮件会通知到
用来做健康检查的,当检查失败时会将vrrp_instance的priority减少相应的值。
vrrp_script check_haproxy {
script "/etc/keepalived/check_haproxy_status.sh"
interval 5
weight -20
}
script:自己写的的监测脚本
interval 5:每5s监测一次
weight -20:监测失败,则相应的vrrp_instance的优先级会减少20个点
定义当前服务器的内容
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.200.16
}
track_script {
check_haproxy
}
}
state:只有MASTER和BACKUP。MASTER为工作状态,BACKUP是备用状态。
interface:网卡接口,可通过ip addr查看自己的网卡接口。
virtual_router_id :虚拟路由标志,同组的virtual_router_id 应保持一致,它决定多播的mac地址
priority:设置本节点的优先级,优先级高的为master
advert_int:MASTER和BACKUP同步检查的时间间隔
virtual_ipaddress:虚拟ip
master:192.168.40.143
backup:192.168.40.141
web1:192.168.40.138
web2:192.168.40.139
需要提前提前准备四台虚拟机,并配置好haproxy负载均衡,能实现页面转换。
主/备调度器均能实现正常调度。
注:主/备调度器均能实现正常调度
1、主/备调度器安装软件
master和backup均安装keepalived
[root@localhost ~]# yum -y install keepalived
2、keepalived
配置详解
! Configuration File for keepalived //标记
global_defs { //global配置模块
router_id director1 //master为director1,辅助backup修改为director2 }
vrrp_instance VI_1 {
state BACKUP //禁止抢占
nopreempt
interface ens33 //VIP绑定的网络接口
virtual_router_id 80 //master和backup一致
priority 100 //优先级,可以决定哪个是master,辅助改为50
advert_int 1
authentication {
auth_type PASS //关于安全的配置,只有type和pass相同,才在一个组里 auth_pass 1111 }
virtual_ipaddress{ //指虚拟ip
192.168.40.100
}
}
master
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
master配置内容
! Configuration File for keepalived
global_defs {
router_id director1
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 80
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.40.200
}
}
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
backup配置内容
! Configuration File for keepalived
global_defs {
router_id director2
}
vrrp_instance VI_1 {
state BACKUP
nopreempt
interface ens33
virtual_router_id 80
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.40.200
}
}
配置完毕后,检查haproxy的负载均衡是否启动正常,一切准备就绪后,启动keepalived
在master启动keepalived后,需要查看ip,在ens33接口会出现192.168.40.200的虚拟IP,在backup并没有新增的ip出现
此时,在浏览器输入192.168.40.200会出现web1和web2页面的跳转。
停止master上的keepalived服务,然后查看ip,发现虚拟ip不存在了。但在浏览器输入192.168.40.200仍可以正常访问页面。
[root@localhost ~]# systemctl stop keepalived
[root@localhost ~]# ip a
在backup上查询ip可以发现虚拟ip:192.168.40.200
当keepalived重新启动后,虚拟ip会漂移到master上,而backup上没有。
若master上的haproxy服务出现问题时,再次访问页面会出现错误,vip并不会漂移到backup上。提前关闭haproxy服务,发现浏览器的访问失败
解决方法:
1、让keepalived以一定时间间隔执行一个外部脚本,脚本的功能是当haproxy失败,则关闭本机的keepalived。
a、编写脚本文件并授权
[root@localhost ~]# vim /etc/keepalived/check_haproxy_status.sh
[root@localhost ~]# chmod +x /etc/keepalived/check_haproxy_status.sh
脚本内容如下:
#!/bin/bash
/usr/bin/curl -I http://localhost &>/dev/null
if [ $? -ne 0];then
/etc/init.d/keepalived stop
fi
b、在配置文件里添加健康检查脚本的模块,然后重启keepalived,可以发现虚拟ip漂移到backup上。浏览器也可以顺利访问。
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
[root@localhost ~]# systemctl start keepalived
[root@localhost ~]# ip a
! Configuration File for keepalived
global_defs {
router_id director1
}
vrrp_script check_haproxy {
script "/etc/keepalived/check_haproxy_status.sh"
interval 5
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 80
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.40.200
}
track_script {
check_haproxy
}
}
主/备调度器能够实现正常调度,可以实现页面之间的轮询
先安装nginx:
[root@localhost ~]#yum -y install nginx
编辑配置文件,并启动服务:
[root@localhost ~]# vim /etc/nginx/nginx.conf
[root@localhost ~]# systemctl start nginx
nginx配置文件
include /etc/nginx/conf.d/*.conf;
upstream web {
server 192.168.40.138:80;
server 192.168.40.139:80;
}
server {
listen 80;
listen [::]:80;
server_name _;
location / {
proxy_pass http://web;
}
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
配置好master和backup的nginx后,可以在浏览器实现页面的轮询。
master
安装keepalived软件:
[root@localhost ~]#yum -y install keepalived
配置keepalived,在这里提前放置了脚本文件,来监测nginx宕机的情况
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id director1
}
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx_status.sh"
interval 2
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.40.200
}
track_script {
check_nginx
}
}
backup
安装keepalived软件:
[root@localhost ~]#yum -y install keepalived
配置keepalived,
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id director2
}
vrrp_instance VI_1 {
state BACKUP
nopreempt
interface ens33
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.40.200
}
}
浏览器测试:
停止master上的keepalived服务:
[root@localhost ~]# systemctl stop keepalived [root@localhost ~]# ip a
查看backup的ip,可以发现虚拟ip实现了飘移,浏览器可以正常访问。
给master添加监测脚本,使master上的nginx宕机后,仍可以顺利访问页面
a、编写脚本文件并授权
[root@localhost ~]# vim /etc/keepalived/check_nginx_status.sh [root@localhost ~]# chmod +x /etc/keepalived/check_nginx_status.sh 脚本内容如下: #!/bin/bash /usr/bin/curl -I http://localhost &>/dev/null if [ $? -ne 0];then /etc/init.d/keepalived stop fi
b、在配置文件里添加健康检查脚本的模块,然后重启keepalived,可以发现当master上的nginx服务出现问题,虚拟ip漂移到backup上。浏览器也可以顺利访问。