nginx+keepalived 高可用方案

准备工作

  • 192.168.157.11
  • 192.168.157.12

安装nginx

  • 跟新yum源文件

    rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  • 安装nginx

    yum -y install nginx
  • 操作命令

    systemctl start nginx; # 启动nginx
    systemctl stop nginx; # 停止nginx

什么是高可用

  • 高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。如果一个系统能够一直提供服务,那么这个可用性则是百分之百,但是天有不测风云。所以我们只能尽可能的去减少服务的故障。

解决的问题

  • 在生产环境上很多时候是以Nginx做反向代理对外提供服务,但是一天Nginx难免遇见故障,如:服务器宕机。当Nginx宕机那么所有对外提供的接口都将导致无法访问。

    虽然我们无法保证服务器百分之百可用,但是也得想办法避免这种悲剧,今天我们使用keepalived来实现Nginx

    的高可用

双机热备方案

  • 这种方案是国内企业中最为普遍的一种高可用方案,双机热备其实就是指一台服务器在提供服务,另一台为某服务的备用状态,当一台服务器不可用另外一台就会顶替上去。

keepalived是什么?

  • Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP (Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件

安装keepalived

  • yum方式安装,该方式会自动安装依赖:

    yum -y install keepalived
  • yum 安装产生的配置文件在/etc/keepalived/keepalive.conf

  • 编译安装

    yum install -y openssl-devel
    cd /usr/local/src
    wget http://www.keepalived.org/software/keepalived-2.0.16.tar.gz
    tar zxf keepalived-2.0.16.tar.gz
    cd keepalived-2.0.16
    ./configrue --prefix=/usr/local/keepalived
    make
    make install clean
    cp /usr/local/src/keepalived-2.0.16/keepalived/etc/init.d/keepalived /etc/init.d/keepalived
    chmod +x /etc/init.d/keepalived
    echo "/etc/init.d/keepalived start " >> /etc/rc.local
    mkdir /etc/keepalived
    cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
    cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
    cp /usr/local/keepalived/etc/sbin/keepalived /usr/sbin
  • 启动命令

    service keepalived start  # 启动
    service keeplived stop # 停止
    systemctl start keeplived #启动(与1相同)

实现过程

  1. 修改192.168.157.11中的keepalived, 编辑/etc/keepalived/keepalive.conf (MASTER为主)

    #检测脚本nginx
    vrrp_script chk_http_port {
    script "/etc/keepalived/script/check_nginx_pid.sh" #心跳执行的脚本,检测nginx是否启动
    interval 2 #(检测脚本执行的间隔,单位是秒)
    weight 2 #权重
    } #检测tomcat的
    vrrp_script chk_tomcat {
    script "etc/keepalived/script/tomcat.sh"
    interval 2
    weight 2 #权重
    } #vrrp 实例定义部分
    vrrp_instance VI_1 {
    state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备
    interface ens33 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
    virtual_router_id 51 # 虚拟路由编号,主从要一直
    priority 150 # 优先级,数值越大,获取处理请求的优先级越高
    advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
    #授权访问
    authentication {
    auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
    auth_pass 1111
    }
    track_script {
    chk_http_port # nginx脚本
    chk_tomcat # tomcat脚本
    }
    virtual_ipaddress {
    192.168.157.130/24 # 定义虚拟ip(VIP),可多设,每行一个
    }
    }
  • virtual_ipaddress 里面可以配置vip,在线上通过vip来访问服务。

    interface需要根据服务器网卡进行设置通常查看方式ip addr

    authentication配置授权访问后备机也需要相同配置

  1. 修改192.168.157.12中的keepalived配置文件, (BACKUP为备用)

    #检测脚本nginx
    vrrp_script chk_http_port {
    script "/etc/keepalived/script/check_nginx_pid.sh" #心跳执行的脚本,检测nginx是否启动
    interval 2 #(检测脚本执行的间隔,单位是秒)
    weight 2 #权重
    } #检测tomcat的
    vrrp_script chk_tomcat {
    script "etc/keepalived/script/tomcat.sh"
    interval 2
    weight 2 #权重
    } #vrrp 实例定义部分
    vrrp_instance VI_1 {
    state BACKUP # 指定keepalived的角色,MASTER为主,BACKUP为备
    interface ens33 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
    virtual_router_id 51 # 虚拟路由编号,主从要一直
    priority 140 # 优先级,数值越大,获取处理请求的优先级越高
    advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
    #授权访问
    authentication {
    auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
    auth_pass 1111
    }
    track_script {
    chk_http_port # nginx脚本
    chk_tomcat # tomcat脚本
    }
    virtual_ipaddress {
    192.168.157.130/24 # 定义虚拟ip(VIP),可多设,每行一个
    }
    }
  2. 检测脚本:

    #!/bin/bash
    #检测nginx是否启动了
    A=`ps -C nginx --no-header |wc -l`
    if [ $A -eq 0 ];then #如果nginx没有启动就启动nginx
    systemctl start nginx #重启nginx
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #nginx重启失败,则停掉keepalived服务,进行VIP转移
    killall keepalived
    fi
    fi

    tomcat脚本

    #!/bin/bash
    JAVA_PROCESS=`ps -C java --no-heading| wc -l`
    if [ $JAVA_PROCESS -eq 0 ];then
    echo "tomcat is stop"
    sleep 2
    if [ `ps -C java --no-heading| wc -l` -eq 0 ];then
    /etc/init.d/keepalived stop
    fi
    fi
  3. 脚本授权

    chmod 775 check_nginx_pid.sh
    
    chmod 775 tomcat.sh
    
    

验证

  • 启动157.11和157.12中的nginx和keepalived

    systemctl start nginx; #启动
    service keepalived start # 启动
  • 访问网址http://192.168.157.130 ,正常查看,

    ip a    # 进行验证是否存在虚拟主机
    
    

  • 模拟宕机, 关闭157.11的服务器 reboot 关机

  • 再次访问网址, http://192.168.157.130,正常查看

  • 查看ip 正常, 则配置成功

    ip a
    
    

修改配置文件

  1. 配置文件路径/etc/sysconfig/keepalived

    KEEPALIVED_OPTIONS=”-D -d -S 0”
    
    保存退出
    
    
  2. 修改日志文件

    vim /etc/rsyslog.conf
    
    #### GLOBAL DIRECTIVES ####
    
    # Where to place auxiliary files
    $WorkDirectory /var/lib/rsyslog # Use default timestamp format
    $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat # File syncing capability is disabled by default. This feature is usually not required,
    # not useful and an extreme performance hit
    #$ActionFileEnableSync on
    local0.* /var/log/keepalived.log #添加该句代码, 注意不要注释
  3. 重启rsyslog服务和keepalived

    service rsyslog restart
    service keepalived restart
  4. 查看日志信息

    tail /var/log/keepalived.log
    
    

报错

  • 默认日志存放在系统日志:/var/log/messages下查看报错

  • 如果配置日志文件 可以在/var/log/keepalived.log进行查看

  • 通过查看日志错误进行修改即可,

其他功能

  • 百度搜索keepalived配置文件详解查看

  • 线上参考配置

    ! Configuration File for keepalived
    
    vrrp_instance ka_192_168_128_204 {
    state BACKUP
    interface eth0
    virtual_router_id 204
    priority 99
    advert_int 1
    authentication {
    auth_type PASS
    auth_pass 128204
    }
    virtual_ipaddress {
    192.168.128.204/24 brd 192.168.128.255 dev eth0 label eth0:1
    } } virtual_server 192.168.128.204 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP real_server 192.168.128.119 80 {
    weight 3
    TCP_CHECK {
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    }
    } real_server 192.168.128.120 80 {
    weight 3
    TCP_CHECK {
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    }
    } real_server 192.168.128.121 80 {
    weight 3
    TCP_CHECK {
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    }
    } real_server 192.168.128.122 80 {
    weight 3
    TCP_CHECK {
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    }
    }
    }

借鉴博客

nginx+keepalived 高可用方案的更多相关文章

  1. nginx keepalived 高可用方案(转)

    转自: https://www.cnblogs.com/leeSmall/p/9356535.html 一.Nginx Rewrite 规则 1. Nginx rewrite规则 Rewrite规则含 ...

  2. Nginx+Keepalived高可用集群应用实践

    Nginx+Keepalived高可用集群应用实践 1.Keepalived高可用软件 1.1 Keepalived服务的三个重要功能 1.1.1管理LVS负载均衡软件 早期的LVS软件,需要通过命令 ...

  3. Nginx知多少系列之(十四)Linux下.NET Core项目Nginx+Keepalived高可用(主从模式)

    目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略 8.加权轮询(round rob ...

  4. Nginx入门篇(七)之Nginx+keepalived高可用集群

    一.keepalived介绍 keepalived软件最开始是转为负载均衡软件LVS而设计,用来管理和监控LVS集群系统中各个服务节点的状态,后来又加入了可实现高可用的VRRP功能.所以Keepali ...

  5. 使用Ansible实现nginx+keepalived高可用负载均衡自动化部署

    本篇文章记录通过Ansible自动化部署nginx的负载均衡高可用,前端代理使用nginx+keepalived,端web server使用3台nginx用于负载效果的体现,结构图如下: 部署前准备工 ...

  6. Nginx+keepalived(高可用主备模式)

    Nginx+keepalived(高可用主备模式) 环境:centos6.7 准备:两台服务器(虚拟机).两台应用(Tomcat).Nginx.keepalived server1:192.168.2 ...

  7. Nginx+keepalived(高可用双主模式)

    Nginx+keepalived(高可用双主模式) tips:前面已经介绍了nginx+keepalived高可用主从模式,今天补充下高可用的双主模式,均可以作为主机使用 server1:192.16 ...

  8. nginx+keepalived高可用及双主模式

    高可用有2中方式. 1.Nginx+keepalived 主从配置 这种方案,使用一个vip地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候, ...

  9. nginx Keepalived高可用集群

    一.Keepalived高可用 1.简介 Keepalived软件起初是专为LvS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能.因此, ...

随机推荐

  1. 学多少年才算“精通Java”?

    我从毕业做程序员就开始用 Java,到现在已经工作快 20 年了.减去我做手游用 C++.Lua 的几年,再减去后来转管理写代码少的时间,我真正写 Java 代码的时间至少也在 10 年以上. 如果你 ...

  2. redis(三)-----redis基本数据类型

    Redis的全称是REmote Dictionary Server,它主要提供了5种数据结构:字符串.哈希.列表.集合.有序集合,同时在字符串的基础之上演变 出了位图(Bitmaps)和HyperLo ...

  3. c++ Message与Folder 拷贝 析构(没有动态空间的类)

    c++ Message与Folder 拷贝 析构(没有动态空间的类) 1.两个类里边分别保存一个对方的set表,当前类有拷贝或者销毁时需要更新另一个类的set表. 2.两个类都需要访问对方的priva ...

  4. 2020年的第一天-我的IDEA出现This license ... has been cancelled

    IDEA激活在1月3日的早上,激活码被取消了.提示:This license ... has been cancelled. 经过查询.解决方法教程无非是. ¥%--&*(激活码... 210 ...

  5. 一文带你解读Spring5源码解析 IOC之开启Bean的加载,以及FactoryBean和BeanFactory的区别。

    前言 通过往期的文章我们已经了解了Spring对XML配置文件的解析,将分析的信息组装成BeanDefinition,并将其保存到相应的BeanDefinitionRegistry中,至此Spring ...

  6. docker 批量删除 none 镜像

    在使用 docker images 命令的时候,经常会在列表中看到 <none>:<none> 的镜像. 这种镜像在 Docker 官方文档中被称作 dangling imag ...

  7. 100G/40G/25G/10G网络测试解决方案

    一.100G概述 随着CDN等视频直播业务和P2P业务的快速发展,带宽的要求越来越高.当前5G业务势头正盛,其基于400G的主干网络通信业务也在积极部署之中.但当前在很多的业务场景中,100G系统的部 ...

  8. 为什么DRAM采用地址复用技术?为什么SRAM不采用地址复用技术?

    行列地址复用:比如你的存储器容量是16bit,那么可以将这16个比特组织成一个4*4的矩阵,为了找到某个你想要找的bit,比如第1行第2列的那个bit.你先发送二进制的01,表示要找的数据在第1行:接 ...

  9. 使用while循环和for循环输出2~100之间的素数(只能被1和自己整除的自然数)

    不管是while循环还是for循环,原理都是取根号,循环到取根号后的数,至于为什么需要循环到开根后的数,我想主要是因为一个数的分解因子在开根号后的数向上取整以下吧. 话不多说,上代码: while循环 ...

  10. 【C#基础概念】虚方法virtual

    目录: 一.虚方法的概念 二.虚方法的特点 三.虚方法的作用 四.虚方法的声明 五.虚方法的执行 六.虚拟类的规则 一.虚方法的概念 在C#中,虚方法就是可以被子类重写的方法,如果子类重写了虚方法,则 ...