基于keepalived實現高可用nginx服務

基于keepalived實現高可用nginx服務

環境及配置前提說明

主機1,ip:192.168.25.140 運行web服務

主機2,ip:192.168.25.141 運行web服務

主機3,ip:192.168.25.138 運行nginx服務和keepalived服務

主機4,ip:192.168.25.139 運行nginx服務和keepalived服務

1兩臺nginx主機編譯安裝nginx服務

    # 下載源碼包
    ]# yum install -y make
    ]# yum install -y gcc
    ]# yum -y groupinstall "Development Tools" "Server Platfrom Development"
    ]# yum install pcre-devel openssl-devel zlib-devel -y  手動解決最重要的依賴關系包
    ]# useradd -r nginx 增加一個系統用戶
    ]# tar -xf nginx-1.10.0.tar.gz
    ]# cd nginx-1.10.0/
    nginx-1.10.0]# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/va/log/nginx.log 
    --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock 
    --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module 
    --with-http_stub_status_module --with-threads --with-file-aio
    ]# make && make install
    ]# vim /etc/profile.d/nginx.sh
        export PATH=/usr/local/nginx/sbin:$PATH
    ]# . /etc/profile.d/nginx.sh
    ]# nginx -t 檢測錯誤
    ]# nginx -h 可查看命令使用幫助
    啟動服務,檢測端口是否已經啟用
    ]# /usr/local/nginx/sbin/nginx 啟動服務
    ]# ss -tnlp 查看80端口是否已經啟用,注意,如果httpd服務已經啟用了話 這里會啟動失敗

2兩臺nginx主機安裝keepalived服務

]# yum install keepalived -y

2.1為兩臺keepalived主機編輯郵件通知腳本

]# vim notify.sh
#!/bin/bash
#
contact='root@localhost'

notify() {
        mailsubject="$(hostname) to be $1, vip floating"
        mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
        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

2.2將腳本移動至/etc/keepalived/目錄下,并且給腳本執行權限

]# mv notify.sh /etc/keepalived/
]# chmod +x notify.sh

3配置nginx的反代配置文件

    ]# vim /etc/nginx/nginx.conf 編輯主配置文件,在http上下文編輯upstream server,如下;

基于keepalived實現高可用nginx服務

4配置兩臺keepalived節點主機配置文件

]# vim  keepalived.conf,詳細配置如下;
4.1節點一配置
! Configuration File for keepalived

    global_defs {
       notification_email {
         root@localhost
       }
       notification_email_from keepalived@localhost
       smtp_server 172.0.0.1
       smtp_connect_timeout 30
       router_id node1
       vrrp_mcast_group4 224.0.100.19

    }

    vrrp_script chk_down {
            script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
            interval 1
            weight -5
    }
    vrrp_script chk_nginx {
            script "killall -0 nginx && exit 0 || exit 1"
            interval 1
            weight -5
    }

    vrrp_script chk_nginx
    vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 1
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass cb77b8da
        }

    virtual_ipaddress {
            192.168.25.142/32 dev eth0 #nginx外網地址
        }
    track_script {
            chk_down
            chk_nginx
        }
        notify_master "/etc/keepalived/notify.sh master"
        notify_backup "/etc/keepalived/notify.sh backup"
        notify_fault "/etc/keepalived/notify.sh fault"
    }
4.2節點二配置
! Configuration File for keepalived

    global_defs {
       notification_email {
         root@localhost
       }
       notification_email_from keepalived@localhost
       smtp_server 172.0.0.1
       smtp_connect_timeout 30
       router_id node1
       vrrp_mcast_group4 224.0.100.19

    }

    vrrp_script chk_down {
            script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
            interval 1
            weight -5
    }
    vrrp_script chk_nginx {
            script "killall -0 nginx && exit 0 || exit 1"
            interval 1
            weight -5
    }

    vrrp_instance VI_1 {
        state BACKUP
        interface eth0
        virtual_router_id 1
        priority 98
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass cb77b8da
        }
        virtual_ipaddress {
            192.168.25.142/32 dev eth0 #nginx外網地址
        }


    track_script {
            chk_down
            chk_nginx
        }
        notify_master "/etc/keepalived/notify.sh master"
        notify_backup "/etc/keepalived/notify.sh backup"
        notify_fault "/etc/keepalived/notify.sh fault"
    }

5為兩臺RS web服務器編輯主頁以便進行測試

]# vim /var/www/html/index.html
    <h1>RS 1</h1> #RS1的主頁
    <h1>RS 2</h1> #RS2的主頁

6進行訪問測試

原創文章,作者:M20-1馬星,如若轉載,請注明出處:http://www.www58058.com/58159

(0)
M20-1馬星M20-1馬星
上一篇 2016-11-07
下一篇 2016-11-07

相關推薦

  • Linux 第六天: (08月03日) 練習和作業

    Linux 第六天: (08月03日) 練習和作業        當用戶xiaoming對/testdir目錄無執行權限時, 無法做哪些操作? 無法 ls -l 無法cd     當用戶xiaoqiang對/testdir目錄無讀權限時, 無法做哪些操作? 無法查看目錄文件列表   &nb…

    Linux干貨 2016-08-08
  • 一波三折的嘗試,windows下通過VMware虛擬機安裝windows操作系統

    已經嘗試過多次VMware下linux系統的安裝,均安裝正常,同樣環境下安裝windows系統會發生什么情況,首先選擇的是windows10系統,然而在安裝過程中,iso鏡像光盤一直無法掛載,在經歷更換iso鏡像,更換另一臺電腦之后,初步判定問題為win10系統iso鏡像順壞,因為同樣環境用win7的鏡像卻能正常掛載,且正常啟動到安裝系統界面…..
    但是,問題真的會是這樣嗎?

    2018-03-27
  • 【26期】Linux第七周學習小總結

        今天給大家的分享是本周的一個有趣的小內容,LVM邏輯卷相關的,為什么分享這個內容呢?主要是剛沒有接觸或者說深入接觸Linux時,有人在群里提問,如果不用虛擬機,那Centos本身有快照嗎?當時說的答案很熱鬧,不過大部分還是傾向于沒有快照,本周學習的邏輯卷管理器章節里,就這個問題給了一個準確答案,那我們一起來看一下吧!  …

    2017-08-26
  • Redis學習手冊(持久化)

    一、Redis提供了哪些持久化機制:     1). RDB持久化:     該機制是指在指定的時間間隔內將內存中的數據集快照寫入磁盤。         2). AOF持久化:     該機制將以日志…

    Linux干貨 2015-02-25
  • Mysql 啟動時 報ERROR 2002,分析解決、

    1、故障現象 [root@localhost scripts]# mysql -u root ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysqld.sock’ (2) 2、故障分析 查看mysql實例的狀態 [root@localhost scr…

    Linux干貨 2017-08-29
  • shell腳本編程2

    shell腳本編程2   今天繼續學習了shell腳本編程,續之前寫的腳本編程1。上次主要學了編程的基礎,腳本格式,變量類型及變量的使用,條件測試,數字運算并且進行了部分練習,因為這部分邏輯思維能力要求不是很高,因此記憶起來難度不是特別大。   從今天開始便進入了流程控制以及函數、數組、高級字符串操作、高級變量等內容的學習,總體來說難度和…

    Linux干貨 2016-08-16
欧美性久久久久