Keepalived 설치 사용 설명

21645 단어
간단 한 소개
Keepalived 는 VRRP 프로 토 콜 을 바탕 으로 이 루어 진 서비스 사용 가능 한 방안 으로 IP 단일 고장 을 피 할 수 있 으 며 유사 한 도 구 는 heartbeat, corosync, pacemaker 도 있다.
그러나 이 는 일반적으로 단독으로 나타 나 지 않 고 다른 부하 균형 기술 (예 를 들 어 lvs, haproxy, nginx) 과 함께 작업 하여 클 러 스 터 의 높 은 사용 가능성 을 달성 합 니 다.
Keepalived 는 서버 의 상 태 를 감지 하 는 역할 을 합 니 다. 웹 서버 가 다운 되 거나 작업 이 고장 나 면 Keepalived 가 감지 하고 고장 난 서버 를 시스템 에서 제거 하 며 이 서버 의 작업 대신 다른 서버 를 사용 합 니 다.
서버 가 정상적으로 작 동 한 후 Keepalived 는 자동 으로 서버 그룹 에 서버 를 추가 합 니 다. 이 작업 들 은 모두 자동 으로 완 료 됩 니 다. 인공 적 으로 간섭 할 필요 가 없고 고장 난 서버 만 복구 해 야 합 니 다.
설치 하 다.
#  
wget http://www.keepalived.org/software/keepalived-1.2.23.tar.gz
#  
tar -zxvf keepalived-1.2.23.tar.gz
cd keepalived-1.2.23
#  
./configure --prefix=/usr/local/keepalived   #prefix      
make
make install

 
배치 하 다.
【/usr/local/keepalived/etc/keepalived/keepalived.conf】
global_defs {
    notification_email { #  keepalived        ,      ,       ,    。
        [email protected]
        [email protected]
        [email protected]
    }
    notification_email_from [email protected] #     
    smtp_server 127.0.0.1 #  email smtp  
    smtp_connect_timeout 30 #    
    router_id LVS_DEVEL #  keepalived        ,          ,     
    vrrp_skip_check_adv_addr 
    vrrp_strict
    vrrp_garp_interval 0
    vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER #                   BACKUP  
    interface eth0 #    IP     
    virtual_router_id 51 #VRRP  ,           ,           VRRP 
    priority 100 #       (1-254  ),              
    advert_int 1
    authentication { #
      auth_type PASS
      auth_pass 1111
    }
    virtual_ipaddress { #    IP,           
      192.168.1.21/24
    }
}

【/usr/local/keepalived/etc/sysconfig/keepalived】
KEEPALIVED_OPTIONS="-D -f /usr/local/keepalived/etc/keepalived/keepalived.conf" #  keepalived      

 
기본 경로 (/ usr / local) 가 아 닌 keepalived 를 설치 하기 때문에 keepalived 가 정상적으로 작 동 할 수 있 도록 소프트 링크 를 설정 해 야 합 니 다.
ln -s /usr/local/keepalived/sbin/keepalived  /usr/bin # keepalived          
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/init.d/ #keepalived    ,  /etc/init.d/        service      
ln -s /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/ #keepalived          ,       /etc/sysconfig/,        ,               

 
시동 을 걸다
service keepalived start|stop|restart
chkconfig keepalived on

기본 설정 파일 에 가상 IP 가 지정 되 어 있 습 니 다. 192.168.1.21. ip addr (또는 ip a) 명령 으로 검증 할 수 있 습 니 다.
 
활용 단어 참조
keepalived 두 가지 모드: 주 - 비, 주 - 주
주 - 비
가상 IP: 192.168.1.21        주 노드: 192.168.1.23         예비 노드: 192.168.1.24
주 프로필
【/usr/local/keepalived/etc/keepalived/keepalived.conf】
global_defs {
    notification_email { #  keepalived        ,      ,       ,    。
        [email protected]
        [email protected]
        [email protected]
    }
    notification_email_from [email protected] #     
    smtp_server 127.0.0.1 #  email smtp  
    smtp_connect_timeout 30 #    
    router_id LVS_DEVEL #  keepalived        ,          ,     
    vrrp_skip_check_adv_addr 
    vrrp_strict
    vrrp_garp_interval 0
    vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER #                   BACKUP  
    interface eth0 #    IP     
    virtual_router_id 51 #VRRP  ,           ,           VRRP 
    priority 100 #       (1-254  ),              
    advert_int 1
    authentication { #
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress { #    IP,           
        192.168.1.21/24
    }
}    

 
설정 파일 준비 [/ usr / local / keepalived / etc / keepalived / keepalived. conf]
global_defs {
    notification_email { #  keepalived        ,      ,       ,    。
        [email protected]
        [email protected]
        [email protected]
    }
    notification_email_from [email protected] #     
    smtp_server 127.0.0.1 #  email smtp  
    smtp_connect_timeout 30 #    
    router_id LVS_DEVEL #  keepalived        ,          ,     
    vrrp_skip_check_adv_addr 
    vrrp_strict
    vrrp_garp_interval 0
    vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP #                   BACKUP  
    interface eth0 #    IP     
    virtual_router_id 51 #VRRP  ,           ,           VRRP 
    priority 99 #       (1-254  ),              
    advert_int 1
    authentication { #
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress { #    IP,           
        192.168.1.21/24
    }
}

 
 
주 - 주
가상 IP: 192.168.1.21, 192.168.1.22     A 노드: 192.168.1.23      B 노드: 192.168.1.24
주 된 모델 의 단점 은 항상 한 대의 기계 만 작업 상태 에 있 고 다른 한 대의 기 계 는 영원히 예비 상태 이 며 자원 낭비 문제 가 존재 한 다 는 것 이다.
두 개의 메 인 모드 는 두 대의 기계 가 모두 작업 상태 에 있 고 서로 백업 할 수 있 도록 한다.keepalived 쌍방 모델 을 구축 하 는 요소:
1.       IP,           

2.          IP    ,           IP     。

3.          ,    IP          

, , IP, 。

 
 
노드 A 프로필
【/usr/local/keepalived/etc/keepalived/keepalived.conf】
global_defs {
    notification_email { #  keepalived        ,      ,       ,    。
        [email protected]
        [email protected]
        [email protected]
    }
    notification_email_from [email protected] #     
    smtp_server 127.0.0.1 #  email smtp  
    smtp_connect_timeout 30 #    
    router_id LVS_DEVEL #  keepalived        ,          ,     
    vrrp_skip_check_adv_addr 
    vrrp_strict
    vrrp_garp_interval 0
    vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER 
    interface eth0 
    virtual_router_id 51 #    vrrp_instance        ,              
    priority 100 #             
    advert_int 1
    authentication { 
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress { 
        192.168.1.21/24
    }
}

vrrp_instance VI_2 {
    state BACKUP 
    interface eth0 
    virtual_router_id 52 #    vrrp_instance        ,              
    priority 99 #           
    advert_int 1
    authentication { 
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress { 
        192.168.1.22/24
    }
}

 
노드 B 설정 파일 [/ usr / local / keepalived / etc / keepalived / keepalived. conf]
global_defs {
   notification_email { #  keepalived        ,      ,       ,    。
    [email protected]
    [email protected]
    [email protected]
}
  notification_email_from [email protected] #     
  smtp_server 127.0.0.1 #  email smtp  
  smtp_connect_timeout 30 #    
  router_id LVS_DEVEL #  keepalived        ,          ,     
  vrrp_skip_check_adv_addr 
  vrrp_strict
  vrrp_garp_interval 0
  vrrp_gna_interval 0
}

vrrp_instance VI_1 {
  state BACKUP 
  interface eth0 
  virtual_router_id 51 #    vrrp_instance        ,              
  priority 99 #            
  advert_int 1
  authentication { 
    auth_type PASS
    auth_pass 1111
  }
  virtual_ipaddress { 
    192.168.1.21/24
  }
}

vrrp_instance VI_2 {
  state MASTER 
  interface eth0 
  virtual_router_id 52 #    vrrp_instance        ,              
  priority 100 #              
  advert_int 1
  authentication { 
    auth_type PASS
    auth_pass 1111
  }
  virtual_ipaddress { 
    192.168.1.22/24
  }
}

 
뇌 열 문제
두 노드 는 실제 적 으로 정상 적 인 작업 상태 에 있 지만 서로의 멀티캐스트 통 지 를 받 을 수 없다. 이때 두 노드 는 모두 가상 IP 를 강제로 연결 하여 예측 할 수 없 는 결 과 를 초래 했다.
이 때 중 재 를 설정 해 야 합 니 다. 즉, 각 노드 는 자신의 상태 (응용 서비스 상태 와 자신의 네트워크 상태) 를 판단 해 야 합 니 다. 이 두 가 지 를 실현 하려 면 사용자 정의 셸 스 크 립 트 를 사용 하여 실현 할 수 있 습 니 다. 주기 적 으로 자신의 응용 서비스 상 태 를 검사 하고 계속 ping 게 이 트 웨 이 (또는 신뢰성 있 는 참고 IP) 를 사용 할 수 있 습 니 다.자신의 서비스 가 이상 하거나 게 이 트 웨 이 를 연결 할 수 없 으 면 자신 이 고장 이 났 다 고 생각 되면 가상 IP 를 제거 해 야 합 니 다 (keepalived 서 비 스 를 중단 하면 됩 니 다).
주로 keepalived 가 제공 하 는 vrrp script 및 track script 을 통 해 이 루어 집 니 다.
keepalived 설정 파일 맨 앞 에 다음 코드 를 추가 하여 추적 스 크 립 트 를 정의 합 니 다.
vrrp_script check_local { #       check_local     
  script "/usr/local/keepalived/bin/check_local.sh" #shell     
  interval 5 #    
}

vrrp instance 설정 에 다음 코드 를 추가 하여 위 에서 정의 한 검 측 스 크 립 트 를 사용 합 니 다.
track_script {
  check_local
}

우리 가 / usr / local / keepalived / bin / check local. sh 에서 정의 하 는 검 측 규칙 은:
1. 자체 웹 서비스 고장 (시간 초과, http 반환 상태 200 이 아 님)
2. 게 이 트 웨 이 를 ping 할 수 없습니다
3. 상기 모든 문제 가 발생 하면 이 컴퓨터 의 가상 IP 를 제거 해 야 합 니 다 (keepalived 인 스 턴 스 를 중단 하면 됩 니 다)
그러나 여기 서 작은 문제 가 있 습 니 다. 만약 에 본 기기 나 게 이 트 웨 이 가 가끔 고장 이 나 면 우 리 는 서비스 고장 이 라 고 생각 할 수 없습니다. 더 좋 은 방법 은 N 번 연속 으로 본 기기 의 서비스 가 정상 적 이지 않 거나 N 번 연결 되 어 게 이 트 웨 이 를 연결 하지 못 하면 고장 이 발생 했다 고 생각 하고 고장 이전 이 필요 합 니 다.
그러나 스 크 립 트 가 고장 난 것 을 감지 하고 keepalived 서 비 스 를 중단 하면 고장 이 복구 되면 keepalived 는 자동 으로 복구 할 수 없다 는 단점 이 있다.
 
또한 독립 된 스 크 립 트 를 이용 하여 초 간격 으로 자신의 서비스 와 게 이 트 웨 이 연결 성 을 검사 한 다음 고장 상황 에 따라 keepalived 의 운행 이나 정 지 를 제어 할 수 있 습 니 다.
각 노드 에서 셸 스 크 립 트 실행 (check service. sh)이 컴퓨터 의 서비스 가 정상 인지 확인 합 니 다. 서비스 이상 이 감지 되면 이 컴퓨터 의 keepalived 를 중단 합 니 다. 그러면 가상 IP 는 자동 으로 예비 기기 로 이동 합 니 다. 예 를 들 어 3 초 마다 이 컴퓨터 의 서비스 상 태 를 감지 하고 3 번 의 연결 에 실패 하면 keepalived 인 스 턴 스 를 중단 합 니 다. 또한 이 컴퓨터 서비스 가 정상 이지 만 keepalived 가 시작 되 지 않 았 습 니 다 (고장 복구 후).고장 회복 의 목적 을 달성 하기 위해 keepalived 를 시작 합 니 다.
check service. sh 파일 의 내용
#!/bin/bash

pidfile=/var/lock/subsys/`basename $0`.pid
if [ -f $pidfile ] && [ -e /proc/`cat $pidfile` ] ; then
  exit 1
fi

trap "rm -fr $pidfile ; exit 0" 1 2 3 15
echo $$ > $pidfile

maxfails=3
fails=0
success=0

while [ 1 ]
do
  /usr/bin/wget --timeout=3 --tries=1 http://127.0.0.1/ -q -O /dev/null
  if [ $? -ne 0 ] ; then
    let fails=$[$fails+1]
    success=0
  else
    fails=0
    let success=$[$success+1]
  fi

  if [ $fails -ge $maxfails ] ; then
    fails=0
    success=0

    #check keepalived is running ? try to stop it
    service keepalived status | grep running
    if [ $? -eq 0 ] ; then
      logger -is "local service fails $maxfails times ... try to stop keepalived."
      service keepalived stop 2>&1 | logger
    fi
  fi

  if [ $success -gt $maxfails ] ; then
    #check keepalived is stopped ? try to start it
    service keepalived status | grep stopped
    if [ $? -eq 0 ] ; then
      logger -is "service changes normal, try to start keepalived ."
      service keepalived start
    fi
    success=0
  fi
  sleep 3
done

 
두 노드 에서 모두 이 스 크 립 트 를 실행 해 야 합 니 다. 이 스 크 립 트 를 cron 작업 에 추가 하 십시오.
로 컬 서비스 가 세 번 연속 검색 에 실패 하면 keepalived 서 비 스 를 중단 하려 고 시도 합 니 다 (keepalived 가 실행 중인 경우)
로 컬 서비스 연결 이 세 번 검 측 에 성 공 했 지만 keepalived 가 시작 되 지 않 으 면 시작 합 니 다.
관건 적 인 실행 점 은 모두 시스템 로그 에 기록 되 어 있 습 니 다 (/ var / log / messages). crontab - e 를 실행 하고 다음 과 같은 내용 을 추가 합 니 다.
*/1 * * * * /root/check_service.sh

 
이 컴퓨터 의 keepalived 를 중단 합 니 다. 조금 있 으 면 keepalived 서비스 가 자동 으로 시 작 됩 니 다. (로 컬 서비스 가 정상적으로 감지 되 었 기 때 문 입 니 다)
이 컴퓨터 의 nginx 를 멈 추 면 조금 있 으 면 keepalived 서비스 도 정지 되 었 습 니 다.
nginx 를 다시 시작 합 니 다. 잠시 후 keepalived 도 정상적으로 작 동 되 고 정확 한 가상 IP 가 연결 되 어 있 습 니 다.
 
참고 자료:
http://zhangxugg-163-com.iteye.com/blog/1665419
 
다음으로 전송:https://www.cnblogs.com/MacoLee/p/5853356.html

좋은 웹페이지 즐겨찾기