keepalived+nginx部署(单主模型)

环境准备
Centos7系统,后端服务器提供web服务。
地址规划:

  • VS1: 172.18.51.7
  • VS2:172.17.51.77
  • RS1:172.18.51.74
  • RS2:172.18.51.75
  • VirtualIP:172.18.51.82

拓扑图:

keepalived+nginx部署(单主模型)

原理:nginx是高度模块化的应用程序,其中nginx_proxy模块即可实现负载均衡,将前端的用户请求通过调度算法分摊在后端的真实主机,达到均衡的效果。这里使用upstream模块将前端请求转发至后端;利用keepalived配置主备服务器,对各RS的健康状态进行检测,通过共用的虚拟IP地址对外提供服务。


RS:

提供httpd服务,定义web主页,并启动服务

 RS的预配置脚本:

vim setparam.sh
#!/bin/bash
        #
        vip=172.18.51.100
        mask='255.255.255.255'

        case $1 in
        start)
          echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
          echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
          echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
          echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

          ifconfig lo:0 $vip netmask $mask broadcast $vip up
          route add -host $vip dev lo:0
          ;;
        
         stop)
          ifconfig lo:0 down
          echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
          echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
          echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
          echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
          ;;
       
         *) 
          echo "Usage $(basename $0) start|stop"
          exit 1
      ;;
esac

VS

当所有real server宕掉时,sorry server顶替,定义其主页,启动服务(注意修改服务端口为8080)

开启nginx的upstream模块,配置反向代理,启动服务(nginx占用80端口)

/etc/nginx/nginx.conf

    upstream websers {
        server 172.18.51.74:80;
        server 172.18.51.75:80;
        server 127.0.0.1:8080 backup; #设置其应急响应服务器

/etc/nginx/conf.d/default.conf

    location / {
        root   /usr/share/nginx/html;
        proxy_pass http://websers;    #代理至后端主机
        index  index.html index.htm;
    }

配置keepalived配置文件:

vs1和vs2的配置文件,主备模式、优先级不一样,其它地方一致;

/etc/keepalived/keepalived.con

! Configuration File for keepalived

global_defs {
   notification_email {       
   root@localhost
}
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   vrrp_mcast_group4 224.0.101.24
}
vrrp_script chk_down {       #存在文件时,检测成功,即执行降级;否则不存在,全部退出;实现服务器切换
        script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
        interval 1
        weight -5
}

vrrp_script ngxstatus {    #脚本,健康状态检测,检测nginx是否存活
        script "killall -0 nginx && exit 0 || exit 1"
        interval 1
        weight -5
}

vrrp_instance sr1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    #nopreempt            #非抢占模式(默认抢占模式)
    authentication {
        auth_type PASS
        auth_pass rE+szbuO
    }
        track_script {     #脚本调用
        chk_down
        ngxstatus
}

    virtual_ipaddress {
        172.18.51.82/16 dev ens33 label ens33:0
    }
        notify_master "/etc/keepalived/notify.sh master"
        notify_backup "/etc/keepalived/notify.sh backup"
        notify_fault "/etc/keepalived/notify.sh fault"
         #此处调用脚本实现发邮件给管理员
}

调用脚本

[root@centos703 keepalived]# vim notify.sh 
          #!/bin/bash
          #
          contact='root@localhost'
          notify() {
             mailsubject="vrrp:$(hostname) to be $1"
             mailbody="$(hostname) to be $1,vrrp transition, $(date)."
             echo "$mailbody" | mail -s "$mailsubject" $contact
          }
            case $1 in
            master)
              notify master
              ;;
            backup)
              notify backup
              ;;
            fault)
              notify fault
              ;;
            *)
              echo "Usage: $(basename $0) {master|backup|fault}"
              exit 1
              ;;
          esac
~               

客户端测试:

模拟服务器正常,一台web服务器宕机,两台都宕机访问情况:

keepalived+nginx部署(单主模型)

配置vrrp实例后将遵循自动生成VIP地址,主服务器故障时自动实现地址漂移

keepalived+nginx部署(单主模型)

keepalived+nginx部署(单主模型)

nginx健康状态检测脚本当nginx宕机时,则会自动将权重减去5,VIP地址漂移至优先级高的主机

keepalived+nginx部署(单主模型)

keepalived+nginx部署(单主模型)


原创文章,作者:Mr-Xiao,如若转载,请注明出处:http://www.178linux.com/76023

(0)
Mr-XiaoMr-Xiao
上一篇 2017-05-17 10:17
下一篇 2017-05-17 11:08

相关推荐

  • 加密解密基础、PKI以及自建私有CA

    加密解密基础、PKI以及自建私有CA 加密是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。 解密就是加密的逆向操作,将加密过的不可读的数据经过处理,能够是之前不可读的信息还原成可读信息。 PKI是Public Key Infrastructure的首字母缩写,翻译过来就是公钥基础设施;…

    Linux干货 2016-12-07
  • linux基础

    1.计算机的组成及其功能。 计算机的主要组成部分可以归纳为以下五个部分:控制器、运算器、存储器、输入设备、和输出设备。 控制器 是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。 运算器 运算器的功能是对数据进行各种算术运算…

    Linux干货 2016-08-15
  • Linux中基础且常用的指令介绍及示例

    首先需要明确的是:Linux中无论是指令还是选项或者参数,请认真对待字母大小写。Linux中通用的命令使用方式是:命令 [选项] [参数] 1. pwd pwd:print name of current/working directory,即打印当前的目录(工作目录),光杆处于哪个目录下就会在终端上输出当前路径的绝对路径。用法示例: [lanti…

    Linux干货 2016-10-30
  • LVS产生背景、原理及LVS-DR应用实例(二)

    六、LVS-DR应用实例          (一)基本构建思路:           Director: 通过Director实现访问调度到RS1,RS2,实现负载均衡,RS3负责动态分离。…

    Linux干货 2016-10-29
  • 8.1_Linux管道的使用和用户管理

    什么是管道? 管道就是把命令1的标准输出发送给命令2的标准输入,把命令2发的标准输出发送给命令3的标准输入。。。 最后一个命令会在当前shell进程的子shell进程中执行用来 管道实现了使用目的单一的小程序,组合小程序完成复杂的任务 管道需要配合其他命令的使用 tr命令的使用,常常用于配合管道     -c或–co…

    Linux干货 2016-08-10
  • 无网不利

                    网络是主机之间交互的必备条件。联网就是将主机互联来形成网络,使得网络中的主机得以交换信息。       &n…

    2017-08-19