리눅스에 가상의 네트워크 장치를 만들자.
가상의 네트워크를 이용해야하는 이유에 대해서
mysqld DB_server A와 DB_server B가 있다.
A를 본 서버 Active server로 , B를 예비 서버 SteadBy server로 설계한다.
A의 IP주소는 10.10.10.10/24, A의 IP주소는 10.10.10.20/24 이다.
keepalived를 A와 B에 설치한다.
keepalived로 가상의 IP 10.10.10.30/24를 A, B에 만든다.
A의 가상IP를 활성화(Active)하고, B의 가상IP는 비활성화(BACKUP)해둔다.
클라이언트에서 서버를 찾아올 때 10.10.10.30/24으로 오도록한다.
일반적인 상황일 때 클라이언트는 10.10.10.30/24를 통해 A 에게 서비스를 받는다.
A가 죽거나 서버 프로그램에 문제가 생겼을 때, A의 가상 IP를 비활성화한다.
B의 keealievd 프로그램은 A의 문제를 감지하고 B의 가상IP를 활성화한다.
클라이언트는 10.10.10.30/24를 통해 B에게 서비스를 받는다.
즉, 클라이언트는 서버에 이상이 생겨도 서비스를 제공받는데 문제가 없다
물론, 문제를 감지하고 IP를 활성화 시키는데 시간이 걸린다.
그리고 접속하고 있던 사람들도 연결은 끊긴다.
그래도 알아두어야한다.
이제 직접 keepalived를 써보자.
keepalived 다운로드
keepalived 설정 파일 수정
1) keepalived 설치 및 설정
yum install -y keepalived
vi /etc/keepalived/keepalived.conf
14번 라인 주석처리
18번 라인 밑으로 전부 삭제
vrrp_instance VI_1 {
interface ens160
state MASTER # 지금 IP의 주인 : MASTER
virtual_router_id 123 # Standby랑 맞춰줘야 하는 값
unicast_src_ip 192.168.72.20 # Active IP (내 IP)
unicast_peer {
192.168.72.30 # Standby IP (날 대신할 얘)
}
priority 102 # Standby보다 Active가 높아야 하는 값, ACTIVE가 살아나면 우선 순위에 따라 가상 IP의 주인이 바뀐다. 값이 클수록 우선 순위가 높다.
track_script {
chk_mysql
}
virtual_ipaddress {
192.168.72.100/24 dev ens160 # 가상의 IP, 클라이언트에게 제공
}
}
설정을 바꾼 후엔 꼭 재실행
systemctl restart keepalived
keepalived 다운로드
keepalived 설정 파일 수정
vrrp_script chk_mysql { #mysqld라는 프로그램이 실행 중인지 확인하는 함수
script "pidof mysqld"
interval 2 # every 2 seconds
weight 2
}
vrrp_instance VI_1 {
interface ens160
state BACKUP # 가상 IP 받을 대기 중
virtual_router_id 123 # Standby랑 맞춰줘야 하는 값
unicast_src_ip 192.168.72.40 # Standby IP (내 IP)
unicast_peer {
192.168.72.30 # Active IP (내가 상태를 확인할 컴퓨터)
}
priority 101 # Standby보다 Active가 높아야 하는 값
track_script {
chk_mysql
}
virtual_ipaddress {
192.168.72.100/24 dev ens160
}
}
1) workbench에서 접속 테스트
hostname : [keepalived에서 VIP]
username : [생성한 계정]
접속 후
show variables LIKE '%server_id%'; 실행해서 server-id를 확인, Active 서버를 끄고 수 초 후 다시 접속
server에서도 ip가 잘 생기는지 확인하자.