Keepalived 고가 용 서비스 구축

Keepalived 고가 용 서비스 구축
탭 (공백 구분): linux 서비스
글 목록
  • Keepalived 고가 용 서비스 구축
  • 1 keepalived 고가 용 소프트웨어
  • 1.1 소개
  • 1.2 3 대 기능
  • 1.3 Keepalived 고가 용 고장 전환 전이 원리
  • 1.4 VRRP 가상 경로 중복 프로 토 콜
  • 2 Keepalived 고가 용 서비스 구축
  • 2.1 CentOS 6 * 설치
  • 2.2 더 블 인 스 턴 스 더 블 메 인 모드
  • 2.3 Keepalived 고가 용 서버 의 '열 뇌' 문제
  • 3 keepalived 관련 문제 의 일부 방안
  • 3.1 nginx 서비스 지연 방지, VIP 이동 문제 발생 하지 않 음
  • 3.2 여러 그룹의 Keepalived 서버 가 한 랜 에서 의 충돌 문 제 를 해결 합 니 다
  • 3.3 '갈 라 진 뇌' 문 제 를 감지 하 는 스 크 립 트 개발
  • 4 CentOS 7.5 keepalived 배치
  • 4.1 소스 패키지 다운로드
  • 4.2 설치 배치
  • 4.3 프로필
  • 1 keepalived 고가 용 소프트웨어
    소개
    Keepalived 소프트웨어 는 처음에 LVS 부하 균형 소프트웨어 를 위해 설계 되 었 고 LVS 클 러 스 터 시스템 의 각 서비스 노드 의 상 태 를 관리 하고 감시 하 는 데 사용 되 었 으 나 나중에 사용 가능 한 VRRP 기능 을 추가 했다.따라서 Keepalived 는 LVS 소프트웨어 를 관리 할 수 있 을 뿐만 아니 라 다른 서비스 (예 를 들 어 Nginx, Haproxy, MySQL 등) 로 도 사용 가능 한 솔 루 션 소프트웨어 가 될 수 있다.
    1.2 3 대 기능
  • LVS 부하 균형 소프트웨어 관리
  • LVS 클 러 스 터 노드 건강 검진 기능 실현
  • 시스템 네트워크 서비스 로 서 의 고가 용 기능
  • 1.3 Keepalived 고가 용 고장 전환 전이 원리
  • Keepalived 고가 용 서비스 간 고장 전환 전 이 는 VRRP (Virtual Router Redundancy - Protocol, 가상 공유 기 중복 프로 토 콜) 를 통 해 이 루어 집 니 다.
  • Keepalived 서비스 가 정상적으로 작 동 할 때 메 인 Master 노드 는 끊임없이 예비 노드 에 (멀티캐스트 방식) 심장 박동 메 시 지 를 보 내 고 Backup 노드 가 스스로 생존 하 는 것 을 알려 준다. 메 인 노드 가 고장 이 나 서 심장 박동 메 시 지 를 보 내지 못 할 때 예비 노드 가 메 인 노드 의 '심장 박동' 을 감지 하지 못 해서 인수 프로그램 을 호출 하여 메 인 Master 노드 의 IP 자원 과 서 비 스 를 인수 한다.한편, 메 인 마스터 노드 가 회복 되면 백업 노드 가 메 인 노드 가 고장 났 을 때 자신 이 관리 하 는 IP 자원 과 서 비 스 를 방출 하여 원래 의 예비 역할 로 복원 합 니 다.

  • 1.4 VRRP 가상 경로 중복 프로 토 콜
  • VRRP 의 등장 은 정적 경로 의 단일 고장 문 제 를 해결 하기 위해 서 이다. VRRP 는 일종 의 선거 체 제 를 통 해 경로 의 임 무 를 특정한 VRRP 공유 기 에 맡 긴 것 이다.
  • VRRP 공유 기 클 러 스 터 에는 물리 적 VRRP 공유 기 가 여러 대 있다.그 중 하 나 는 Master 가 일 하고 다른 하 나 는 Backup 이다.Master 는 가상 공유 기의 IP 주 소 를 가지 고 있 으 며 게 이 트 웨 이 주소 로 보 내 는 가방 과 ARP 요청 에 응답 하 는 역할 을 합 니 다.
  • VRRP 는 선거 메커니즘 을 통 해 가상 공유 기의 기능 을 구현 하고 모든 합의 메 시 지 는 IP 멀티캐스트 (Multicast) 패키지 ( 224.0.0.18) 형식 으로 발송 된다.가상 공유 기 는 VRID (범위 0 - 225) 와 IP 주소 로 구성 되 어 있 으 며, 대외 적 으로 는 잘 알려 진 MAC 주소 로 표 현 됩 니 다: 00 - 00 - 5E - 00 - 01 - {VRID}.그래서 하나의 가상 공유 기 에서 누가 Master 든 대외 적 으로 똑 같은 MAC 과 IP (VIP 라 고 함) 이다.클 라 이언 트 호스트 는 Master 의 변화 로 인해 자신의 경로 설정 을 수정 할 필요 가 없습니다.
  • 가상 공유 기 한 세트 에서 마스터 인 VRRP 공유 기만 VRRP 라디오 패 키 지 를 계속 보 내 는데 이때 Backup 이 마스터 를 선점 하지 않 는 다.Master 를 사용 할 수 없 을 때 Backup 은 Master 에서 온 라디오 가방 을 받 을 수 없습니다. 이때 여러 대의 Backup 에서 우선 순위 가 가장 높 은 공유 기 는 Master 로 선점 합 니 다.이러한 선점 은 서비스의 연속 성 을 확보 하기 위해 매우 빠르다.VRRP 패 킷 은 안전성 을 고려 해 암호 화 프로 토 콜 을 사용 해 암호 화 했다.

  • 2 Keepalived 고가 용 서비스 구축
    2.1 CentOS 6 * 설치
    두 대의 부하 균형 서버 에 한 대 를 위주 로 하고 한 대 를 준비 합 니 다.
  • keepalived 는 yum 설치 방식, 소스 코드 컴 파일 설치 방식 이 있 습 니 다. 여 기 는 yum 으로 설치 되 어 있 습 니 다. 메 인 서버 의 경우 (가상 컴퓨터 설정 이 라면 이 두 서버 에 새 네트워크 카드 를 추가 하여 keepalived 메 인 사이 의 심장 박동 정보 전송 에 사용 해 야 합 니 다)
  • yum 설치 및 검사 버 전 yum - y install keepalived rpm - qa keepalived
  • keepalived 시작 및 검사 / etc / init. d / keepalived start ps - ef | grep keep | grep - v grep
  • 세 개의 keepalived 프로 세 스 가 올 바른 ip add | grep 192.168 을 설치 하 는 것 을 알려 줍 니 다. 기본 적 인 상황 에서 세 개의 VIP 주 소 를 엽 니 다. 설정 파일 과 관련 이 있 습 니 다. 검사 가 끝 난 후에 서 비 스 를 닫 고 사용자 정의 설정
  • 을 합 니 다.
  • keepalived 프로필 의 높 은 사용 가능 한 부분 설명 (주 MASTER)
  • vim / etc / keepalived / keepalived. conf 를 입력 하 십시오. 그 내용 은:
    ! Configuration File for keepalived
    global_defs {               #    
        notification_email {
        [email protected]       #         RS           
        }
        notification_email_from [email protected]
        smtp_server 127.0.0.1        #        IP
        smtp_connect_timeout 30
        router_id lb01               #id lb01,     Keepalived    (    )
        }
        
    vrrp_instance VI_1 {            #     VI_1,              
        state MASTER                #   MASTER,    BACKUP
        interface eth1              #  /     eth1,       
        virtual_router_id 55        #  ID 55,       
        priority 150                #    150,              
        advert_int 1                #        1 
        authentication {            #PASS    ,       
            auth_type PASS              
            auth_pass 1111              
        }
        virtual_ipaddress {
        192.168.88.120/24 dev eth0 label eth0:1 
        }
    }
        #VIP 192.168.88.120,     24 ,         ,     eth0,   eth0:1,              ,      VIP,       ,
    

    Keepalived 설정 매개 변수 | MASTER 노드 특수 매개 변수 | BACKUP 노드 특수 매개 변수 – | | routerid (유일한 표식) | routerid lb01|router_id lb 02 state (캐릭터 상태) | state MASTER | state BACKUP priority (경선 우선 순위) | priority 150 | priority 100
  • 메 인 설정 이 완 료 된 후 서 비 스 를 시작 합 니 다. 메 인 서버 의 keepalived 서 비 스 를 닫 고 VIP 이동 이 정상적으로 명령 을 사용 하 는 지 테스트 하여 eth 0: 1 의 상태 ip a | grep 192.168.8.120
  • 2.2 더 블 인 스 턴 스 더 블 메 인 모드
  • 주 설정 파일 에 vrrp 모듈 을 하나 더 추가 하면 됩 니 다. 설정 만 잘 하면 됩 니 다. 수정 해 야 할 매개 변 수 는 state (상태) 가 있 습 니 다. 첫 번 째 인 스 턴 스 와 반대로 priority (우선 순위): 두 번 째 VIP 가 어느 기계 에서 virtual 을 시작 할 지 결정 합 니 다.router_id: 인 스 턴 스 마다 다 르 지만 인 스 턴 스 의 주종 은 일치 해 야 합 니 다
  • 2.3 Keepalived 고가 용 서버 의 "두뇌 분열" 문제
  • 어떤 이유 로 인해 두 대의 고가 용 서버 가 지 정 된 시간 내 에 상대방 의 심장 박동 정 보 를 감지 하지 못 하고 각자 자원 과 서비스의 소유권 을 얻 게 되 었 다 고 설명 했다. 이때 두 대의 고가 용 서버 가 모두 살아 있 고 정상적으로 운행 되면 같은 IP 나 서비스 가 양쪽 에서 동시에 존재 하여 충돌 이 발생 할 수 있다.가장 심각 한 것 은 두 호스트 가 같은 VIP 주 소 를 차지 하 는 것 이다. 사용자 가 데 이 터 를 쓸 때 각각 양 끝 에 기록 할 수 있다. 이 는 서버 양쪽 의 데이터 가 일치 하지 않 거나 데이터 손실 을 초래 할 수 있다. 이런 상황 을 열 뇌 라 고 부른다.
  • 원인 심장 박동 선 고장, 네트워크 카드 관련 고장, 방화벽 이 심장 박동 정 보 를 막 고 파일 문 제 를 설정 하 는 것 은 인 스 턴 스 가상 경로 파라미터 와 다르다 는 등
  • 해결 방법 은 여러 개의 심장 박동 선, 불필요 한 방식 이다.스 크 립 트 고장 검출;방화벽 설정
  • 3 keepalived 관련 문제 의 방안
    3.1 nginx 서비스 지연 방지, VIP 이동 문제 발생 하지 않 음
  • 메 인 서버 에서 스 크 립 트 모니터링 nginx 서비스 cat /etc/keepalived/nginx_check.sh 의 내용 은 다음 과 같다.
  • #!/bin/sh
        
    while true
    do
        if [ `netstat -antup | grep nginx | wc -l` -ne 1 ];then
            /etc/init.d/keepalived stop
        fi
        sleep 5
    done
    
    sh nginx_check.sh & 백 스테이지 에서 스 크 립 트 를 실행 합 니 다. 메 인 서버 에 부하 균형 이 실 효 될 때 VIP 를 주동 적 으로 방출 합 니 다.
  • 또는 스 크 립 트 는 아래 와 같이 쓰 여 있 습 니 다. 더 편리 합 니 다. keepalived 참조 cat /etc/keepalived/nginx_check.sh 에 의 해 실행 권한 chmod +x /etc/keepalived/nginx_check.sh
  • 만 사용 합 니 다.
    #!/bin/bash
        
    pidof nginx
    if [ $? -ne 0 ];then
        /etc/init.d/keepalived stop
    fi 
    

    2. 서버 에 서 는 keepalived 자 체 를 이용 하여 스 크 립 트 주 체 를 이전 스 크 립 트 로 사용 하지만 while 순환 을 제거 해 야 합 니 다. 이 스 크 립 트 이름 은 keepalived 설정 파일 에 vrrp 검 측 모듈 (vrrp 인 스 턴 스 모듈 전에) 을 추가 합 니 다.
    #  vrrp  ,  nginx  
    vrrp_script chk_nginx {       
        script "/etc/keepalived/nginx_check.sh"
        interval 2          #  2 
        weight -20
    
    vrrp , :
    vrrp_instance VI_1 {
        ......
        track_script {
            chk_nginx
        }
    }
    

    Nginx 가 정지 되면 Keepalived 서 비 스 는 2 초 안에 자동 으로 정지 되 고 VIP 가 방출 되 며 예비 서버 가 인수 하여 nginx 서비스 가 지연 되 더 라 도 IP 이동 을 실현 합 니 다.
    3.2 여러 그룹의 Keepalived 서버 가 한 랜 에서 의 충돌 문 제 를 해결 합 니 다.
    같은 랜 내부 에 여러 개의 Keepalived 서버 가 설치 되 어 있 고 전문 적 인 심장 박동 선 통신 을 사용 하지 않 았 을 때 높 은 연결 이 가능 한 심각 한 고장 문제 가 발생 할 수 있 습 니 다.앞서 설명 한 바 와 같이 Keepalived 고가 용 기능 은 VRRP 프로 토 콜 을 통 해 이 루어 집 니 다. VRRP 프로 토 콜 은 기본적으로 IP 멀티캐스트 형식 을 통 해 고가 용 대 간 의 통신 을 실현 합 니 다. 만약 에 같은 랜 에 여러 개의 Keepalived 서버 가 존재 하면 IP 멀티캐스트 주소 충돌 문제 가 발생 하여 연결 이 어 지 럽 습 니 다.각 그룹의 Keepalived 는 기본 224.0.18 을 멀티캐스트 주소 로 사용 합 니 다.이 때 해결 방법 은 같은 그룹의 Keepalived 서버 의 모든 프로필 에 유일한 멀티캐스트 주 소 를 지정 하 는 것 입 니 다. 설정 은 다음 과 같 습 니 다.
    global_defs {
        router_id LVS_19
        vrrp_mcast_group4 224.0.0.19        #             
    }
    
  • 알림: 1 인 스 턴 스 별 통신 인증 비밀번호 도 다 르 게 연결 이 정상 적 인 지 를 확보 하 는 것 이 좋 습 니 다.2) 또 다른 고가 용 소프트웨어 인 Heartbeat 는 멀티캐스트 방식 으로 메 인 통신 을 실현 하면 멀티캐스트 주소 충돌 문제 가 발생 할 수 있다.

  • 3.3 '갈 라 진 뇌' 문 제 를 검사 하 는 스 크 립 트 개발
  • 사고방식:
  • 준비 노드 에서 스 크 립 트 를 실행 하고 ip a | grep VIP 방식 으로 걸 러 내 며 VIP 가 존재 하면 다음 단계
  • 를 실행 합 니 다.
  • ping 심장 박동 으로 연 결 된 IP, 통 하지 않 으 면 다음 단계 실행
  • ping master_IP, 다음 단계 실행
  • telent master_IP 80 은 메 인 서버 nginx 서비스 가 정상 적 인 것 을 대표 하고 keepalived 서비스 가 정상 적 인지 확인 해 야 합 니 다. 정상 적 이면 '뇌 가 갈 라 지고 정상 적 이지 않 으 면 메 인 서 비 스 를 수 동 으로 복원 해 야 하 는 keepalived 서비스
  • 이 스 크 립 트 는 완전 하지 않 습 니 다.
    #!/bin/bash
    
    lb01_vip=192.168.0.240
    lb01_ip=192.168.0.221
    
    while true
    do
        ping -c 2 -W 3 $lb01_ip &>/dev/null
    if [ $? -eq 0 -a `ip a | grep "$lb01_vip" | wc -l` -eq 1 ];then
            echo "ha is split brain.warning."
        else
            echo "ha is OK"
        fi
        sleep 5
    done
    

    4 CentOS 7.5 배포 keepalived
    4.1 소스 패키지 다운로드
    cd ~ wget http://www.keepalived.org/software/keepalived-1.4.5.tar.gz
    4.2 설치 배치
    yum install -y gcc openssl-devel popt-devel
    tar xf keepalived-1.4.5.tar.gz -C /usr/src/
    cd /usr/src/keepalived-1.4.5/
    ./configure --prefix=/usr/local/keepalived
    make && make install
    
    #          
    cp /usr/src/keepalived-1.4.5/keepalived/etc/init.d/keepalived /etc/init.d/
    mkdir /etc/keepalived
    cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
    cp /usr/src/keepalived-1.4.5/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
    cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
    
    #           ,         ,     nginx      
    /etc/init.d/keepalived start
    systemctl enable keepalived
    

    4.3 프로필
    ! Configuration File for keepalived
    
    global_defs {
        notification_email {
            [email protected]
        }
        notification_email_from [email protected]
        smtp_server 127.0.0.1
        smtp_connect_timeout 30
        router_id lb01
    }
    
    #  nginx    
    vrrp_script chk_nginx {
        script "/etc/keepalived/nginx_check.sh"
        interval 2
        weight -20
    }
    
    vrrp_instance VI_1 {
        state MASTER
        interface ens34
        virtual_router_id 51
        priority 150
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        #  nginx  
        track_script {
            chk_nginx
        }
        virtual_ipaddress {
            192.168.200.120/24 dev ens32 label ens32:1
        }
    }
    

    좋은 웹페이지 즐겨찾기