1. 程式人生 > 實用技巧 >基於RHEL6(64bit)LEMP+FastCGI+Xcache構建WEB開發平臺

基於RHEL6(64bit)LEMP+FastCGI+Xcache構建WEB開發平臺

備註:

2013年5月29,初稿(基於LEMP+FastCGI+Xcache構建web開發平臺),如有增加會做詳細說明

2013年6月02,基於LEMP平臺新增nginx提供負載均衡、健康狀況監測功能


第一部分:《Nginx相關知識介紹,其內容參見搜尋引擎及筆者理解》

第二部分:《LEMP+FastCGI+Xcache編譯安裝案例》


第一部分:

Nginx功能介紹:

    Nginx是一個高效能的HTTP和反向代理伺服器,本身是由一個核心和一系列的模組組成, 核心主要用於提供Web Service的基本功能,以及Web和
Mail反向代理的功能;還用於啟用網路協議,建立必要的執行時環境以及確保不同的模組之間平滑地進行互動。
    Nginx大多跟協議相關的功能和某應用特有的功能都是由nginx的模組實現的。這些功能模組大致可以分為事件模組、階段性處理器、輸出過濾器、
變數處理器、協議、upstream和負載均衡幾個類別,這些共同組成了nginx的http功能。事件模組主要用於提供OS獨立的(不同作業系統的事件機制有所不同)
事件通知機制如kqueue或epoll等。協議模組則負責實現nginx通過http、tls/ssl、smtp、pop3以及imap與對應的客戶端建立會話。

Nginx的優勢:

作為web伺服器:Nginx處理靜態檔案、索引檔案、自動索引的效率非常高
作為代理伺服器:Nginx可以實現無快取的反向代理加速,提高網站執行速度
作為負載均衡:Nginx即可在內部直接支援Rails和PHP,也可以支援HTTP代理伺服器對外進行服務。
效能:Nginx是專門為效能優化所開發,最重要的是效率,它採用poll模型,可以支援更多的併發連線
穩定性:Nginx採用了分階段資源分配技術,使得CPU與記憶體的佔用率非常低
高可用:Nginx支援熱部署,啟動速度特別迅速,因此可以再不間斷服務的情況下,對版本進行升級。

Nginx模組與工作:

Nginx是又核心和模組組成,模組通常分為三大模組:
核心模組、基礎模組、第三方模組
核心模組:HTTP模組、EVENT模組、MAIL模組等
基礎模組:HTTP Access模組、HTTP FastCGI模組、HTTP Proxy模組、HTTP Rewrite模組等
第三方模組:HTTP Upstream Request Hash模組、Notice模組、HTTP Access Key模組等
Nginx的模組從功能上分為三類:
Handlers(處理器模組):處理使用者請求,並進行輸出內容和修改headers資訊等操作。
Filters(過濾器模組):對處理器輸出的內容進行過濾,然後交給nginx,由Nginx響應請求。
Proxies(代理類模組):主要與後端的服務進行互動,實現服務的代理和負載均衡等相關功能。
Nginx工作方式,預設工作在單工作程序模式下
單工作程序:除主程序外的一個程序,工作程序是單執行緒的
多工作程序:每個工作程序都包含更多的執行緒。

Nginx配置檔案主要分為四個部分:

main(全域性設定)、server(主機設定)、upstream(負載均衡伺服器設定)、location(URL匹配特定位置的設定)
main部分設定的指令將影響其他所有設定;
server部分的指令主要用於指定主機和埠;
upstream指令主要用於負載均衡,設定一系列的後端伺服器;
location部分用於匹配網頁位置;

Nginx安裝環境及模組的依賴性

準備開發環境"Development Tools" "Server Platform Deveopment"
gzip模組需要->zlib 庫
rewrite模組需要->pcre 庫
ssl功能需要->openssl庫

Nginx目前可分為三個版本:開發版、穩定版、歷史穩定版

開發板:開發版更新較快,包含新功能及修復Bug,同時可能會產生新的Bug。
穩定版:穩定版更新較慢,各種功能健全,可用於生產環境。
歷史版:歷史版是穩定版的彙總,不包含開發版的新功能。


案例構建

090411273.png


第一步:準備開發環境、編譯安裝pcre(支援HTTP Rewrite功能)及解決編譯安裝Nginx所依賴的軟體包

# yum groupinstall "Development Tools" "Server Platform Deveopment" -y
# yum install openssl-devel pcre-devel
# tar xf pcre-8.10.tar.gz
# cd pcre-8.10
# ./configure
# make && make install

142232753.png

第二步:原始碼編譯安裝Nginx

首先新增使用者nginx,實現以之執行nginx服務程序:

# groupadd -r nginx
# useradd -r -g nginx nginx

◆ 修改Nginx相關屬性資訊及編譯安裝Nginx

# ./configure \
  --prefix=/usr \
  --sbin-path=/usr/sbin/nginx \
  --conf-path=/etc/nginx/nginx.conf \
  --error-log-path=/var/log/nginx/error.log \
  --http-log-path=/var/log/nginx/access.log \
  --pid-path=/var/run/nginx/nginx.pid  \
  --lock-path=/var/lock/nginx.lock \
  --user=nginx \
  --group=nginx \
  --with-http_ssl_module \
  --with-http_flv_module \
  --with-http_stub_status_module \
  --with-http_gzip_static_module \
  --http-client-body-temp-path=/var/tmp/nginx/client/ \
  --http-proxy-temp-path=/var/tmp/nginx/proxy/ \
  --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
  --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
  --http-scgi-temp-path=/var/tmp/nginx/scgi \
  --with-pcre
# make && make install

142747989.png

第三步:為Nginx提供編寫SysV 指令碼

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:     /var/run/nginx.pid
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
# Source function library.
. /etc/rc.d/init.d/functions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
# Source networking configuration.
. /etc/sysconfig/network
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
nginx="/usr/sbin/nginx"
prog=$(basename $nginx)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
lockfile=/var/lock/subsys/nginx
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
make_dirs() {
   # make required directories
   user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
   options=`$nginx -V 2>&1 | grep 'configure arguments:'`
   for opt in $options; do
       if [ `echo $opt | grep '.*-temp-path'` ]; then
           value=`echo $opt | cut -d "=" -f 2`
           if [ ! -d "$value" ]; then
               # echo "creating" $value
               mkdir -p $value && chown -R $user $value
           fi
       fi
   done
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    make_dirs
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
restart() {
    configtest || return $?
    stop
    sleep 1
    start
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
force_reload() {
    restart
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
rh_status() {
    status $prog
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
rh_status_q() {
    rh_status >/dev/null 2>&1
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac

為此指令碼賦予執行許可權、並新增至服務列表中,然後執行此指令碼

# chmod +x /etc/rc.d/init.d/nginx
# chkconfig --add nginx
# chkconfig nginx on
# service nginx restart
# netstat -tpln

144054792.png

測試Nginx是否提供WEB服務(test:Windows:192.168.0.39)

144716602.png

第四步:安裝MySQL(這裡採用通用二進位制安裝MySQL作為演示)

◆ 建立邏輯卷用於存放MySQL安裝目錄

# fdisk /dev/sda   [/dev/sda5(type:8e)]
# reboot
# pvcreate /dev/sda5
# vgcreate myvg /dev/sda5
# lvcreate -L 1G -n mydata myvg
# lvscan   ##檢視邏輯卷相關資訊
# mkfs.ext4 /dev/myvg/mydata

151825209.png

◆ 建立目錄用於掛載邏輯卷,用於存放mysql資料目錄並建立mysql組和mysql使用者,主要用於啟動、停止mysqld程序

# mkdir /mydata
# vim /etc/fstab     ##開機自動掛載
/dev/myvg/mydata    /mydata    ext4    default 0 0
# mount -a    ##重新讀取/etc/fstab檔案,並重新掛載
# mkdir /mydata/data
# groupadd  -g 3306 mysql
# adduser -g 3306 -u 3306 -s /sbin/nologin mysql
# chown -R mysql.mysql /mydata/data

◆ 下載mysql通用二進位制,並解壓,修改屬主和陣列,並完成初始化工作

# tar xf mysql-5.6.10-linux-glibc2.5-x86_64.tar.gz  -C /usr/local/
# cd /usr/local
# ln -sv mysql-5.6.10-linux-glibc2.5-x86_64 mysql
# cd mysql
# chown -R root.mysql ./*
# scripts/mysql_install_db --user=mysql --datadir=/mydata/data/

◆ 將mysql本地變數改為環境變數

手動建立配置檔案/etc/profile.d/mysql.sh,新增如下內容:
export PATH=$PATH:/usr/local/mysql/bin
# . /etc/profile.d/mysql.sh    ##重讀配置檔案,使之生效

◆ 為mysql提供配置檔案及SysV指令碼

# pwd
/usr/local/mysql
# vim /etc/my.cnf    ##新增如下內容
datadir = /mydata/data    ##資料目錄
innodb_file_per_table = ON
# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
# service mysqld restart
# netstat -tupln | grep 3306

164547757.png

◆ 匯出標頭檔案及庫檔案,主要用於二次編譯開發所使用

匯出標頭檔案
# ln -sv /usr/local/include /usr/include/mysql
匯出庫檔案,編輯配置檔案:
# vim /etc/ld.so.conf.d/mysql.conf新增如下內容
/usr/local/mysql/bin
# ldconfig -v  ##重新載入庫檔案
匯出man文件,編輯配置檔案:
# vim /etc/man.config 新增如下內容
MANPATH /usr/local/mysql/man

◆ 連線mysql伺服器,測試下:

164807580.png

第五步:原始碼編輯安裝PHP,實現FastCGI

◆ 安裝環境:可以到附件中下載安裝

如果想讓編譯的php支援mcrypt、mhash擴充套件和libevent,需要安裝以下軟體包
libmcrypt-2.5.8-9.el6.x86_64.rpm
libmcrypt-devel-2.5.8-9.el6.x86_64.rpm
mcrypt-2.6.8-3.el6.x86_64.rpm
mhash-0.9.9.9-3.el6.x86_64.rpm
mhash-devel-0.9.9.9-3.el6.x86_64.rpm

◆ 編譯安裝php

# tar xf php-5.4.13.tar.bz2
# cd php-5.4.13
#  ./configure --prefix=/usr/local/php \
--with-mysql=/usr/local/mysql --with-openssl --enable-fpm \
--enable-sockets --enable-sysvshm  --with-mysqli=/usr/local/mysql/bin/mysql_config \
--enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib-dir \
--with-libxml-dir=/usr --enable-xml  --with-mhash --with-mcrypt  --with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d --with-bz2 --with-curl

180400125.png

注:由於平臺環境不一樣,可能在修改屬性的時候,報各種各樣的錯誤,大家可以根據錯誤資訊進行排查,一般都可以解決。

筆者在安裝的時候提示需要依賴這些軟體包:libxml2-devel、zlib-devel、bzip2-devel、xml2-config、python-magic

◆ 下一步,編譯及編譯安裝

# make && make install

201621578.png

◆ 為php提供主配置檔案

# cp php.ini-production /etc/php.ini

◆ 為php-fpm提供Sysv init指令碼,並將其新增至服務列表:

# pwd
/root/php-5.4.13
# cp sapi/fpm/init.d.php-fpm  /etc/rc.d/init.d/php-fpm
# chmod +x /etc/rc.d/init.d/php-fpm
# chkconfig --add php-fpm
# chkconfig php-fpm on

為php-fpm提供配置檔案:

# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

編輯php-fpm的配置檔案,配置fpm的相關選項為你所需要的值,並啟用pid檔案:

pm.max_children = 150
pm.start_servers = 8
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pid = /usr/local/php/var/run/php-fpm.pid

啟動php-fpm程序,並使用如下命令來驗正(如果此命令輸出有中幾個php-fpm程序就說明啟動成功了):

# service php-fpm restart
# ps aux | grep php-fpm

203253587.png

編輯/etc/nginx/nginx.conf,整合nginx和php,並啟用如下選項:

# vim /etc/nginx/nginx.conf     ##啟用如下選項:
location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi_params;
        }

◆ 編輯/etc/nginx/fastcgi_params,將其內容更改為如下內容:

編輯/etc/nginx/fastcgi_params,將其內容更改為如下內容:
fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

◆ 並在所支援的主頁面格式中新增php格式的主頁:

location / {
            root   /web/htdocs;
            index  index.php index.html index.htm;
        }

◆ 當配置檔案發生變化時,需重新載入nginx的配置檔案

# service nginx reload

◆ 建立php測試頁面:

# mkdir /web/htdocs -pv
# cat > /web/htdocs/index.php << EOF
<h1>PHP Test Page</h1>
<?php
phpinfo();
?>

◆ 通過window瀏覽器測試,看Nginx是否支援php頁面:

205325579.png


第六步:PHP與MySQL結合,測試MySQL是否提供服務(提供測試頁面)

設定MySQL的登入root密碼及建立測試頁面:

# mysqladmin -u root -h localhost password 'mysql' -p   ##設定MySQL的root使用者密碼
編輯/web/htdocs/index.php,修改如下內容:
<h1>PHP Test Page</h1>
<?php
        $conn=mysql_connect('localhost','root','mysql');
                if ($conn)
                        echo "<h2> Mysql Working....</h2>";
                else
                        echo "<h2> Mysql not Working...</h2>";
phpinfo();
?>

◆ 當前mysql程序處於執行狀態,測試:

[[email protected] ~]# service mysqld status
MySQL running (17494)                                      [  OK  ]
[[email protected] ~]#

230105536.png


◆ 當前mysql程序處於停止狀態,測試:

[[email protected] mysql]# /etc/init.d/mysqld stop
Shutting down MySQL..                                      [  OK  ]

230848289.png

注:以上測試,說明MySQL正常執行,而且屬於工作狀態!!!


第七步:、安裝Xcache,為php加速:

◆ 編譯安裝Xcache

# tar xf  xcache-3.0.1.tar.bz2
# cd xcache-3.0.1
# /usr/local/php/bin/phpize
# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
# make && make install

223816101.png

◆ 編輯php.ini,整合php和xcache

首先將xcache提供的樣例配置匯入php.ini
# mkdir /etc/php.d
# cp xcache.ini /etc/php.d

編輯/etc/php.d/xcache.ini,找到extension開頭的行,修改為如下行:

extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/xcache.so

◆ 重新啟動php-fpm程序

# service php-fpm restart
# chkconfig php-fpm on

◆ 測試

001520626.png




一:新增upstream模組提供後端伺服器負載均衡及健康狀況監測:


環境:新增兩臺基於apache提供的web服務,基於安全因素、效能考慮,通過nginx反向代理upstream模組實現負載均衡及SSL功能:

◆ 兩臺web程式伺服器IP地址分配情況:

webserver1
    172.16.88.10/16
webserver2
    172.16.88.11/16


◆ 安裝http軟體包提供測試頁面

注:前提兩臺web應用程式伺服器提供ssh互信及並將主機名與IP地址對應關係,新增到/etc/hosts檔案中,否則在啟動httpd程序會有警告資訊。

webserver1
# yum install httpd -y
# echo "webserver1.example.com" > /var/www/html/index.html
# service httpd restart && chkconfig httpd on
# ssh webserver2 'yum install httpd -y "
# ssh webserver2 "echo "webserver2.example.com" > /var/www/html/index.html"
# ssh webserver2 'service httpd restart && chkconfig httpd on'

◆ 修改nginx主配置檔案,新增upstream模組來提供後端web應用程式負載均衡

# vim /etc/nginx/nginx.conf
upstream services  {
  server 172.16.88.10 weight=1 max_fails=2 fail_timeout=2;
  server 172.16.88.11 weight=1 max_fails=2 fail_timeout=2;
                                                                                                                                                                                                                                                                                   
}
                                                                                                                                                                                                                                                                                  
server {
  location / {
    proxy_pass  http://services/;        
  }
}
# nginx -t && service nginx reload          ##檢查語法並重新載入配置檔案


相關知識點補充:

HTTP Upstream模組中,可以通過server指令來指定後端伺服器的IP地址和埠,同時還可以設定每個後端伺服器在負載均衡排程中的狀態。
    down:表示當前的server暫時不參與負載均衡
    backup:預留的備份機器。當其他所有的非backup機器出現故障或者繁忙時,才會請求backup機器,因此backup機器的壓力最輕。
    max_fails:允許請求失敗的最大次數,預設為1.當超過最大次數時,則返回proxy_next_upstream模組定義的錯誤。
    fail_timeout:當max_fails失敗後,所暫停伺服器的時間。max_fails可以和fail_timeout一起使用。

◆ 測試(Windows-192.168.0.212):

在瀏覽器上輸入:http://172.16.88.88/,nginx代理伺服器會將請求發往後端web伺服器組中的某臺應用伺服器,由後端的某臺應用伺服器給予響應。
因為兩臺web服務在同一個組中,而且權值一樣,所以會平均提供web服務。當其中一臺web服務發生故障,另一臺正常提供web服務,不影響使用者請求。當web服務從
故障狀態轉換為正常狀態時,nginx會自動新增到組裡面,並提供服務。

112418757.png

◆ 模擬其中一臺web程式伺服器宕機,然後在進行測試,我們會發現只有一臺應用伺服器提供web伺服器

webserver1->172.16.88.10
# service httpd stop

113203768.png

◆ 如果兩臺web應用程式伺服器都發生宕機,那該如何提供web響應頁面呢:

那麼只要新增一臺備用伺服器,接收使用者請求並響應web錯誤頁面給使用者(這裡使用nginx代理伺服器本身作為backup伺服器)

# vim /etc/nginx/nginx.conf  新增如下內容
server 127.0.0.1:8080 weight=1 backup;
# nginx -t && service nginx reload

115036348.png

◆ 在niginx代理伺服器上提供web伺服器,並提供錯誤頁面資訊

# mkdir /web/erro
# echo "Erro Page Please Try Later" > /web/erro/index.html

120101960.png

◆ 模擬天台web應用程式伺服器宕機並測試

webserver1# service httpd stop
          # ssh webserver2 'service httpd stop'

120936594.png

轉載於:https://blog.51cto.com/guodayong/1212566