티스토리 뷰

IDC에 웹 CMS용 서버 1대 운용중이었는데
어느날 D state process 장애로 6시간동안 정상적 서비스를 하지 못하였고
이후를 장애를 대비하기 위해 서버 이중화 구성을 검토하게 됨.

제일 좋은 구성은 앞단에 로드밸런서를 놓고
Global 세션 서버도 추가하고
CMS 서버를 하나 더 추가하는것이겠으나
이렇게 하려면 총 3대의 서버가 필요.

허나, 가용 가능한 서버는 1 대 뿐.

구글링을 통하여 총 2대에서 가능한 failover 스택 찾음.

  • Heartbeat
  • Pacemaker + corosync (위 Heartbeat 의 다음세대 스택)
  • Keepalived

Heartbeat 는 legacy 한 스택이라 패스하고
pacemaker 는 복잡복잡열매가 열려서 패스하니
keepalived 만이 남음.

Vagrant 를 통해 구성을 해보고
failover 테스팅 결과
구성 난이도가 높지 않고 잘 동작.

이하부터 기존 서버는 node1
추가 서버는 node2 로 지칭.


node1 에 가상 IP 교체 추가

  1. eth0 랜카드에 부여했던 IP 주소는 가상 네트워크 인터페이스 eth0:0 의 IP 주소로 셋팅
  2. eth0 랜카드에는 새 IP 주소 할당
  3. cp /etc/sysconfig/network-scripts/eth0 /etc/sysconfig/network-scripts/eth0:0
  4. vi  /etc/sysconfig/network-scripts/eth0:0
  5. DEVICE=eth0:0
     TYPE=Ethernet
     ONBOOT=yes
     IPV6INIT=no
     NM_CONTROLLED=no
     BOOTPROTO=none
     IPADDR=172.30.0.23
     PREFIX=24
     GATEWAY=172.30.0.1
  6. vi 저장하고 닫기
  7. 네트워크 서비스 재시작
    systemctl restart network
  8. ip 셋팅 확인
    ifconfig -a

패킷 포워딩 설정

모든 노드에 아래 설정

  1. vi /etc/sysctl.conf
  2. net.ipv4.ip_forward = 1
  3. sysctl -p

keepalived 설치

모든 노드에 아래 구성
  1. yum install -y keepalived
  2. systemctl enable keepalived
  3. systemctl start keepalived

keepalived 설정 - node1
  1. mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.old
  2. vi /etc/keepalived/keepalived.conf
  3. 아래 참고하여 자신의 환경에 맞게 설정
    ! Configuration File for keepalived
     
    global_defs {
      notification_email {
        network-admins@domain.com
        system-admins@domain.com
      }
      notification_email_from web_node1@domain.com
      smtp_server localhost
      smtp_connect_timeout 30
      router_id WEB_CLUSTER1
    }
    
    vrrp_instance VI_1 {
      state MASTER
      interface eth0
      virtual_router_id 51
      priority 100
      advert_int 1
      authentication {
        auth_type PASS
        auth_pass 1111
      }
      virtual_ipaddress {
        172.16.0.23
      }
    }
  4. 서비스 재로딩
    systemctl reload keepalived
  5. 서비스 가동 확인
    tailf /var/log/messages


keepalived 설정 - node2
  1. mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.old
  2. vi /etc/keepalived/keepalived.conf
  3. 아래 참고하여 자신의 환경에 맞게 설정
    ! Configuration File for keepalived
     
    global_defs {
      notification_email {
        network-admins@domain.com
        system-admins@domain.com
      }
      notification_email_from web_node1@domain.com
      smtp_server localhost
      smtp_connect_timeout 30
      router_id WEB_CLUSTER1
    }
    
    vrrp_instance VI_1 {
      state MASTER
      interface eth0
      virtual_router_id 51
      priority 99
      advert_int 1
      authentication {
        auth_type PASS
        auth_pass 1111
      }
      virtual_ipaddress {
        172.16.0.23
      }
    }
  4. 서비스 재로딩
    systemctl reload keepalived
  5. 서비스 가동 확인
    tailf /var/log/messages

FailOver 테스팅

  • 가상 IP 에 핑 테스팅
    ping 172.16.0.23
  • 본인은 Vagrant (가상OS) 로 node1, 2 를 구성했기에 아래와 같은 명령으로 머신을 켜고 끄며 테스팅해봄
    1. vagrant suspend node1
    2. vagrant up node1

참고


댓글