1. 程式人生 > >主題:分散式架構高可用架構_Keepalived+Nginx實現高可用Web負載均衡

主題:分散式架構高可用架構_Keepalived+Nginx實現高可用Web負載均衡

一、場景需求

二、Keepalived 簡要介紹
Keepalived 是一種高效能的伺服器高可用或熱備解決方案,Keepalived 可以用來防止伺服器單點故障的發生,通過配合 Nginx 可以實現 web 前端服務的高可用。
Keepalived 以 VRRP 協議為實現基礎,用 VRRP 協議來實現高可用性(HA)。VRRP(VirtualRouter
Redundancy Protocol)協議是用於實現路由器冗餘的協議,VRRP 協議將兩臺或多臺路由器裝置虛擬成一個裝置,對外提供虛擬路由器 IP(一個或多個),而在路由器組內部,如果實際擁有這個對外 IP 的路由器如果工作正常的話就是 MASTER,或者是通過

演算法選舉產生,MASTER 實現針對虛擬路由器 IP 的各種網路功能,
如 ARP 請求,ICMP,以及資料的轉發等;其他裝置不擁有該虛擬 IP,狀態是 BACKUP,除了接收 MASTER 的VRRP 狀態通告資訊外,不執行對外的網路功能。當主機失效時,BACKUP 將接管原先 MASTER 的網路功能。VRRP 協議使用多播資料來傳輸 VRRP 資料,VRRP 資料使用特殊的虛擬源 MAC 地址傳送資料而不是自身網絡卡的 MAC 地址,VRRP 執行時只有 MASTER 路由器定時傳送 VRRP 通告資訊,表示 MASTER 工作正常以及虛擬路由器 IP(組),BACKUP 只接收 VRRP 資料,不傳送資料,如果一定時間內沒有接收到 MASTER 的通告資訊,各 BACKUP 將宣告自己成為 MASTER,傳送通告資訊,重新進行 MASTER 選舉狀態。

三、方案規劃

 

四、安裝 Nginx

1、安裝編譯 Nginx 所需的依賴包

Connecting to 192.168.1.121:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.


Last login: Sat Apr 16 17:55:20 2016 from 192.168.1.61
[[email protected] ~]# yum install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel

2、上傳 Nginx(nginx-1.6.2.tar.gz)到 /usr/local/src 目錄

3、編譯安裝 Nginx

[[email protected] ~]# cd /usr/local/src/
[[email protected] src]# ls
keepalived-1.2.18.tar.gz  nginx-1.6.2.tar.gz
[[email protected] src]# tar -zxvf nginx-1.6.2.tar.gz 

[[email protected] src]# cd nginx-1.6.2
[[email protected] nginx-1.6.2]# ./configure --prefix=/usr/local/nginx

[[email protected] nginx-1.6.2]# make && make install

[[email protected] nginx-1.6.2]# vi /usr/local/nginx/conf/nginx.conf

user  root;
worker_processes  1;


#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;


    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';


    #access_log  logs/access.log  main;


    sendfile        on;
    #tcp_nopush     on;


    #keepalive_timeout  0;
    keepalive_timeout  65;


    #gzip  on;


    server {
        listen       88;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            root   html;
            index  index.html index.htm;
        }
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}


修改 Nginx 歡迎首頁內容(用於後面測試,用於區分兩個節點的 Nginx):

vi /usr/local/nginx/html/index.html 

192.168.1.121 中的標題加 1

Welcome to nginx! 1

192.168.1.122 中的標題加 2 

Welcome to nginx! 2

5、系統防火牆開啟對應的埠 88

vi /etc/sysconfig/iptables

 -A INPUT -m state --state NEW -m tcp -p tcp --dport 88 -j ACCEPT

service iptables restart

6、測試 Nginx 是否安裝成功

/usr/local/nginx/sbin/nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

7、啟動 Nginx

/usr/local/nginx/sbin/nginx 

重啟

/usr/local/nginx/sbin/nginx -s reload

8、設定 Nginx 開機啟動

vi /etc/rc.local 

加入

/usr/local/nginx/sbin/nginx

分別訪問兩個nginx

nginx1

2.nginx2

 1、上傳或下載 keepalived(keepalived-1.2.18.tar.gz)到 /usr/local/src 目錄

2、解壓安裝

 cd /usr/local/src

 tar -zxvf keepalived-1.2.18.tar.gz

cd keepalived-1.2.18

 ./configure --prefix=/usr/local/keepalived

 make && make install

3、將 keepalived 安裝成 Linux 系統服務:

因為沒有使用 keepalived 的預設路徑安裝(預設是/usr/local),安裝完成之後,需要做一些工作

複製預設配置檔案到預設路徑

mkdir /etc/keepalived

 cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

複製 keepalived 服務指令碼到預設的地址

 cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

 cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

 ln -s /usr/local/sbin/keepalived /usr/sbin/

ln -s /usr/local/keepalived/sbin/keepalived /sbin/

設定 keepalived 服務開機啟動

chkconfig keepalived on

4、修改 Keepalived 配置檔案

 注意,如果linux用的網絡卡是eth0,interface就要寫成eth1,用的是eth1就要寫成eth1

(1) MASTER 節點配置檔案(192.168.1.121)

vi /etc/keepalived/keepalived.conf


! Configuration File for keepalived


global_defs {
   router_id edu-proxy-01
}


vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh"
    interval 2
    weight -20
}


vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    mcast_src_ip 192.168.1.121
    priority 100
    nopreempt
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }


    track_script {
        chk_nginx
    }


    virtual_ipaddress {
        192.168.1.120
    }

BACKUP節點配置 (192.168.1.122)

! Configuration File for keepalived


global_defs {
   router_id edu-proxy-02
}


vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh"
    interval 2
    weight -20
}


vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    mcast_src_ip 192.168.1.122
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }


    track_script {
        chk_nginx
    }


    virtual_ipaddress {
        192.168.1.120
    }
}

5.編寫Nginx狀態檢測指令碼/etc/keepalived/nginx_check.sh(keepalived.conf中配置)

指令碼要求:如果nginx停止執行,嘗試啟動,如果無法啟動則殺死本機的keepalived程序,keepaied將虛擬ip繫結到BACKUP機器上,內容如下

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi

fi

儲存後給指令碼授鄧許可權

chmod -x /etc/keepalived/nginx_check.sh 

6.啟動keepalived

serivce keepalived start

我們在cmd中檢視arp

在edu-proxy-01

[[email protected] keepalived]# ip add

這裡我們訪問192.168.1.120:88

7.Keepalived+nginx的高可用測試

(1)關閉192.168.1.121的Nginx,Keepalived會將它重新啟動

[[email protected] keepalived]# /usr/local/nginx/sbin/nginx -s stop

(2)關閉192.168.1.121中的Keepalived,VIP會切換到192.168.1.122中

[[email protected] keepalived]# service keepalived stop

[email protected]-02 keepalived]# ip add

檢視虛擬ip

說明此時VIP已經漂移到主機192.168.1.122上了

再能過VIP來訪問Nginx叢集,訪問到的也是192.168.1.122

(3)重新啟動192.168.1.121中的Keepalived,VIP又會切回到192.168.1.121中來

[[email protected] keepalived]# service keepalived start

檢視虛擬機器IP

ip add

Keepalived啟動後,網路介面上又會創建出VIP192.168.1.120

Keepalived服務管理命令:

停止: service keepalived stop

啟動: service keepalived start

重啟: service keepalived restart

檢視狀態: service keepalived status

其他參考資料:

keepalived之vrrp_script總結:http://my.oschina.net/hncscwc/blog/158746

keepalived雙機熱備實現故障時傳送郵件通知:http://www.2cto.com/os/201407/317795.html

相關推薦

主題分散式架構可用架構_Keepalived+Nginx實現可用Web負載均衡

一、場景需求 二、Keepalived 簡要介紹 Keepalived 是一種高效能的伺服器高可用或熱備解決方案,Keepalived 可以用來防止伺服器單點故障的發生,通過配合 Nginx 可以實現 web 前端服務的高可用。 Keepalived 以 VRRP

分散式架構學習之Keepalived+Nginx實現可用Web負載均衡

一、場景需求 二、Keepalived 簡要介紹 Keepalived 是一種高效能的伺服器高可用或熱備解決方案,Keepalived 可以用來防止伺服器單點故障的發生,通過配合 Nginx 可以實現 web 前端服務的高可用。 Keepalived 以 VRRP

實現基於Haproxy_NAT+Keepalived負載均衡可用架構

haproxy實驗思路:1.做這個實驗首先可以想象一個場景,用戶訪問webserver的時候首先會經過調度器,首先需要明白的一點就是一般公司一般是在內網,客戶端是通過外網訪問webserver的。2.haproxy是一個負載均衡器,Keepalived通過VRRP功能能再結合LVS負載均衡軟件即可部署一個高性

實現基於Haproxy+Keepalived負載均衡可用架構

keepalived+haproxy一:環境準備centos系統服務器4臺,兩臺用於做haproxy主從架構,兩臺作為後端server,服務器配置好yum源,防火墻關閉,關閉selinux,各節點時鐘服務同步,各節點之間可以通過主機名互相通信。二:安裝步驟1.iptables –F &&set

使用docker搭建併發網站架構實踐7--Mysql主從同步+讀寫分離+讀負載均衡

6. Mysql主從同步+讀寫分離+讀負載均衡 目標: 搭建mysql一主兩從同步 搭建從mysql讀負載均衡 結合web工程實現mysql讀寫分離 整體示意圖: 如圖所示: 192.168.238.129:負載均衡伺服器 192.168.238.128:

Keepalived+Nginx實現可用負載均衡集群

連接 靜態 adf -1 rip mail fff hostname dex 一 環境介紹 1.操作系統CentOS Linux release 7.2.1511 (Core) 2.服務keepalived+lvs雙主高可用負載均衡集群及LAMP應用keepalived-1

Keepalived+Nginx實現可用(HA)

nginx+keepalived ha高可用高可用有2中方式。1、Nginx+keepalived 主從配置這種方案,使用一個vip地址,前端使用2臺機器,一臺做主,一臺做備,但同時只有一臺機器工作,另一臺備份機器在主機器不出現故障的時候,永遠處於浪費狀態,對於服務器不多的網站,該方案不經濟實惠。2、Ngin

用haproxy結合keepalived實現基於LNMP的負載均衡可用

lnmp的負載均衡以及高可用今天我們講haproxy結合keepalived實現LNMP的負載均衡和高可用,現在的公司大部分都基於haproxy實現負載均衡。下面以一個事例去給大家詳細講解如何去實現:一、用haproxy結合keepalived實現基於lnmp的負載均衡和高可用服務,要求: (1)實現動

keepalived+nginx實現可用

決定 toc state ipv4 一次 根據 並且 ive lob 方案規劃 vip ip hostname nginx端口 系統 192.168.88.100 182.168.88.1 nginx-01 80 CentOS7.3.1611 192.168.

keepalived+Nginx實現可用集群

auth timeout cati -c stat -h track ast 顯示 keepalived安裝Nginx安裝 配置keepalived#修改配置vim /etc/keepalived/keepalived.conf #配置文件 ! Config

nginx反向代理tomacat+keepalived實現動靜分離、負載均衡可用

時間 超時 error css 權限命令 上傳 轉發 onf ioc 本文的動靜分離主要是通過nginx+tomcat來實現,其中nginx處理圖片、html、JS、CSS等靜態文件,tomcat處理jsp、servlet等動態請求 服務器名稱

lvs + keepalived + nginx 實現可用

1.目的 lvs是四層的負載均衡,keepalived為lvs提供高可用服務,同時檢查後端nginx的健康狀態,nginx主要用來做七層的負載均衡 2.拓撲圖 伺服器 IP地址 說明 Director主節點 192.168.3.105 lvs keepalived Director備節點

keepalived+nginx實現可用+tomcat

pro location add protoc ins ade 要求 網卡 fire 1、keepalived的yum安裝 安裝依賴包[root@localhost ~]# yum install -y curl gcc openssl-devel libnl3-devel

keepalived+nginx實現HA可用web負載均衡

Keepalived 是一種高效能的伺服器高可用或熱備解決方案, Keepalived 可以用來防止伺服器單點故障的發生,通過配合 Nginx 可以實現 web 前端服務的高可用。Keepalived 以 VRRP 協議為實現基礎,用 VRRP 協議來實現高可用性(HA)。 VRRP(Virtual Rout

分散式學習筆記十三分散式事務 TCC-Transaction 原始碼分析 —— TCC 實現

本文主要基於 TCC-Transaction 1.2.3.3 正式版 1. 概述 本文分享 TCC 實現。主要涉及如下三個 Maven 專案: tcc-transaction-core :tcc-transaction 底層實現。 tcc-transaction-ap

keepalived + nginx 實現可用之遠端面籤專案

面籤系統部署文件 1. 準備工作 1.1 前提 運維應確保各個系統網路策略已經開通並驗證通過 運維需提供安裝系統的DVD光碟或映象 雲屋視訊模組由雲屋工程師負責部署安裝 客服系統由客服系統工程師負責部署安裝 面籤系統由面籤系統工程師負責部署安裝 1.2 開始準備工作 //建立使用者

keepalived + nginx 實現可用之遠程面簽項目

使用說明 pat 使用 部署 mount use top service ngx 面簽系統部署文檔 1. 準備工作 1.1 前提 運維應確保各個系統網絡策略已經開通並驗證通過 運維需提供安裝系統的DVD光盤或鏡像 雲屋視頻模塊由雲屋工程師負責部署安裝 客服系統由客服系統工

Web負載均衡可用Nginx+Keepalived

說明: 實驗環境CentOS_6.5-X86_64,由於前端Director上的操作有重複內容,因此下面的操作選擇在管理機上使用ansible以及安裝指令碼統一部署Director上的nginx&&keepalived,後端兩臺RealServe

【LVS+Keepalived】 LVS+Keepalived實現tcp、udp負載均衡及HA可用

LVS 安裝下載編譯安裝 yum install -y kernel-devel gcc gcc-c++ yum install libnl* libpopt* popt-static -y解壓完之後進入解壓目錄執行make && make install編譯

Keepalived+Nginx+Redis+Tomcat實現可用web負載均衡

一、系統環境 作業系統:CentOS 7 tomcat 8.0.47 Nginx 1.12.2 Redis 4.0.2 192.168.124.128 tomcat1+Nginx+Redis 192.168.124.130 tomcat2