Keepalived + Tengine 고가 용 집단 실현

21283 단어
개술
최근 몇 년 동안 Nginx 가 국내 에서 발전 하 는 추세 에 따라 점점 더 많은 인터넷 회사 들 이 Nginx 를 사용한다.Nginx 의 고성능, 안정성 등 으로 많은 IT 자 들 이 선 호 하 는 WEB 역방향 프 록 시 서버 가 되 었 다.그러나 Nginx 는 강력 한 프 록 시 기능 을 가지 고 있 지만 Nginx 서버 한 대 만 문제 가 발생 하지 않 을 수 있 습 니 다. 이 로 인해 단일 고장 문제 가 발생 했 습 니 다. 마침 Keepalived 를 사용 하여 단일 고장 문 제 를 해결 할 수 있 습 니 다. Keepalived 고장 의 전이 시간 이 비교적 짧 고 설정 이 간단 하고 사용 하기 쉬 운 것 도 Keepalived 를 선택 하여 사용 할 수 있 는 주요 원인 입 니 다.만약 에 일 PV 수치 가 큰 중 소기 업 이 아니라면 이런 방안 을 고려 해 볼 수 있다.
Tengine
텐 진 은 타 오 바 오 에서 시 작 된 웹 서버 프로젝트 입 니 다.이 는 Nginx 를 바탕 으로 큰 방문 사이트 의 수요 에 따라 고급 기능 과 특성 을 많이 추가 했다.텐 진의 성능 과 안정성 은 이미 대형 사이트 인 타 오 바 오, 티몰 등에 서 좋 은 검 사 를 받 았 다.그의 최종 목 표 는 효율 적 이 고 안정 적 이 며 안전 하 며 사용 하기 쉬 운 웹 플랫폼 을 만 드 는 것 이다.
Tengine 특성:
1. Nginx - 1.2.9 의 모든 특성 을 계승 하고 Nginx 의 설정 을 100% 호 환 합 니 다.
2. 동적 모듈 로 딩 (DSO) 지원.모듈 을 추가 하면 Tengine 전 체 를 다시 컴 파일 할 필요 가 없습니다.
3. 더욱 강력 한 부하 균형 능력, 일치 성 hash 모듈, 세 션 유지 모듈 을 포함 하고 백 엔 드 서버 에 대해 주동 적 이 고 건강 한 검 사 를 할 수 있 습 니 다. 4. 서버 상태 에 따라 자동 으로 오프라인 으로 올 라 갈 수 있 습 니 다.
5. 입력 필터 메커니즘 지원.이러한 메커니즘 을 사용 하여 웹 응용 방화벽 의 작성 이 더욱 편리 하 다.
6. 여러 개의 CSS, JavaScript 파일 을 조합 하 는 접근 요청 이 하나의 요청 으로 변 합 니 다.
7. CPU 수 에 따라 프로 세 스 개수 와 바 인 딩 CPU 친연 성 을 자동 으로 설정 합 니 다.
8. 시스템 의 부하 와 자원 점용 을 감시 하고 시스템 을 보호 한다.
9 、 더욱 강력 한 방어 * * (접근 속도 제한) 모듈
10. 동적 스 크 립 트 언어 Lua 지원.확장 기능 이 매우 효율 적 이 고 간단 하 다.
......
1. Nginx + Keepalived 는 두 가지 높 은 설정 방법 이 있 습 니 다.
1, Nginx + Keepalived 메 인 모드
하나의 가상 IP 주 소 를 사용 하면 됩 니 다. 전단 에 두 대의 Nginx 서버 가 예약 을 할 수 있 습 니 다. 그 중에서 한 대 는 주요 노드 이 고 다른 한 대 는 예비 노드 가 있 습 니 다. 두 대의 서버 는 한 대 만 서 비 스 를 제공 하고 다른 한 대 는 유 휴 상태 에 있 습 니 다. 메 인 노드 서버 가 고장 이 났 을 때 예비 노드 서버 만 메 인 노드 서버 의 모든 서비스 와 가상 IP 를 연결 하고 서 비 스 를 계속 제공 할 수 있 습 니 다.이 모든 것 은 클 라 이언 트 에 게 투명 하 다.
2, Nginx + Keepalived 메 인 모드
이 모델 은 두 개의 가상 IP 주 소 를 사용 해 야 합 니 다. 전단 에 두 대의 Nginx 서버 가 스케줄 링 을 하고 두 대의 서버 가 서로 위주 로 준비 하 며 동시에 작업 을 해 야 합 니 다. 만약 에 한 대의 서버 가 고장 이 났 을 때 모든 요 구 를 다른 서버 에 전송 합 니 다. 이렇게 하 는 것 은 경제적 이지 않 고 두 대의 서버 가 동시에 서 비 스 를 제공 합 니 다.메 인 모드 에 비해 서버 한 대의 압력 을 분담 할 뿐만 아니 라 병발 량 도 높 였 다.
2. Keepalived + Nginx 가 어떻게 사용 가능 한 지 를 하나의 사례 로 설정 합 니 다.
환경 소개:
시스템 버 전: CentOS 6x86_64
Tengine 버 전: Tengine - 1.5.1
Keepalived 버 전: keepalived - 1.2.7 - 3. el6
1. Nginx 1 과 Nginx 2 서버 에 Tengine 설치
###### Nginx1  
[root@nginx1 ~]# useradd -r nginx
[root@nginx1 ~]# tar xf tengine-1.5.1.tar.gz
[root@nginx1 ~]# cd tengine-1.5.1
######  Tengine      
[root@nginx1 ~]# yum -y install pcre-devel openssl-devel libxml2-devel libxslt-devel gd-devel lua-devel GeoIP-devel gcc gcc-c++
[root@nginx1 ~]# ./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/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 \
--enable-mods-shared=all
[root@nginx1 tengine-1.5.1]# make && make install
###### Nginx2  
[root@nginx2 ~]# scp 172.16.14.1:/root/tengine-1.5.1.tar.gz ./
[root@nginx2 tengine-1.5.1]# yum -y install pcre-devel openssl-devel libxml2-devel libxslt-devel gd-devel lua-devel GeoIP-devel gcc gcc-c++
[root@nginx2 tengine-1.5.1]# ./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/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 \
--enable-mods-shared=all
[root@nginx2 tengine-1.5.1]# make && make install

2. Nginx 1 과 Nginx 2 서버 에서 Tengine 을 위 한 Sysv 서비스 스 크 립 트 준비
######Nginx1    
[root@nginx1 ~]# vim /etc/init.d/nginx
#!/bin/sh
# nginx - this script starts and stops the nginx daemon
# chkconfig:   - 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
# 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/local/nginx/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
###### Nginx          
[root@nginx1 ~]# chmod +x /etc/init.d/nginx
[root@nginx1 ~]# chkconfig --add nginx
[root@nginx1 ~]# service nginx start
###### Nginx1     Nignx2           
[root@nginx2 ~]# scp 172.16.14.1:/etc/init.d/nginx /etc/init.d/
[root@nginx2 ~]# chmod +x /etc/init.d/nginx
[root@nginx2 ~]# chkconfig --add nginx
[root@nginx2 ~]# service nginx start

3. 방문 테스트 Nginx 서비스 정상 여부
3.1, Nginx 1 서버 에서 테스트
[root@nginx1 ~]# netstat -anpt|grep nginx
tcp        0      0 0.0.0.0:80      0.0.0.0:*       LISTEN      15088/nginx

3.2, Nginx 2 서버 에서 테스트
[root@nginx2 ~]# netstat -anpt|grep nginx
tcp      0      0 0.0.0.0:80   0.0.0.0:*     LISTEN 7281/nginx

3. Httpd 1 과 Httpd 2 서버 에 Apache 설치
1. Httpd 1 서버 에 YUM 소스 를 설정 하고 YUM 으로 HTTPD 서 비 스 를 설치 합 니 다.
[root@httpd1 ~]# yum -y install httpd
[root@httpd1 ~]# chkconfig httpd on
[root@httpd1 ~]# service httpd start
###### Httpd1     
[root@httpd1 ~]# echo '

172.16.14.3 httpd1

' > /var/www/html/index.html

2. Httpd 2 서버 에 YUM 소스 를 설정 하고 YUM 으로 HTTPD 서 비 스 를 설치 합 니 다.
[root@httpd2 ~]# yum -y install httpd
[root@httpd2 ~]# chkconfig httpd on
[root@httpd2 ~]# service httpd start
[root@httpd2 ~]# echo '

172.16.14.4 httpd2

' > /var/www/html/index.html

4. Tengine 설정
1. 메 인 프로필 을 백업 한 다음 에 메 인 프로필 을 수정 합 니 다.
[root@nginx1 ~]# cd /etc/nginx/
[root@nginx1 nginx]# cp nginx.conf nginx.conf.bak
[root@nginx1 nginx]# vim nginx.conf
user  nginx nginx;
worker_processes  2;
worker_rlimit_nofile 51200;
#error_log  logs/error.log;
#pid        logs/nginx.pid;
events {
    use epoll;
    worker_connections  51200;
}
# load modules compiled as Dynamic Shared Object (DSO)
dso {        #        
    load ngx_http_upstream_session_sticky_module.so;  #  session  
}
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;
    client_max_body_size 20m;
    client_header_buffer_size 16k;
    large_client_header_buffers 4 16k;
    sendfile        on;
    tcp_nopush     on;
    keepalive_timeout  65;
    gzip  on;             #    
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_proxied   any;
    gzip_http_version 1.1;
    gzip_comp_level 3;
    gzip_types text/plain application/x-javascript text/css application/xml;
    gzip_vary on;
    proxy_temp_path   /tmp/proxy_temp;
    proxy_cache_path  /tmp/proxy_cache levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=3g;
    proxy_connect_timeout    50;
    proxy_read_timeout       600;
    proxy_send_timeout       600;
    proxy_buffer_size        128k;
    proxy_buffers           16 256k;
    proxy_busy_buffers_size 512k;
    proxy_temp_file_write_size 1024m;
    proxy_next_upstream error timeout invalid_header http_500 http_503 http_404 http_502 http_504;
    upstream allen {
        server 172.16.14.3;
        server 172.16.14.4;
    check interval=3000 rise=2 fall=5 timeout=1000 type=http; #  Server      
        check_http_send "GET / HTTP/1.0\r
\r
"; check_http_expect_alive http_2xx http_3xx; session_sticky; # } server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_pass http://allen; } location /status { # check_status; } #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; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #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; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # HTTPS server # #server { # listen 443; # server_name localhost; # ssl on; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_timeout 5m; # ssl_protocols SSLv2 SSLv3 TLSv1; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} } :Nginx

2. Tengine 서비스 액세스 테스트 부하 균형 재 개
[root@nginx1 ~]# service nginx restart

위의 그림 에서 보 듯 이 백 엔 드 에 성공 적 으로 접근 할 수 있 는 Httpd 서 비 스 는 다음 테스트 상태 모니터링 모듈 에 접근 합 니 다.
3. Nginx 2 서버 에 Tengine 메 인 프로필 설정
######  Nginx1          Nginx2   
[root@nginx2 ~]# scp 172.16.14.1:/etc/nginx/nginx.conf /etc/nginx/
[root@nginx2 ~]# service nginx restart
  :  Tengine     ;     Nginx1   ,         

5. Keepalived 설치 및 설정
1. Nginx 1 과 Nginx 2 서버 에 Keepalived 설치
###### Nginx1     
[root@nginx1 ~]# yum -y install keepalived
###### Nginx2     
[root@nginx2 ~]# yum -y install keepalived

2. Keepalived 더 블 메 인 모드 설정
2.1, Nginx 1 서버 의 Keepalived 메 인 프로필 정의 수정
[root@nginx1 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {   
    root@localhost                #       ,        
   }
   notification_email_from [email protected] #     
   smtp_server 127.0.0.1              #  smtp     
   smtp_connect_timeout 30            #  smtp      
   router_id LVS_DEVEL                #  Keepalived      ,   ;               
}
vrrp_script chk_nginx {                  #        
    script "/etc/keepalived/chk_nginx.sh"#     
    interval 1                           #    
    weight 2                    
}
vrrp_script chk_proess {        
    script "/etc/keepalived/chk_proess.sh"
    interval 1
    weight 2
}
vrrp_instance nginx_1 {
    state MASTER                #  {MASTER|BACKUP}
    interface eth0              #HA     
    virtual_router_id 56        #    ID;    ID     
    priority 100                #  ,BACKUP    MASTER
    advert_int 1                #      
    garp_master_delay 1
    authentication {
        auth_type PASS          #    
        auth_pass 1234          #    ,         
    }
    virtual_ipaddress {         #    IP  ,     
    172.16.14.10
    }
    track_script {              #      
        chk_nginx               #   vrrp_script    
    chk_proess
    }
    notify_master "/etc/keepalived/chk_nginx.sh master" #     Master        
    notify_backup "/etc/keepalived/chk_nginx.sh backup" #     Backup        
    notify_fault "/etc/keepalived/chk_nginx.sh fault"   #     Fault        
}
vrrp_instance nginx_2 {
    state BACKUP
    interface eth0
    virtual_router_id 58
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 4321
    }
    virtual_ipaddress {
    172.16.14.11
    }
    track_script {
        chk_nginx
    }
}

2.2, Nginx 2 서버 의 Keepalived 메 인 프로필 정의 수정
[root@nginx2 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
    root@localhost
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_nginx {
    script "/etc/keepalived/chk_nginx.sh"
    interval 1
    weight 2
}
vrrp_script chk_nginx {
    script "/etc/keepalived/chk_proess.sh"
    interval 1
    weight 2
}
vrrp_instance nginx_1 {
    state BACKUP
    interface eth0
    virtual_router_id 56
    priority 98
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1234
    }
    virtual_ipaddress {
    172.16.14.10
    }
    track_script {
        chk_nginx
    }
}
vrrp_instance nginx_2 {
    state MASTER
    interface eth0
    virtual_router_id 58
    priority 92
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 4321
    }
    virtual_ipaddress {
    172.16.14.11
    }
    track_script {
        chk_nginx
    chk_proess
    }
    notify_master "/etc/keepalived/chk_nginx.sh master"
    notify_backup "/etc/keepalived/chk_nginx.sh backup"
    notify_fault "/etc/keepalived/chk_nginx.sh fault"
}

3. Nginx 1 과 Nginx 2 서버 에서 각각 Keepalived 에 상태 감지 스 크 립 트 와 알림 스 크 립 트 를 제공 합 니 다.
######    
vim /etc/keepalived/chk_nginx.sh
#!/bin/bash
# Author: ALLEN
# description: An example of notify script
#
vip=172.16.14.10
contact='root@localhost'
notify() {
    mailsubject="`hostname` to be $1: $vip floating"
    mailbody="`date '+%F %H:%M:%S'`: vrrp transition, `hostname` changed to be $1"
    echo $mailbody | mail -s "$mailsubject" $contact
}
case "$1" in
    master)
        notify master
        /etc/init.d/keepalived start
        exit 0
    ;;
    backup)
        notify backup
        /etc/init.d/keepalived stop
        exit 0
    ;;
    fault)
        notify fault
        exit 0
    ;;
    *)
        echo 'Usage: `basename $0` {master|backup|fault}'
        exit 1
    ;;
esac
######      
vim /etc/keepalived/chk_proess.sh
#!/bin/bash
killall -0 nginx
if [[ $? -ne 0 ]];then
  /etc/init.d/keepalived stop
fi
######      
chkmod +x /etc/keepalived/chk_*

6. 테스트 Keepalived + Tengine 고가 용
1. Nginx 1 과 Nginx 2 서버 의 Keepalived 와 Tengine 서 비 스 를 각각 재 시작 합 니 다.
[root@nginx1 ~]# service keepalived restart;service nginx restart
[root@nginx2 ~]# service keepalived restart;service nginx restart

2. Nginx 1 과 Nginx 2 서버 의 IP 주 소 를 각각 봅 니 다.
######  Nginx1   
[root@nginx1 ~]# ip addr show eth0
2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:2c:1a:24 brd ff:ff:ff:ff:ff:ff
    inet 172.16.14.1/16 brd 172.16.255.255 scope global eth0
    inet 172.16.14.10/32 scope global eth0
    inet6 fe80::20c:29ff:fe2c:1a24/64 scope link
       valid_lft forever preferred_lft forever
######  Nginx2   
[root@nginx2 ~]# ip addr show eth0
2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ec:f6:3f brd ff:ff:ff:ff:ff:ff
    inet 172.16.14.2/16 brd 172.16.255.255 scope global eth0
    inet 172.16.14.11/32 scope global eth0
    inet6 fe80::20c:29ff:feec:f63f/64 scope link
       valid_lft forever preferred_lft forever
  :    ,         IP  

3. 방문 테스트 172.16.14.10
4. 아 날로 그 중 한 대의 전단 Nginx 서버 가 고장 이 나 서 정상적으로 서 비 스 를 제공 하지 못 합 니 다.
[root@nginx1 ~]# killall nginx
[root@nginx1 ~]# ip addr show eth0
2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:2c:1a:24 brd ff:ff:ff:ff:ff:ff
    inet 172.16.14.1/16 brd 172.16.255.255 scope global eth0
    inet6 fe80::20c:29ff:fe2c:1a24/64 scope link
       valid_lft forever preferred_lft forever
######    ,  IP     
========================================================================
###### Nginx2      IP  
[root@nginx2 ~]# ip addr show eth0
2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ec:f6:3f brd ff:ff:ff:ff:ff:ff
    inet 172.16.14.2/16 brd 172.16.255.255 scope global eth0
    inet 172.16.14.11/32 scope global eth0
    inet 172.16.14.10/32 scope global eth0
    inet6 fe80::20c:29ff:feec:f63f/64 scope link
       valid_lft forever preferred_lft forever
  :    ,  IP       

5 、 Nginx 2 서버 에서 메 일 알림 보기
[root@nginx2 ~]# mail
Heirloom Mail version 12.4 7/29/08.  Type ? for help.
"/var/spool/mail/root": 3 messages 2 unread
>U  1 root                  Wed Sep 25 16:54  19/712   "nginx2.allen.com to be master: 172.16.14.10 floating"
 U  2 root                  Wed Sep 25 17:23  19/712   "nginx2.allen.com to be master: 172.16.14.10 floating"
    3 root                  Wed Sep 25 18:06  19/713   "nginx2.allen.com to be master: 172.16.14.10 floating"
& 3
Message  3:
From [email protected]  Wed Sep 25 18:06:27 2013
Return-Path: 
X-Original-To: root@localhost
Delivered-To: [email protected]
Date: Wed, 25 Sep 2013 18:06:27 +0800
To: [email protected]
Subject: nginx2.allen.com to be master: 172.16.14.10 floating
User-Agent: Heirloom mailx 12.4 7/29/08
Content-Type: text/plain; charset=us-ascii
From: [email protected] (root)
Status: RO
2013-09-25 18:06:27: vrrp transition, nginx2.allen.com changed to be master
& quit  #  
  :      Nginx2       Master,  Nginx1      Backup;       Nginx1    ,          

6. 재 방문 172.16.14.10 테스트
위의 그림 에서 볼 수 있 듯 이 여전히 정상적으로 방문 할 수 있다.Keepalived + Tengine 고가 용 가능
7. 여 기 는 다른 가상 IP (172.16.14.11) 를 테스트 하지 않 고 테스트 방법 은 (172.16.14.10) 과 같다.실제 환경 에서 DNS 서버 에서 두 개의 가상 IP 주 소 를 A 로 기록 하면 두 개의 전단 Nginx 스케줄 의 부하 균형 을 실현 할 수 있다.여기 서 두 개의 인 스 턴 스 를 설정 할 때 모두 eth 0 네트워크 카드 를 사용 하지만 실제 환경 에서 서로 다른 네트워크 카드 를 사용 하 는 것 이 좋 습 니 다.내용 이 많 기 때문에 다음은 Corosync + DRBD + Mysql 의 실현 을 쓰 지 않 습 니 다. 만약 에 여러분 이 관심 이 있 으 면 앞에서 쓴 블 로 그 를 보 세 요.
http://502245466.blog.51cto.com/7559397/1299082
다음으로 전송:https://blog.51cto.com/502245466/1301772

좋은 웹페이지 즐겨찾기