高可用解决方案 Keepalived 案例(keepalived + nginx)

这篇具有很好参考价值的文章主要介绍了高可用解决方案 Keepalived 案例(keepalived + nginx)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

案例

Nginx + Keepalived 案例

使用 Nginx + Keepalived 实现一个 web 服务高可用方案

架构图如下:

高可用解决方案 Keepalived 案例(keepalived + nginx),Linux,nginx,服务器,linux,keepalived


Nginx 的安装与配置

  1. 安装软件

    # 安装nginx以及拓展源
    yum install epel-release -y
    yum install -y nginx
    
  2. Nginx 配置 web 站点

    #web1
    [root@nginx1 ~]# vi /etc/nginx/conf.d/web.conf 
    server{
        listen 8080;
        root         /usr/share/nginx/html;
        index test.html;
    }
    
    [root@nginx1 ~]# echo "<h1>This is web1</h1>"  > /usr/share/nginx/html/test.html
    
    #web2
    [root@nginx2 ~]# vi /etc/nginx/conf.d/web.conf 
    server{
        listen 8080;
        root         /usr/share/nginx/html;
        index test.html;
    }
    
    [root@nginx2 ~]# echo "<h1>This is web2</h1>"  > /usr/share/nginx/html/test.html
    
  3. 启动 Nginx

    nginx -t
    nginx
    

Keepalived 的安装与配置

  1. 安装 Keepalived

    yum install -y keepalived
    
  2. 配置 Keepalived(不同角色有些选项不一样:state 和 priority 配置项)

    web1:master

    vi /etc/keepalived/keepalived.conf
    
    ! Configuration File for keepalived
    global_defs {
       router_id LVS_DEVEL_1
    }
    vrrp_script nginx_check {
      script "/tools/nginx_check.sh"
      interval 1
    }
    vrrp_instance VI_1 {
      state MASTER
      #nopreempt
      interface ens33
      virtual_router_id 52
      priority 100
      advert_int 1
      authentication {
        auth_type PASS
        auth_pass test
      }
      virtual_ipaddress {
        192.168.149.100
      }
      track_script {
        nginx_check
      }
      notify_master /tools/master.sh
      notify_backup /tools/backup.sh
      notify_fault /tools/fault.sh
      notify_stop /tools/stop.sh
    }
    

    web2:slave

    vi /etc/keepalived/keepalived.conf
    
    ! Configuration File for keepalived
    global_defs {
       router_id LVS_DEVEL_2
    }
    vrrp_script nginx_check {
      script "/tools/nginx_check.sh"
      interval 1
    }
    vrrp_instance VI_1 {
      state BACKUP
      #nopreempt
      interface ens33
      virtual_router_id 52
      priority 90
      advert_int 1
      authentication {
        auth_type PASS
        auth_pass test
      }
      virtual_ipaddress {
        192.168.149.100
      }
      track_script {
        nginx_check
      }
      notify_master /tools/master.sh
      notify_backup /tools/backup.sh
      notify_fault /tools/fault.sh
      notify_stop /tools/stop.sh
    }
    
  3. 编写相关脚本

    编写 Keepalived 日志脚本(将每次工作过程输出到日志上)

    # 将所有脚本放在同一个目录下,方便集中管理
    mkdir /tools && cd /tools
    
    cat > master.sh << 'EOF'
    ip=$(hostname -I | awk '{print $1}')
    dt=$(date +'%Y%m%d %H:%M:%S')
    echo "$0--${ip}--${dt}" >> /tmp/kp.log
    EOF
    
    cat > backup.sh << 'EOF'
    ip=$(hostname -I | awk '{print $1}')
    dt=$(date +'%Y%m%d %H:%M:%S')
    echo "$0--${ip}--${dt}" >> /tmp/kp.log
    EOF
    
    cat > fault.sh << 'EOF'
    ip=$(ip addr|grep inet| grep 192.168 |awk '{print $2}')
    dt=$(date +'%Y%m%d %H:%M:%S')
    echo "$0--${ip}--${dt}" >> /tmp/kp.log
    EOF
    
    cat > stop.sh << 'EOF'
    ip=$(ip addr|grep inet| grep 192.168| awk '{print $2}')
    dt=$(date +'%Y%m%d %H:%M:%S')
    echo "$0--${ip}--${dt}" >> /tmp/kp.log
    EOF
    

    编写健康检查脚本

    该脚本对 Nginx 进程进行检测,如果发现 Nginx 进程没了则返回失败(1)

    cat > nginx_check.sh << 'EOF'
    #!/bin/bash
    result=`pidof nginx`
    if [ ! -z "${result}" ];
      then exit 0
      else exit 1
    fi
    EOF
    
  4. 编写完脚本后对这些脚本加 x 权限,并启动 Keepalived

    cd /tools/ && chmod +x *.sh
    systemctl restart keepalived.service
    

验证

  1. 访问 VIP 地址

    现在 web1(192.168.149.130)是 master

    访问 192.168.149.100:8080,可以看到访问成功了

    高可用解决方案 Keepalived 案例(keepalived + nginx),Linux,nginx,服务器,linux,keepalived

  2. 切换主备

    关闭 web1 服务

    [root@nginx1 ~]# nginx -s stop
    

    然后再 web2 服务的主机可以看到 web2(192.168.149.131)获得了 VIP,升级成了主

    高可用解决方案 Keepalived 案例(keepalived + nginx),Linux,nginx,服务器,linux,keepalived

    访问 VIP 地址(192.168.149.100:8080),可以发现访问到了 web2 服务器上

    高可用解决方案 Keepalived 案例(keepalived + nginx),Linux,nginx,服务器,linux,keepalived

    之后重启 web1 看一下

    可以看到 web1 主机又变成了 master,因为没有配置抢占模式/非抢占模式,所以选举机制是优先级,web1 的优先级比 web2 要高,所以 web1 启动后就会把 master 角色拿过来


问题解决

查看 keepalived 系统日志:less /var/log/messages

  • Unable to access script /shell/nginx_check.sh

    selinux 禁止了这个脚本。keepalived 进程的安全上下文与脚本的安全上下文不一致,就算有 rwx 权限也无法执行

    • 最简单的解决方案就是关闭 selinux 功能:

      # 永久关闭 selinux
      sed -i "s\SELINUX=enforcing\SELINUX=disabled\g" /etc/selinux/config
      # 重启主机
      reboot
      
      # 临时关闭selinux,reboot服务器后失效
      etenforce 0
      
    • 解决方案2:将脚本转移到 /usr/libexec/keepalived 目录中

      这个目录的安全上下文是 keepalived_unconfined_script_exec_t,与 keepalived 进程的安全上下文一致

    • 解决方案3:修改 check.sh 的安全上下文为 keepalived 进程的安全上下文

      chcon -t keepalived_unconfined_sript_exec_it /etc/keepalived/nginx_check.sh
      

      keepalived_unconfined_script_exec_t 是一个在 SELinux 中用于标识 Keepalived 执行未限制脚本的上下文

      这个上下文允许 Keepalived 进程在执行脚本时绕过一些 SELinux 限制,从而可以在需要的情况下执行脚本

    # 查看 keepalived 进程的安全上下文
    ps -eZ | grep keepalived
    #输出:system_u:system_r:keepalived_t:s0 19689 ?	00:00:00 keepalived
    
    # 查看文件/目录的安全上下文
    ll -Z /etc/keepalived/check.sh
    #输出:-rwr-xr-x. root system_u:object_r:etc_t:s0
    
  • Disabling track script chk_nginx since not found

    在 VRRP 实例中添加 track_script { chk_nginx } 以启动脚本检测

  • warning default user ‘keepalived_script’for script execution does not exist - please create

    找不到 keepalived_script 这个用户组,开启下面的配置,如果找不到就使用 root

    在全局配置 global_defs 中添加 script_user root

    注:该配置非必需,日志打印也只是警告而已

  • SECURITY VIOLATION - scripts are being executed but script_security notenabled

    在全局配置 global_defs 中添加 enable_script_security

  • Unknown keyword:’}’、‘track_script{’、'chk_nginx 等等

    配置文件格式不正确:使用到大括号 { 的地方,确保正文与大括号间有空格。

  • Can't open PID file /var/run/nginx.pid (yet?) after start: No such fileor directory

    使用 systemctl start nginx 时,先调用的是 nginx.service,启动时 nginx.pid 文件并未生成

    在 /usr/lib/systemd/system/nginx.service 中 [service] 模块下添加 ExecStartPost=/bin/sleep 0.1

  • Can't open PID file /var/run/keepalived.pid (yet?) after start: No suchfile or directory

    使用 systemctl start keepalived 时,先调用的是 keepalived.service,启动时 keealived.pid 文件并未生成

    在 /usr/lib/systemd/system/keepalived.service 中 [service] 模块下添加 ExecStartPost=/bin/sleep 0.1文章来源地址https://www.toymoban.com/news/detail-779170.html


到了这里,关于高可用解决方案 Keepalived 案例(keepalived + nginx)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • keepalived高可用学习 keepalived+nginx高可用负载均衡配置

    1、概述 keepalived是为lvs设计的,用于管理和监控lvs集群系统中各个服务节点的状态,后面又加入了VRRP虚拟路由冗余协议,可以实现路由器高可用,原理是多台提供路由功能的服务器组成一个路由组,一个master和多个backup,master有vip,可以发组播,当backup收不到就认为master挂了

    2024年02月07日
    浏览(45)
  • keepalived 高可用主备

    实验采用两台centos9 nginx+keepalived 一共两台,进行主备切换 主服务器 192.168.100.105 备用 192.168.100.106 虚拟ip 192.168.100.200 安装 Undefined nginx 配置需要更改为虚拟ip CSS 两台机器均已经配置好监听同ip keepalived master配置 GraphQL 备用服务器配置 GraphQL 直接访问192.168.100.200 这里主服务掉线

    2024年02月04日
    浏览(41)
  • keepalived检测Nginx高可用

    node1 192.168.136.55 node2 192.168.136.56 两台机器都安装dnf install keepalived nginx 主的配置 从的配置 测试  访问虚拟IP   访问的是master 访问的是backup 目前 Keepalived 仅能通过主机是否宕机来进行业务切换,如果仅 Nginx 业务出现故障是无法 切换的,需在 Keepalive 中添加健康检查来达到检

    2024年04月27日
    浏览(34)
  • LVS+Keepalived 高可用集群

    支持故障自动切换(Failover) 支持节点健康状态检查(Health Checking) 基于vrrp协议完成地址流动 为vip地址所在的节点生成ipvs规则(在配置文件中预先定义) 为ipvs集群的各RS做健康状态检测 基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务 官方

    2024年02月07日
    浏览(44)
  • Keepalived+http高可用实战

    环境准备: 两台安装了keepalived的服务器 ip:192.168.134.170;192.168.134.172 1、安装http服务 2、写一个测试页面 3、修改keepalived配置文件(/etc/keepalived/keepalived.conf) 4、结果 但是此时如果出现了web服务器故障,没有办法进行自动切换。 5、写检查脚本 6、添加运行(放到后台)==执行

    2024年02月13日
    浏览(36)
  • LVS+Keepalived 高可用群集

    一.背景   企业应用中,单点服务器承担应用存在单点故障的危险   单点故障一旦发生,企业服务将发生中断,造成极大的危害   为解决单点故障,而引入keepalived 专为LVS和HA设计的一款健康检查工具 支持故障自动切换(Failover) 支持节点健康状态检查(Health Checking) 判断LVS负载

    2024年04月12日
    浏览(38)
  • lvs+keepalived高可用集群

    keepalive为LVS应运而生的高可用服务。LVS的调度器无法做高可用,于是keepalive这个软件,实现的是调度器的高可用。但是, keepalive不是专门为LVS集群服务的,也可以做其他代理服务器的高可用(面试) LVS的高可用集群:主调度器和备调度器(可以有多个)一主两备或者一主一

    2024年02月08日
    浏览(35)
  • LVS +Keepalived高可用群集

    Keepalived是一种用于实现高可用性的软件,它主要用于服务器和网络设备的故障转移和负载均衡。Keepalived使用VRRP协议来实现故障转移,并结合健康检查和负载均衡算法来确保服务的高可用性。 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单

    2024年02月13日
    浏览(45)
  • keepalived+lvs实现高可用

    目录 环境 1.配置real-server服务器 2.配置keepalived和lvs 3.测试: keepalived+lvs实现高可用: lvs可以监控后端服务器,当服务器宕机之后可以对其进行故障切换。 keepalived是对VIP进行检测,当某一个主机的vip错误,则会将vip漂移到另一个节点上。 5台主机---(两台主机--keeplived,lvs 

    2024年02月12日
    浏览(40)
  • LVS +Keepalived 高可用群集部署

    在这个高度信息化的 IT 时代,企业的生产系统、业务运营、销售和支持,以及日常管理等环节越来越依赖于计算机信息和服务,对高可用(HA)技术的应用需求不断提高,以便提供持续的、不间断的计算机系统或网络服务。 Keepalived是一个基于VRRP协议来实现的LVS服务高可用方

    2024年02月09日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包