Linux学习:Keepalived高可用集群

目录

一、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简介

keepalived是集群管理中保证集群高可用的一个服务软件,它的作用是检测web服务器的状态。

如果有一台服务器死机,或工作出现故障,keepalived将检测到,并将有故障的服务器从系统中剔除,当web服务器工作正常后,自动将web服务器加入到服务器集群中。解决了静态路由的单点故障问题。

二、keepalived工作原理

keepalived是以VRRP协议为实现基础的,VRRP全称(Virtual Router Redundancy Protocol),即虚拟路由冗余协议。实现路由器高可用的协议。

N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip,master不断向backup发送心跳信息,告诉backup自己还活着,当backup收不到心跳的时候就认为master已经宕机,就需要根据VRRP的优先级来选举一个backup当master,从而保证高可用。

keepalived主要有三个模块:

  1. core模块:为keepalived的核心,负责进程的启动,维护,以及全局配置文件的加载和解析。

  2. check模块:负责健康检查,包括常见的各种检查方式。

  3. vrrp模块:是实现VRRP协议的。

三、keepalived配置文件

keepalived配置文件:keepalived.conf。里面主要包括以下几个配置区域,分别是:

  • global_defs 全局配置

  • static_ipaddress 静态路由配置

  • vrrp_script 检测脚本

  • vrrp_instance 定义高可用相关的配置

  • virtual_server 定义配置服务器

1、global_defs 区域

主要是配置故障发生时的通知对象以及机器标志

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地址,故障发生时邮件会通知到

2、vrrp_script区域

用来做健康检查的,当检查失败时会将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个点

3、vrrp_instance区域

定义当前服务器的内容

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

四、keepalived实战项目

1、Haproxy_Director(分发器)+Keepalived

master:192.168.40.143

backup:192.168.40.141

web1:192.168.40.138

web2:192.168.40.139

(1)haproxy负载均衡

需要提前提前准备四台虚拟机,并配置好haproxy负载均衡,能实现页面转换。

主/备调度器均能实现正常调度。

(2)keepalived实现调度器HA

注:主/备调度器均能实现正常调度

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
         }
}
backup

[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出现

Linux学习:Keepalived高可用集群_第1张图片

 Linux学习:Keepalived高可用集群_第2张图片

 此时,在浏览器输入192.168.40.200会出现web1和web2页面的跳转。

Linux学习:Keepalived高可用集群_第3张图片

 Linux学习:Keepalived高可用集群_第4张图片

(3)master服务器宕机测试

停止master上的keepalived服务,然后查看ip,发现虚拟ip不存在了。但在浏览器输入192.168.40.200仍可以正常访问页面。

[root@localhost ~]# systemctl stop keepalived
[root@localhost ~]# ip a

在backup上查询ip可以发现虚拟ip:192.168.40.200

Linux学习:Keepalived高可用集群_第5张图片

当keepalived重新启动后,虚拟ip会漂移到master上,而backup上没有。

Linux学习:Keepalived高可用集群_第6张图片 

(4)对调度器Haproxy的健康检查(扩展)

若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
        }
}
Linux学习:Keepalived高可用集群_第7张图片

2、Nginx_director+Keepalived

(1)nginx负载均衡

主/备调度器能够实现正常调度,可以实现页面之间的轮询

先安装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后,可以在浏览器实现页面的轮询。

(2)keepalived实现调度器HA

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
        }
}
重新启动keepalived服务

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
    }
}
重新启动keepalived服务

浏览器测试:

Linux学习:Keepalived高可用集群_第8张图片

 Linux学习:Keepalived高可用集群_第9张图片

(3)master服务器宕机测试

停止master上的keepalived服务:

[root@localhost ~]# systemctl stop keepalived [root@localhost ~]# ip a

 

查看backup的ip,可以发现虚拟ip实现了飘移,浏览器可以正常访问。

Linux学习:Keepalived高可用集群_第10张图片 

(4)对调度器nginx健康检查

给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上。浏览器也可以顺利访问。

你可能感兴趣的:(Linux学习,服务器,网络,运维)