Keepalived+Nginx高可用集群

摘要:
Keepalived简介Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。

Keepalived简介

Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

keepalived工作原理

keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议

虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级选举一个backup当master。这样的话就可以保证路由器的高可用了。

keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。

keepalived三个主要功能

管理LVS负载均衡软件

实现LVS集群节点的健康检查中

作为系统网络服务的高可用性(failover)

PS:本次主要介绍高可用功能

Keepalived安装配置

安装环境查看

Keepalived+Nginx高可用集群第1张

本次试验使用yum安装

yum -y install keepalived

查看版本

Keepalived+Nginx高可用集群第2张

配置文件为/etc/keepalived/keepalived.conf

全局配置文件

lobal_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id lb01
   vrrp_skip_check_adv_addr
#   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

用来配置router_id(全局唯一) 以及邮箱等信息

PS:配置邮件用于出现故障发送邮件,工作中这个工作一般交由监控软件zabbix等负责,可以不配置

vrrp配置部分

vrrp_instance VI_1 {
    state MASTER            #设备状态是主
    interface eth0           #绑定的网络接口是eth0
    virtual_router_id 55        #虚拟路由ID 主备这个ID必须一致 
    priority 150                     #优先级数值越高优先级越高,备的优先级需低于此数值 
    advert_int 1            #主备同步间隔单位是秒
    authentication {
        auth_type PASS
        auth_pass 1111         #主备认证方式,主备密码需要一致
    }
    virtual_ipaddress {        #虚拟IP地址以及绑定的网卡
        192.168.56.22/24 dev eth0 label eth0:1
    }
}

用于配置主备状态,接口,优先级,认证方式IP信息等

高可用服务单实例实战

图示

Keepalived+Nginx高可用集群第3张

192.168.56.11的keepalived配置

! Configuration File for keepalived
global_defs {
   notification_email {
     liuym@abc.com
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
  router_id lb01
#  vrrp_strict
}
vrrp_instance VI_1 {
   state MASTER
    interface eth0
    virtual_router_id 55
   priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.56.22/24 dev eth0 label eth0:1
    }
}

192.168.56.12的keepalived配置

! Configuration File for keepalived
global_defs {
   notification_email {
     liuym@abc.com
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id lb02
#  vrrp_strict
}
vrrp_instance VI_1 {
    state BACKEND
    interface eth0
    virtual_router_id 55
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.56.22/24 dev eth0 label eth0:1
    }
}

说明:router_id不一样

主备状态不一样(一台是MASTER一台是BACKEDN在配置文件里必须是大写)

优先级不一样

PS:vrrp_strict是默认的配置需要注释,否则会导致VIP不通

启动keepalived验证两台主机均启动

 systemctl start keepalived

192.168.56.11生产了虚拟IP

Keepalived+Nginx高可用集群第4张

192.168.56.12没有虚拟IP

Keepalived+Nginx高可用集群第5张

停止主keepalived责备机接管虚拟VIP

Keepalived+Nginx高可用集群第6张

主节点没有了虚拟VIP

Keepalived+Nginx高可用集群第7张

主节点再次启动keepalived 因为主节点优先级别高又会自动接管虚拟VIP

keepalived+nginx实现高可用集群

图示如下

Keepalived+Nginx高可用集群第8张

1,对外提供的VIP是192.168.56.22

2,其中正常工作是由11提供服务

3,11宕机的情况VIP会漂移至22主机,用户无感知

11和12主机分别安装nginx并设置反向代理,这里为了方便仅仅反向代理一台主机,生产中是有多台主机的

nginx.conf配置如下(两台主机nginx配置一样反向代理了11的8080生产中是其他应用的多台主机)

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format access_log_json '{"user_ip":"$http_x_forwarded_for","lan_ip":"$remote_addr","log_time":"$time_iso8601","user_rqp":"$request","http_code":"$status","body_bytes_sent":"$body_bytes_sent","req_time":"$request_time","user_ua":"$http_user_agent"}';
    sendfile        on;
    keepalive_timeout  65;
    upstream www_server_pools {
        server 192.168.56.11:8080;
    }
    server {
        listen       192.168.56.22:80;
        server_name  www.liuym.com;
        access_log  /data/logs/nginx/http-access.log  access_log_json;
        error_log /data/logs/nginx/http-error.log;
        location / {
            proxy_pass http://www_server_pools;
            proxy_set_header Host $host;
            proxy_set_header x-Forwarded-For $remote_addr;
        }
    }
}

注意这里server_name指定了VIP加端口进行绑定,其他配置为nginx基础知识

客户端设置hosts指向的ip是VIP192.168.56.22 生产中是DNS地址

web界面通过域名访问(这里使用一个8080端口启动的jenkins作为示例)

Keepalived+Nginx高可用集群第9张

测试VIP漂移

在master停止keepalived客户端还是可以继续访问该页面

PS:备节点nginx配置了VIP绑定,但是实际主机并没有该VIP在启动nginx的时候会报错

Keepalived+Nginx高可用集群第10张

解决办法,修改内核参数/etc/sysctl.conf增加一条

net.ipv4.ip_nonlocal_bind = 1

执行生效

sysctl -p

默认情况下是keepalived软件是在对方宕机或者keepalived停止情况下才接管业务,假如是主节点的Nginx业务有问题呢

可以写一个脚本监控Nginx如果nginx停止服务就停止keepalived

check_nginx.sh

#!/bin/bash
while true
    do
        if [ ` netstat -lntup|grep nginx|wc -l` -ne 1 ];then
	    systemctl stop keepalived
        fi
	    sleep 5
    done

检测如果nginx宕机则停止keepalived

后台运行即可

 sh check_nginx.sh &

免责声明:文章转载自《Keepalived+Nginx高可用集群》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Ansible自动化运维笔记3(playbook)【Word&Excel】【3】Excel替换某一行/列的内容下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

nginx使用多端口监听多个服务

###### nginx监听多个端口并转发给不同的服务 ### 第一个监听: upstream odoo { server localhost:8067; } upstream odoochat{ server localhost:8072; } server { listen 8070default_server; listen [::]:80...

k8s集群部分常见问题处理

目录部分常见问题处理 Coredns CrashLoopBackOff 导致无法成功添加工作节点的问题 添加工作节点时提示token过期 kubectl 执行命令报“The connection to the server localhost:8080 was refused” 网络组件flannel无法完成初始化 部分节点无法启动pod  最后  ...

1.4 linux 路飞项目

Linux项目部署之发布路飞学城 python3 uwsgi wsgi(web服务网关接口,就是一个实现了python web应用的协议) virtualenvwrapper 路飞的代码 vue的代码 nginx (一个是nginx对静态文件处理的优秀性能,一个是nginx的反向代理功能,以及nginx的默认80端口,访问nginx的80端口,就能反向代理...

1-rocketmq简介-部署

简介 基于java开发,高可用 应用场景 1、应用解耦 2、流量销峰 3、异步处理 4、消息分发(邮件、短信、日志、数据处理) 延时队列场景:需要延时单次延迟执行的场景,比如订单取消 常见问题 1、如何保证高可用 集群部署 2、如何保证消息不丢失(消息的可靠性传输) 生产者丢失数据 开启生产者确认模式,确认发送成功了才对消费者可见 消息队列丢失数据...

如何在centos下卸载干净nginx

比如为了测试,我们使用yum新装了nginx,那么如何卸载的时候更干净一些呢? 我们先使用history来查看刚刚执行过的命令 yum history 然后会出现如下所示 [root@localhost ~]# yum history 已加载插件:fastestmirror ID | 登录用户 | 日期和时间...

ES数据库安装6.6

ES数据库安装 elastica searchelasticsearch的概念:是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写。 1、elasticsearch和MongoDB/redis/memcache一样,是非关系性数据库是一...