«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags more
Archives
Today
Total
12-28 00:38
관리 메뉴

+1-1+1-1+1-1+1-1...

Keepalived - 이중화 본문

Linux/KeepAlived

Keepalived - 이중화

투명인간 2021. 1. 19. 22:28
728x90

- 서버 구성

Linux - CentOS 7.3 ( Apache )

MASTER : 192.168.60.6/24

BACKUP : 192.168.60.7/24

VLAN : 192.168.60.8 ( keepalived )

1. MASTER, BACKUP 서버 초기 설정

[root@localhost ~]# vi /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).


# HAProxy 및 Keepalived의 로드밸런싱은 동시에 로컬이 아닌 IP 주소에 바인딩할 수 있어야한다.
# 즉, 네트워크 인터페이스에 없는 주소로 바인딩할 수 있도록 해주는 커널 값이다.
# (네트워크 인터페이스가 지정된 정적 IP가 아닌 동적 IP를  바인딩할 수 있다.)
# 해당 옵션이 비활성화 되어 있어도 서비스가 시작하면서 인터페이스에 특정 IP를 바인딩할 수 있으나 
# FailOver시 문제 발생

net.ipv4.ip_nonlocal_bind=1

# Kernel이 패킷을 전달하게 하는 경우 사용한다.
# Keepalived가 네트워크 패킷을 실제 서버에 정상적으로 전달하려면 각 라우터 노드가 커널에서 IP Forward를 설정해야한다.
# 테스트 결과, 해당 설정이 누락되면 FailOver 속도가 길어짐을 확인
net.ipv4.ip_forward=1  

# 적용 확인
[root@localhost ~]# sysctl -p

2. MASTER > KeepAlived 설치

[root@localhost ~]# yum install -y  keepalived
....
Installed:
  keepalived.x86_64 0:1.3.5-19.el7

Dependency Installed:
  lm_sensors-libs.x86_64 0:3.4.0-8.20160601gitf9185e5.el7        net-snmp-agent-libs.x86_64 1:5.7.2-49.el7        net-snmp-libs.x86_64 1:5.7.2-49.el7
  perl.x86_64 4:5.16.3-297.el7                                   perl-Carp.noarch 0:1.26-244.el7                  perl-Encode.x86_64 0:2.51-7.el7
  perl-Exporter.noarch 0:5.68-3.el7                              perl-File-Path.noarch 0:2.09-2.el7               perl-File-Temp.noarch 0:0.23.01-3.el7
  perl-Filter.x86_64 0:1.49-3.el7                                perl-Getopt-Long.noarch 0:2.40-3.el7             perl-HTTP-Tiny.noarch 0:0.033-3.el7
  perl-PathTools.x86_64 0:3.40-5.el7                             perl-Pod-Escapes.noarch 1:1.04-297.el7           perl-Pod-Perldoc.noarch 0:3.20-4.el7
  perl-Pod-Simple.noarch 1:3.28-4.el7                            perl-Pod-Usage.noarch 0:1.63-3.el7               perl-Scalar-List-Utils.x86_64 0:1.27-248.el7
  perl-Socket.x86_64 0:2.010-5.el7                               perl-Storable.x86_64 0:2.45-3.el7                perl-Text-ParseWords.noarch 0:3.29-4.el7
  perl-Time-HiRes.x86_64 4:1.9725-3.el7                          perl-Time-Local.noarch 0:1.2300-2.el7            perl-constant.noarch 0:1.27-2.el7
  perl-libs.x86_64 4:5.16.3-297.el7                              perl-macros.x86_64 4:5.16.3-297.el7              perl-parent.noarch 1:0.225-244.el7
  perl-podlators.noarch 0:2.5.1-3.el7                            perl-threads.x86_64 0:1.87-4.el7                 perl-threads-shared.x86_64 0:1.43-6.el7

Dependency Updated:
  ipset.x86_64 0:7.1-1.el7                                                        ipset-libs.x86_64 0:7.1-1.el7

3. BACKUP > KeepAlived 설치

[root@localhost ~]# yum install -y  keepalived
....
Installed:
  keepalived.x86_64 0:1.3.5-19.el7

Dependency Installed:
  lm_sensors-libs.x86_64 0:3.4.0-8.20160601gitf9185e5.el7        net-snmp-agent-libs.x86_64 1:5.7.2-49.el7        net-snmp-libs.x86_64 1:5.7.2-49.el7
  perl.x86_64 4:5.16.3-297.el7                                   perl-Carp.noarch 0:1.26-244.el7                  perl-Encode.x86_64 0:2.51-7.el7
  perl-Exporter.noarch 0:5.68-3.el7                              perl-File-Path.noarch 0:2.09-2.el7               perl-File-Temp.noarch 0:0.23.01-3.el7
  perl-Filter.x86_64 0:1.49-3.el7                                perl-Getopt-Long.noarch 0:2.40-3.el7             perl-HTTP-Tiny.noarch 0:0.033-3.el7
  perl-PathTools.x86_64 0:3.40-5.el7                             perl-Pod-Escapes.noarch 1:1.04-297.el7           perl-Pod-Perldoc.noarch 0:3.20-4.el7
  perl-Pod-Simple.noarch 1:3.28-4.el7                            perl-Pod-Usage.noarch 0:1.63-3.el7               perl-Scalar-List-Utils.x86_64 0:1.27-248.el7
  perl-Socket.x86_64 0:2.010-5.el7                               perl-Storable.x86_64 0:2.45-3.el7                perl-Text-ParseWords.noarch 0:3.29-4.el7
  perl-Time-HiRes.x86_64 4:1.9725-3.el7                          perl-Time-Local.noarch 0:1.2300-2.el7            perl-constant.noarch 0:1.27-2.el7
  perl-libs.x86_64 4:5.16.3-297.el7                              perl-macros.x86_64 4:5.16.3-297.el7              perl-parent.noarch 1:0.225-244.el7
  perl-podlators.noarch 0:2.5.1-3.el7                            perl-threads.x86_64 0:1.87-4.el7                 perl-threads-shared.x86_64 0:1.43-6.el7

Dependency Updated:
  ipset.x86_64 0:7.1-1.el7  

4. MASTER > KeepAlived에 할당할 네트워크 인터페이스 확인

# 네트워크 인터페이스 확인
[root@localhost keepalived]# ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.2.11  netmask 255.255.255.0  broadcast 10.0.2.255
        inet6 fe80::a00:27ff:feb0:8c1  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:b0:08:c1  txqueuelen 1000  (Ethernet)
        RX packets 10882  bytes 14559033 (13.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3204  bytes 226848 (221.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# enp0s8 KeepAlived 할당
enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.60.6  netmask 255.255.255.0  broadcast 192.168.60.255
        inet6 fe80::a00:27ff:fec6:b5b  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:c6:0b:5b  txqueuelen 1000  (Ethernet)
        RX packets 6478  bytes 629522 (614.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 963  bytes 391455 (382.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

5. MASTER > KeepAlived 설정파일 수정

[root@localhost keepalived]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
#   smtp_server 192.168.200.1
#   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    interface enp0s8            # 모니터링 네트워크 인터페이스 지정
    virtual_router_id 51
    priority 101                #우선순위 MASTER 101, BACKUP 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.60.8
    }
}

6. BACKUP> KeepAlived 설정파일 수정

[root@localhost ~]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
#   smtp_server 192.168.200.1
#   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
    interface enp0s8            # 모니터링 네트워크 인터페이스 지정
    virtual_router_id 51
    priority 100                #우선순위 BACKUP 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.60.8
    }
}

7. MASTER, BACKUP 서버 KeepAlived 기동

[root@localhost keepalived]# systemctl start keepalived

8. MASTER, BACKUP 서버 네트워크 인터페이스 확인

# 마스터 서버
[root@localhost keepalived]# ip addr
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:c6:0b:5b brd ff:ff:ff:ff:ff:ff
    inet 192.168.60.6/24 brd 192.168.60.255 scope global enp0s8
       valid_lft forever preferred_lft forever
    inet 192.168.60.8/32 scope global enp0s8    --> VIP 확인됨
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fec6:b5b/64 scope link
       valid_lft forever preferred_lft forever

#백업 서버
[root@localhost ~]# ip addr
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:e2:b7:21 brd ff:ff:ff:ff:ff:ff
    inet 192.168.60.7/24 brd 192.168.60.255 scope global enp0s8
       valid_lft forever preferred_lft forever
    inet 192.168.60.8/32 scope global enp0s8    --> VIP 확인됨
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fee2:b721/64 scope link
       valid_lft forever preferred_lft forever

9. MASTER 서버 VIP 활성 체크

# 마스터 서버 MAC Address 확인
[root@localhost keepalived]# ip addr
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:c6:0b:5b brd ff:ff:ff:ff:ff:ff
    inet 192.168.60.6/24 brd 192.168.60.255 scope global enp0s8
       valid_lft forever preferred_lft forever
    inet 192.168.60.8/32 scope global enp0s8
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fec6:b5b/64 scope link
       valid_lft forever preferred_lft forever



# 윈도우 클라이언트에서 VIP Mac Address 확인
C:\Users\administrator>arp -a 192.168.60.8

인터페이스: 192.168.60.1 --- 0x40
  인터넷 주소           물리적 주소           유형
  192.168.60.8          08-00-27-c6-0b-5b     동적  --> 마스터 서버에 할당됨

10. MASTER 서버 네트워크 서비스 중지 후 Failover 테스트

[root@localhost keepalived]# systemctl stop keepalived

# 윈도우 클라이언트 Ping 통신 확인
C:\Users\administrator>ping 192.168.60.8 -t

Ping 192.168.60.8 32바이트 데이터 사용:
192.168.60.8의 응답: 바이트=32 시간<1ms TTL=64
192.168.60.8의 응답: 바이트=32 시간<1ms TTL=64
192.168.60.8의 응답: 바이트=32 시간<1ms TTL=64
192.168.60.8의 응답: 바이트=32 시간<1ms TTL=64
192.168.60.8의 응답: 바이트=32 시간<1ms TTL=64
192.168.60.8의 응답: 바이트=32 시간<1ms TTL=64
192.168.60.8의 응답: 바이트=32 시간<1ms TTL=64
192.168.60.8의 응답: 바이트=32 시간<1ms TTL=64
요청 시간이 만료되었습니다.
요청 시간이 만료되었습니다.
요청 시간이 만료되었습니다.
요청 시간이 만료되었습니다.
요청 시간이 만료되었습니다.
요청 시간이 만료되었습니다.
요청 시간이 만료되었습니다.
요청 시간이 만료되었습니다.
192.168.60.8의 응답: 바이트=32 시간<1ms TTL=64
192.168.60.8의 응답: 바이트=32 시간<1ms TTL=64
192.168.60.8의 응답: 바이트=32 시간<1ms TTL=64
192.168.60.8의 응답: 바이트=32 시간<1ms TTL=64

11. BACKUP 서버 VIP 활성 체크

[root@localhost ~]# ip addr
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:e2:b7:21 brd ff:ff:ff:ff:ff:ff  --> MacAddress 확인
    inet 192.168.60.7/24 brd 192.168.60.255 scope global enp0s8
       valid_lft forever preferred_lft forever
    inet 192.168.60.8/32 scope global enp0s8
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fee2:b721/64 scope link
       valid_lft forever preferred_lft forever
       
# 윈도우 클라이언트에서 VIP MacAddress 확인
C:\Users\administrator>arp -a 192.168.60.8

인터페이스: 192.168.60.1 --- 0x40
  인터넷 주소           물리적 주소           유형
  192.168.60.8          08-00-27-e2-b7-21     동적    --> BACKUP 서버 MacAddress와 동일

 

MASTER 서버 VIP 활성 체크
반응형