ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 서버 이중화(4) - DB서버로 핫사이트 실습해보기 / Keepalived / Virtual IP
    환경 구축 2024. 5. 16. 10:20

    이전 포스팅 '서버 이중화(4)'에서 핫사이트를 구성하기 전에 데이터 동기화를 위해 Master-Slave 를 양방향으로 구성했다.

    이제 이렇게 준비된 DB 서버를 이용해 핫사이트 솔루션을 실습해볼 것이다.

     

    핫사이트 방식

     

    미러사이트처럼 핫사이트도 로드밸런서가 필요하다. 로드밸런서로는 keepalived을 사용해볼 것이다.

    💡 keepalived?
    Keepalived는 고가용성(High Availability, HA)을 제공하기 위한 오픈 소스 소프트웨어이다. 주로 네트워크 서비스의 가용성을 높이기 위해 사용되며, 특히 Virtual Router Redundancy Protocol (VRRP)을 이용하여 고가용성 및 로드 밸런싱 기능을 구현한다.
    💡 고가용성(HA)란?
    고가용성은 서버, 네트워크, 프로그램 등의 정보 시스템이 상당히 오랜 기간 동안 지속적으로 정상 운영이 가능한 성질을 말한다.
    고가용성이란 "가용성이 높다"는 뜻으로서, "절대 고장 나지 않음"을 의미한다.
    쉽게 말해 그동안 "서버 이중화" 포스팅에서 했던 실습처럼 클라이언트에게 끊김 없이 서버의 서비스를 제공할 수 있는 것이다. 
    💡 VRRP ?
    : 가상 라우터 다중화 프로토콜, 가상 라우터 장애 복구 프로토콜
    사전적 의미로는 라우터 다중화 프로토콜이라고 되어있지만, 게이트웨이 이중화 프로토콜(FHRP : First Hop Redundancy Protocol) 중 하나로 게이트웨이 장애 복구를 위한 프로토콜이다. 게이트웨이 이중화 프로토콜에는 VRRP, HSRP, GLBP와 같은 프로토콜이 있으며, VRRP와 HSRP는 동작방식이 거의 유사하다.
    일단은 로드밸런싱을해주는 프로토콜이다! 정도로만 알아두고, 게이트웨이 이중화 프로토콜이 무엇인지는 다른 포스팅에서 다뤄볼 것이다.

     

    keepalived 의 동작 원리를 간단히 설명하자면, 가상 아이피주소를 만들어서 active 상태의 서버와 연결이 된다.

    keepalived 동작 과정

     

    실습 - 핫사이트 구성하기

    1. DB 서버 두 대에 모두 keepalived 설치하기

    yum install -y keepalived

     

    2. 초기에 Active가 될 서버 설정

    Master를 초기 Active 서버로 설정해볼 것이다.

    vi /etc/keepalived/keepalived.conf
    
    # 14번 라인 주석처리 -> strict
    # 18번 라인 밑으로 전부 삭제  
    # :.,$d -> 현재 줄 밑으로 전체 삭제하는 명령어
    # :set nu 라인 번호 표시하는 명령어
    
    
    vrrp_script chk_mysql {                  #vrrp 프로토콜 
            script "pidof mysqld"
            interval 2                       # every 2 seconds
            weight 2
    }
    
    vrrp_instance VI_1 {                     #db 두개에 대한 세팅
            interface ens160
            state MASTER
            virtual_router_id 123		     # Standby랑 맞춰줘야 하는 값
            unicast_src_ip 192.168.100.20    # Active IP
            unicast_peer {
                    192.168.100.30           # Standby IP
            }
    
            priority 102			               # Standby보다 Active가 높아야 하는 값
    
            track_script {
                 chk_mysql
            }
    
            virtual_ipaddress {
                    192.168.100.100/24 dev ens160   
                                 #virtual ip -> 클라이언트 서버가 찾을 ip 주소
                                 #ens160 
            }
    }

     

    3. keepalived 재시작

    파일을 수정하면, 그 파일을 포함하는 프로그램을 재실행 해야 파일 변경 내용이 적용이 된다는점 주의하자.

    systemctl restart keepalived

     

    4. Standby 서버 설정

    vi /etc/keepalived/keepalived.conf
    
    # 14번 라인 주석처리 -> strict
    # 18번 라인 밑으로 전부 삭제  
    # :.,$d -> 현재 줄 밑으로 전체 삭제하는 명령어
    # :set nu 라인 번호 표시하는 명령어
    
    
    vrrp_script chk_mysql {                
            script "pidof mysqld"
            interval 2                    
            weight 2
    }
    
    vrrp_instance VI_1 {                  
            interface ens160
            state MASTER
            virtual_router_id 123	         # Active 와 같은 값	  
            unicast_src_ip 192.168.100.20    # Standby IP
            unicast_peer {
                    192.168.100.30           # Active IP
            }
    
            priority 101			         # Standby보다 Active가 높아야 하는 값
    
            track_script {
                 chk_mysql
            }
    
            virtual_ipaddress {
                    192.168.100.100/24 dev ens160 # 가상 아이피 주소 
            }
    }

    5. keepalived 재시작

    systemctl restart keepalived

     

    6. keepalived 연결 확인하기

    show variables LIKE '%server_id%'

     

    virtual ip 서버에서 SQL에서 해당 명령어를 입력하면 현재 연결된 서버 id 가나온다. (이 server_id는 Master-Slave 설정에서 설정한 내용이다.)

    처음엔 초기 Active인 Master의 id가 나올 것이다. Master 서버의 keepalived를 꺼본 후 (systemctl stop keepalived) 다시 입력하면 server_id 가 바뀌어 있을 것이다. 

Designed by Tistory.