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

相关推荐

  • Linux计算机基础及Linux入门

    计算机,Linux发型版,Linux 哲学思想,基本命令,startx ,pwd tty ,shutdown ,ifconfig , echo, export, historybo, poweroff,reboot, date, hwclock, Linux 获取命令帮助信息,Linux发行版的基础目录,

    2017-09-18
  • 源码编译安装http

    为什么需要编译安装软件?   1、软件在编译期间需要配置:比如需要指定安装路径,定制模块等功能;   2、软件需要统一安装路径:在编译安装时可以方便指定这些路径;   3、需要最新的版本:对于某些软件来说可能需要最新的版本。 编译前的准备工作:     1、安装开发工具:make、gcc等…

    Linux干货 2016-08-24
  • Python内置数据结构——集合set

    集合 定义 set翻译为集合 collection翻译为集合类型,是一个较大的概念 set是一个可变的、无序的、不重复的元素组成的集合 set的元素要求必须可以hash,目前已学的不可hash的类型只有list、set 元素不可以索引 set可以迭代 set的初始化 set_1 =set() #表示定义一个空集合set_1 set_1 =set(iterab…

    Linux干货 2017-10-03
  • gawk 语法介绍及其实例

    gawk 语法介绍及其实例  §·awk介绍 Linux文本处理三剑客:grep  sed 和 awk 。其中grep是一种文本过滤工具,sed是文本行编辑器,而awk是一种报表生成器,就是对文件进行格式化处理的,这里的格式化不是文件系统的格式化,而是对文件的内容进行的各种排版,进而格式化显示。 在linux之上我们使用awk是GUN a…

    Linux干货 2016-09-22
  • Bash的I/O重定向及管道

    每周更新的博客定时派送啦,本周与大家一起分享的是重定向和管道 首先了解一下 读入数据:Input 输出数据:Output 我们来看一下重定向:  >  覆盖重定向 上面图中 > 文件名     创建空文件 touch 文件名 创建空文件 这两种方法都可以创建一个新的文…

    2017-07-21
  • 基于key验证和一些自动化运维工具

    pssh pscp.pssh Pslurp.pssh AIDE等

    2018-01-16