Keepalived를 활용하여 간단하게 HA 구성해보기

NAVER Cloud
10 min readApr 25, 2019

--

오늘은 네이버클라우드플랫폼의 VM 2대에 Keepalived를 설치하여
간단하게 HA를 구성하는 방안에 대해 소개해 드리고자 합니다.

Keepalived란?

Keepalived는 가상 IP를 기반으로 작동하며, 마스터 노드를 모니터링하다 해당 노드에 장애가 발생했을 시, 스탠바이 서버로 페일오버되도록 지원합니다. 구성은 아래와 같습니다.

네이버클라우드플랫폼에 node 1, node 2라는 서버 2대를 생성하고, node 1 서버를 MASTER 서버 node 2서버를 BACKUP 서버로 설정했습니다. 두 서버는 서로 간의 헬스 체크를 수행하다가 MASTER 서버에 문제가 생겼을 시에 BACKUP 서버가 VIP를 take-over 하면서 지속적으로 서비스가 운영될 수 있도록 구성됩니다.

네이버클라우드플랫폼에서는 eth0에 IP alias를 사용할 경우, IP Spoofing으로 인식하고 해당 VM의 네트워크 통신을 끊어버리기 때문에, 위와 같은 구성을 하기 위해선 일단 네이버클라우드플랫폼 VM에 추가 인터페이스 할당 후, VIP를 생성해야 합니다. Keepalived를 통한 HA 구성을 하기 전에 아래 사전 작업에 대해 안내드리도록 하겠습니다.

[필요한 사전 작업]

1. Private subnet 생성

2. node 1, node 2 서버에 추가 인터페이스 할당

3. node 1, node 2 서버에 VIP 할당

1. Private subnet 생성

네이버클라우드플랫폼의 Private subnet은 존 당 1개를 생성할 수 있으며, 저는 node 1, node 2 서버가 속한 KR-2존에 192.168.200.0/24 대역의 Private subnet을 생성했습니다.

2. node 1, node 2에 추가 인터페이스 할당

이제 node1 서버와 node 2 서버에 추가 인터페이스를 할당해 보겠습니다.

ü node 1 / MASTER : 192.168.200.100

ü node 2 / BACKUP : 192.168.200.101

네이버클라우드플랫폼 VM에 추가 인터페이스를 할당하기 위해선 콘솔 상에서 네트워크 인터페이스를 할당한 후, 직접 VM에 접속하여 추가 인터페이스를 활성화하는 작업이 수반되어야 합니다.

네이버클라우드플랫폼 콘솔로 접속하여 Server 메뉴 하단의 Network interface 메뉴로 이동하여 아래와 같이 node 1, node 2에 추가 인터페이스를 할당해주었습니다.

다음으로 node 1, node 2 서버에 접속하여 추가 인터페이스를 활성화하는 작업을 진행하겠습니다.

vi /etc/network/interfaces에서 아래와 같이 추가 인터페이스를 활성화합니다.

root@node1:~# vi /etc/network/interfaces

# The secondary network interface — node 1

auto eth1

iface eth1 inet static

address 192.168.200.100

netmask 255.255.255.0

root@node1:~# ifup eth1

root@node2:~# vi /etc/network/interfaces

# The secondary network interface — node 2

auto eth1

iface eth1 inet static

address 192.168.200.101

netmask 255.255.255.0

root@node2:~# ifup eth1

3. node 1, node 2에 VIP 할당

node 1, node 2에 VIP를 할당하겠습니다. VIP는 192.168.200.102로 각각 node 1, node2에 eth1:0으로 추가해주었습니다.

root@node1:~# ifconfig eth1:0 192.168.200.102 netmask 255.255.255.0

root@node2:~# ifconfig eth1:0 192.168.200.102 netmask 255.255.255.0

이렇게 3가지 작업을 통해 keepalived를 활용한 HA 구성을 위한 사전 준비는 마무리되었습니다.

이제 본격적으로 Keepalived를 설치하고, 설정 파일 수정을 통해 node 1과 node 2에 대한 HA 구성을 해보도록 하겠습니다. 아래와 같이 Keepalived를 node1, node2에 설치해줍니다.

root@node1:~# apt-get update

root@node1:~# apt-get install keepalived

설치를 마친 후, Keepalived의 설정 파일을 수정합니다.

1) MASTER 서버(node 1)

root@node1:~# vi /etc/keepalived/keepalived.conf

keepalived.conf

vrrp_instance VI_1 {

state MASTER

interface eth1

virtual_router_id 51

priority 200

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.200.102

}

}

2) BACKUP 서버(node 2)

root@node2:~# vi /etc/keepalived/keepalived.conf

keepalived.conf

vrrp_instance VI_1 {

state BACKUP

interface eth1

virtual_router_id 51

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.200.102

MASTER 서버의 Priority는 200으로 설정하고 BACKUP 서버의 Priority는 100으로 주었습니다. (Priority 값이 높은 쪽이 MASTER 서버가 됩니다.) auth_pass 및 virtual_router 값은 MASTER 서버와 BACKUP 서버 모두 동일해야 합니다. 해당 값은 default 값으로 그대로 두시면 됩니다. auth_pass는 간단하게 ‘1111’로 주었습니다. 해당 auth_pass 값도 MASTER 서버와 BACKUP 서버가 동일하게 설정해주셔야 합니다. virtual_ipaddress에는 VIP를 입력합니다.

위와 같이 설정을 한 후에, Keepalived 서비스를 node1, node2에 실행합니다.

root@node1:~# systemctl start keepalived

root@node1:~# systemctl enable keepalived

이제 keepalived를 사용하기 위한 준비는 끝이 났습니다. 실제로 keepalived가 잘 실행되는지 확인을 해보도록 하겠습니다. node 1, node 2와 같은 Private subnet 안에 있는 test-server 1대를 만들어놓고, VIP(192.168.200.102)로 PING 테스트를 하는 도중에, node 1(MASTER)을 shut down 해보도록 하겠습니다.

Test-server에서 VIP로 Ping test 진행

root@test-server:~# ping 192.168.200/102

64 bytes from 192.168.200.102: icmp_seq=23 ttl=64 time=0.236 ms

64 bytes from 192.168.200.102: icmp_seq=24 ttl=64 time=0.251 ms

64 bytes from 192.168.200.102: icmp_seq=25 ttl=64 time=0.233 ms

64 bytes from 192.168.200.102: icmp_seq=26 ttl=64 time=0.228 ms

64 bytes from 192.168.200.102: icmp_seq=28 ttl=64 time=1.08 ms <<< MASTER에서 BACKUP서버로 fail-over

64 bytes from 192.168.200.102: icmp_seq=29 ttl=64 time=0.317 ms

64 bytes from 192.168.200.102: icmp_seq=30 ttl=64 time=0.237 ms

64 bytes from 192.168.200.102: icmp_seq=31 ttl=64 time=0.241 ms

64 bytes from 192.168.200.102: icmp_seq=32 ttl=64 time=0.246 ms

64 bytes from 192.168.200.102: icmp_seq=33 ttl=64 time=0.254 ms

node 2에서 /var/log/syslog 확인 결과, MASTER 서버에서 VIP를 Take-over 해온 것을 확인할 수 있습니다.

root@node2:~# tail -20 /var/log/syslog

Apr 4 16:23:57 node2 Keepalived_vrrp[25339]: VRRP_Instance(VI_1) Transition to MASTER STATE

Apr 4 16:23:58 node2 Keepalived_vrrp[25339]: VRRP_Instance(VI_1) Entering MASTER STATE

Apr 4 16:24:49 node2 systemd[1]: Created slice User Slice of root.

Apr 4 16:24:49 node2 systemd[1]: Starting User Manager for UID 0…

Apr 4 16:24:49 node2 systemd[1]: Started Session 61 of user root.

Apr 4 16:24:49 node2 systemd[10579]: Reached target Paths.

Apr 4 16:24:49 node2 systemd[10579]: Reached target Sockets.

글을 마무리하며…

지금까지 keepalived를 활용하여, 간단하게 HA를 구성하는 것을 살펴보았습니다. 긴 글 읽어주셔서 감사합니다.

서비스 사용 및 구축 중에 이슈가 발생하신 경우, 네이버 클라우드 플랫폼 고객센터로 문의하시면 빠른 지원 받으실 수 있습니다. 앞으로도 네이버 클라우드 플랫폼에 많은 관심 부탁드립니다!

--

--

NAVER Cloud
NAVER Cloud

Written by NAVER Cloud

We provide cloud-based information technology services for industry leaders from startups to enterprises.

No responses yet