[Redundancy] 04. HeartBeat?

Date:     Updated:

카테고리:

태그:


04-1. HeartBeat



HeartBeat는 Linux-HA 프로젝트 그룹에서 만든 모듈로서 리눅스 운영체제에서 고가용성을 제공하며, 아래 그림에서와 같이 두 서버 사이에 장애극복(Failover)을 가능하게 하는 모듈로서 서버 사이의 장애극복(Failover) 기능을 제공하고자 할 때 사용한다.

ha-diagram-animated


■ HeartBeat의 구성

HeartBeat를 설치하면 두 서버 사이에 즉, Primary로 설정된 서버와 Standby로 설정된 서버 사이에 주기적으로 메시지를 교환해 서버의 상태를 확인한다.

140C9B4450D162A814

HeartBeat는 Active로 사용 중인 Primary 서버와 Passive 상태인 Standby 서버 사이에 IP 관리 기능의 일환으로, VIP를 사용해 Active 상태인 Primary 서버에 장애가 일어나더라도 Passive 상태인 Standby 서버를 이용해 서비스가 진행될 수 있도록 한다.

애플리케이션에서는 VIP를 사용해 서버에 접근하는데, 이때 VIP로 접근하는 애플리케이션은 HeartBeat 구성에서 Active로 설정된 Primary 서버에 자동으로 접근하게 된다. 만약 서버가 시스템 종료 또는 문제가 발생해 사용하지 못하는 상태가 되는 경우 HeartBeatt이 감지해 현재 문제가 발생한 Primary 서버가 아닌 Standby 서버를 Active로 전환해 서비스가 계속 이어지게 한다.

1340D53350D162A82E


04-1. LVS + HeartBeat 구성 (Ubuntu 기반)


(1) VM 환경구성

022


(2) LVS (Direct Routing) Cluster 설정


■ 구성도

177301559-23bd546d-2b87-444f-bc82-efd76294e4cd


■ LVS-01, LVS-02 Node - HeartBeat 설치


▶ HeartBeat 설치

apt update

apt-get install heartbeat -y 


▶ HeartBeat 설정

{
    cp /usr/share/doc/heartbeat/authkeys /etc/ha.d/
    cp /usr/share/doc/heartbeat/ha.cf.gz /etc/ha.d/
    cp /usr/share/doc/heartbeat/haresources.gz /etc/ha.d/
    gunzip -d /etc/ha.d/ha.cf.gz
    gunzip -d /etc/ha.d/haresources.gz
    chmod 600 /etc/ha.d/authkeys
}


▶ authkeys - 노드간의 인증 방법 설정

{
    sed -i "s/#auth 1/auth 1/g" /etc/ha.d/authkeys
    sed -i "s/#1 crc/1 crc/g" /etc/ha.d/authkeys
}


▶ ha.cf - heartbeat 구성에 필요한 기본 설정 파일

cat <<EOF >> /etc/ha.d/ha.cf

# debugfile 로그 생성 파일
debugfile /var/log/ha-debug

# 로그 생성 파일
logfile /var/log/ha-log

# 두 노드간 heartbeat 주고받는 주기(초단위)
keepalive 2

# 노드가 죽었다고 판단하는 시간
deadtime 30

# 자동 복구 On (한 노드가 서비스 하다가 죽었을 때 새로운 노드로 자원이 이동)
# 기본적으로 설정되어 있음
# auto_failback on ()

initdead 120

# UDP heartbeat 패킷을 보낼 포트
udpport 694

# 노드간 체크할 사용할 인터페이스
bcast ens32

# 노드 등록
node lvs-01
node lvs-02
EOF

cat <<EOF >> /etc/hosts

192.168.219.11 lvs-01
192.168.219.12 lvs-02
EOF


▶ haresource - 노드간에 공유할 자원과 스크립트 설정 파일

cat <<EOF >> /etc/ha.d/haresources

# lvs-01, lvs-02 노드 모두 lvs-01로 작성
lvs-01 IPaddr::192.168.219.100/24/ens32:0/192.168.219.255
EOF


▶ Service Start/Enable

{
    systemctl enable heartbeat
    systemctl start heartbeat
}


■ LVS-01, LVS-02 Node - ipvs 설치


▶ ipvsadm 설치

apt update 

apt -y install ipvsadm


▶ IP forwarding 설정

sed -i "s/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g" /etc/sysctl.conf
sysctl -p


▶ ipvsadm 설정

ipvsadm -C
ipvsadm -A -t 192.168.219.100:80 -s rr
ipvsadm -a -t 192.168.219.100:80 -r 192.168.219.21:80 -g
ipvsadm -a -t 192.168.219.100:80 -r 192.168.219.22:80 -g

ipvsadm-save


▶ ipvsadm 설정을 영구적으로 저장

cat <<EOF > /etc/systemd/system/ipvs-config.service
[Unit]
Description=Configure IPVS
After=network.target

[Service]
Type=oneshot
ExecStart=/sbin/ipvsadm -C
ExecStart=/sbin/ipvsadm -A -t 192.168.219.100:80 -s rr
ExecStart=/sbin/ipvsadm -a -t 192.168.219.100:80 -r 192.168.219.21:80 -g
ExecStart=/sbin/ipvsadm -a -t 192.168.219.100:80 -r 192.168.219.22:80 -g
ExecStart=/sbin/ipvsadm-save
RemainAfterExit=false
StandardOutput=journal

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable ipvs-config


▶ ipvsadm Setup Check

ipvsadm -Ln --rate


■ WEB-01, WEB-02 - Apache 설치 및 설정


▶ Apache 설치

apt update 

apt -y install apache2


▶ 가상 인터페이스 추가

ifconfig lo:0 192.168.219.100/24 up

route add -host 192.168.219.100 dev lo:0


▶ ARP 응답 무시 설정

cat <<EOF >> /etc/sysctl.conf

net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
EOF


■ 결과 확인

result



(2) LVS (NAT) Cluster 설정


■ 구성도

LVS+heartbeat(NAT Routing)


■ LVS-01, LVS-02 Node - HeartBeat 설치


▶ HeartBeat 설치

apt update

apt-get install heartbeat -y 


▶ HeartBeat 설정

{
    cp /usr/share/doc/heartbeat/authkeys /etc/ha.d/
    cp /usr/share/doc/heartbeat/ha.cf.gz /etc/ha.d/
    cp /usr/share/doc/heartbeat/haresources.gz /etc/ha.d/
    gunzip -d /etc/ha.d/ha.cf.gz
    gunzip -d /etc/ha.d/haresources.gz
    chmod 600 /etc/ha.d/authkeys
}


▶ authkeys - 노드간의 인증 방법 설정

{
    sed -i "s/#auth 1/auth 1/g" /etc/ha.d/authkeys
    sed -i "s/#1 crc/1 crc/g" /etc/ha.d/authkeys
}


▶ ha.cf - heartbeat 구성에 필요한 기본 설정 파일

cat <<EOF >> /etc/ha.d/ha.cf

# debugfile 로그 생성 파일
debugfile /var/log/ha-debug

# 로그 생성 파일
logfile /var/log/ha-log

# 두 노드간 heartbeat 주고받는 주기(초단위)
keepalive 2

# 노드가 죽었다고 판단하는 시간
deadtime 30

# 자동 복구 On (한 노드가 서비스 하다가 죽었을 때 새로운 노드로 자원이 이동)
# 기본적으로 설정되어 있음
# auto_failback on ()

initdead 120

# UDP heartbeat 패킷을 보낼 포트
udpport 694

# 노드간 체크할 사용할 인터페이스
bcast ens32

# 노드 등록
node lvs-01
node lvs-02
EOF

cat <<EOF >> /etc/hosts

192.168.219.11 lvs-01
192.168.219.12 lvs-02
EOF


▶ haresource - 노드간에 공유할 자원과 스크립트 설정 파일

cat <<EOF >> /etc/ha.d/haresources

# lvs-01, lvs-02 노드 모두 lvs-01로 작성
lvs-01 IPaddr::192.168.219.100/24/ens32:0/192.168.219.255
lvs-01 IPaddr::192.168.56.100/24/ens34:0/192.168.56.255
EOF


▶ Service Start/Enable

{
    systemctl enable heartbeat
    systemctl start heartbeat
}


■ LVS-01, LVS-02 Node - ipvs 설치


▶ ipvsadm 설치

apt update 

apt -y install ipvsadm


▶ IP forwarding 설정

sed -i "s/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g" /etc/sysctl.conf
sysctl -p


▶ ipvsadm 설정

ipvsadm -C
ipvsadm -A -t 192.168.219.100:80 -s rr
ipvsadm -a -t 192.168.219.100:80 -r 192.168.56.21:80 -m
ipvsadm -a -t 192.168.219.100:80 -r 192.168.56.22:80 -m

ipvsadm-save


▶ ipvsadm 설정을 영구적으로 저장

cat <<EOF > /etc/systemd/system/ipvs-config.service
[Unit]
Description=Configure IPVS
After=network.target

[Service]
Type=oneshot
ExecStart=/sbin/ipvsadm -C
ExecStart=/sbin/ipvsadm -A -t 192.168.219.100:80 -s rr
ExecStart=/sbin/ipvsadm -a -t 192.168.219.100:80 -r 192.168.56.21:80 -m
ExecStart=/sbin/ipvsadm -a -t 192.168.219.100:80 -r 192.168.56.22:80 -m
ExecStart=/sbin/ipvsadm-save
RemainAfterExit=false
StandardOutput=journal

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable ipvs-config


▶ ipvsadm Setup Check

ipvsadm -Ln --rate


■ WEB-01, WEB-02 - Apache 설치 및 설정


▶ Apache 설치

apt update 

apt -y install apache2


▶ Gateway IP address 변경

cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
  ethernets:
    ens32:
            addresses: [192.168.56.21/24]
            gateway4: 192.168.56.100
            nameservers:
                    addresses: [168.126.63.1, 8.8.8.8]
  version: 2


■ 결과 확인

result

REDUNDANCY 카테고리 내 다른 글 보러가기

댓글 남기기