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.www58058.com/76023

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

相關推薦

  • N25第一周作業

    一.計算機基礎知識     1.計算機是什么?         計算機是一種能夠按照指令對各種信息進行自動加工和處理的電子設備     2.計算機的組成?       &…

    Linux干貨 2016-12-06
  • 關于大型網站技術演進的思考(三):存儲的瓶頸(3)

    原文出處: 夏天的森林    存儲的瓶頸寫到現在就要進入到深水區了,如果我們所做的網站已經到了做數據庫垂直拆分和水平拆分的階段,那么此時我們所面臨的技術難度的挑戰也會大大增強。 這里我們先回顧下數據庫的垂直拆分和水平拆分的定義: 垂直拆分:把一個數據庫中不同業務單元的數據分到不同的數據庫里。 水平拆分:是根據一定的規則把同一業務…

    Linux干貨 2015-03-03
  • week7

    1、創建一個10G分區,并格式為ext4文件系統; (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl; (2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; fdisk /dev/sdb  按提示創建出來10G分區 查看1:…

    Linux干貨 2016-12-08
  • 磁盤術語與磁盤管理

    磁盤術語與磁盤管理 磁盤術語 擴展1-4 邏輯5- sector 512 6位 sector 10位 track 1024 cylinder 8位head 256 0-1023 2^6=64 512*63*1024*256 cylinder=512*63*256 10M CHS 設備文件 磁盤設備的設備文件命名:/dev/DEV_FILE SCSI, SAT…

    Linux干貨 2017-05-15
  • N22-第九周作業

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash # declare -i count1=0 declare -i count2=0 for i in $(awk -F : '{print $7}&#03…

    Linux干貨 2016-10-17
  • 硬盤基礎知識及 MBR、GPT分區格式

    一,硬盤知識     硬盤接口類型:         ? 并行:             IDE: 133MB/s &n…

    Linux干貨 2016-09-19
欧美性久久久久