+1-1+1-1+1-1+1-1...
Keepalived - 이중화 본문
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 활성 체크
반응형