Keepalived 설치 사용 설명
Keepalived 는 VRRP 프로 토 콜 을 바탕 으로 이 루어 진 서비스 사용 가능 한 방안 으로 IP 단일 고장 을 피 할 수 있 으 며 유사 한 도 구 는 heartbeat, corosync, pacemaker 도 있다.
그러나 이 는 일반적으로 단독으로 나타 나 지 않 고 다른 부하 균형 기술 (예 를 들 어 lvs, haproxy, nginx) 과 함께 작업 하여 클 러 스 터 의 높 은 사용 가능성 을 달성 합 니 다.
Keepalived 는 서버 의 상 태 를 감지 하 는 역할 을 합 니 다. 웹 서버 가 다운 되 거나 작업 이 고장 나 면 Keepalived 가 감지 하고 고장 난 서버 를 시스템 에서 제거 하 며 이 서버 의 작업 대신 다른 서버 를 사용 합 니 다.
서버 가 정상적으로 작 동 한 후 Keepalived 는 자동 으로 서버 그룹 에 서버 를 추가 합 니 다. 이 작업 들 은 모두 자동 으로 완 료 됩 니 다. 인공 적 으로 간섭 할 필요 가 없고 고장 난 서버 만 복구 해 야 합 니 다.
설치 하 다.
#
wget http://www.keepalived.org/software/keepalived-1.2.23.tar.gz
#
tar -zxvf keepalived-1.2.23.tar.gz
cd keepalived-1.2.23
#
./configure --prefix=/usr/local/keepalived #prefix
make
make install
배치 하 다.
【/usr/local/keepalived/etc/keepalived/keepalived.conf】
global_defs {
notification_email { # keepalived , , , 。
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected] #
smtp_server 127.0.0.1 # email smtp
smtp_connect_timeout 30 #
router_id LVS_DEVEL # keepalived , ,
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER # BACKUP
interface eth0 # IP
virtual_router_id 51 #VRRP , , VRRP
priority 100 # (1-254 ),
advert_int 1
authentication { # ,
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { # IP,
192.168.1.21/24
}
}
【/usr/local/keepalived/etc/sysconfig/keepalived】
KEEPALIVED_OPTIONS="-D -f /usr/local/keepalived/etc/keepalived/keepalived.conf" # keepalived
기본 경로 (/ usr / local) 가 아 닌 keepalived 를 설치 하기 때문에 keepalived 가 정상적으로 작 동 할 수 있 도록 소프트 링크 를 설정 해 야 합 니 다.
ln -s /usr/local/keepalived/sbin/keepalived /usr/bin # keepalived
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ #keepalived , /etc/init.d/ service
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ #keepalived , /etc/sysconfig/, ,
시동 을 걸다
service keepalived start|stop|restart
chkconfig keepalived on
기본 설정 파일 에 가상 IP 가 지정 되 어 있 습 니 다. 192.168.1.21. ip addr (또는 ip a) 명령 으로 검증 할 수 있 습 니 다.
활용 단어 참조
keepalived 두 가지 모드: 주 - 비, 주 - 주
주 - 비
가상 IP: 192.168.1.21 주 노드: 192.168.1.23 예비 노드: 192.168.1.24
주 프로필
【/usr/local/keepalived/etc/keepalived/keepalived.conf】
global_defs {
notification_email { # keepalived , , , 。
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected] #
smtp_server 127.0.0.1 # email smtp
smtp_connect_timeout 30 #
router_id LVS_DEVEL # keepalived , ,
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER # BACKUP
interface eth0 # IP
virtual_router_id 51 #VRRP , , VRRP
priority 100 # (1-254 ),
advert_int 1
authentication { # ,
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { # IP,
192.168.1.21/24
}
}
설정 파일 준비 [/ usr / local / keepalived / etc / keepalived / keepalived. conf]
global_defs {
notification_email { # keepalived , , , 。
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected] #
smtp_server 127.0.0.1 # email smtp
smtp_connect_timeout 30 #
router_id LVS_DEVEL # keepalived , ,
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP # BACKUP
interface eth0 # IP
virtual_router_id 51 #VRRP , , VRRP
priority 99 # (1-254 ),
advert_int 1
authentication { # ,
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { # IP,
192.168.1.21/24
}
}
주 - 주
가상 IP: 192.168.1.21, 192.168.1.22 A 노드: 192.168.1.23 B 노드: 192.168.1.24
주 된 모델 의 단점 은 항상 한 대의 기계 만 작업 상태 에 있 고 다른 한 대의 기 계 는 영원히 예비 상태 이 며 자원 낭비 문제 가 존재 한 다 는 것 이다.
두 개의 메 인 모드 는 두 대의 기계 가 모두 작업 상태 에 있 고 서로 백업 할 수 있 도록 한다.keepalived 쌍방 모델 을 구축 하 는 요소:
1. IP,
2. IP , IP 。
3. , IP
, , IP, 。
노드 A 프로필
【/usr/local/keepalived/etc/keepalived/keepalived.conf】
global_defs {
notification_email { # keepalived , , , 。
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected] #
smtp_server 127.0.0.1 # email smtp
smtp_connect_timeout 30 #
router_id LVS_DEVEL # keepalived , ,
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51 # vrrp_instance ,
priority 100 #
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.21/24
}
}
vrrp_instance VI_2 {
state BACKUP
interface eth0
virtual_router_id 52 # vrrp_instance ,
priority 99 #
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.22/24
}
}
노드 B 설정 파일 [/ usr / local / keepalived / etc / keepalived / keepalived. conf]
global_defs {
notification_email { # keepalived , , , 。
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected] #
smtp_server 127.0.0.1 # email smtp
smtp_connect_timeout 30 #
router_id LVS_DEVEL # keepalived , ,
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51 # vrrp_instance ,
priority 99 #
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.21/24
}
}
vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id 52 # vrrp_instance ,
priority 100 #
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.22/24
}
}
뇌 열 문제
두 노드 는 실제 적 으로 정상 적 인 작업 상태 에 있 지만 서로의 멀티캐스트 통 지 를 받 을 수 없다. 이때 두 노드 는 모두 가상 IP 를 강제로 연결 하여 예측 할 수 없 는 결 과 를 초래 했다.
이 때 중 재 를 설정 해 야 합 니 다. 즉, 각 노드 는 자신의 상태 (응용 서비스 상태 와 자신의 네트워크 상태) 를 판단 해 야 합 니 다. 이 두 가 지 를 실현 하려 면 사용자 정의 셸 스 크 립 트 를 사용 하여 실현 할 수 있 습 니 다. 주기 적 으로 자신의 응용 서비스 상 태 를 검사 하고 계속 ping 게 이 트 웨 이 (또는 신뢰성 있 는 참고 IP) 를 사용 할 수 있 습 니 다.자신의 서비스 가 이상 하거나 게 이 트 웨 이 를 연결 할 수 없 으 면 자신 이 고장 이 났 다 고 생각 되면 가상 IP 를 제거 해 야 합 니 다 (keepalived 서 비 스 를 중단 하면 됩 니 다).
주로 keepalived 가 제공 하 는 vrrp script 및 track script 을 통 해 이 루어 집 니 다.
keepalived 설정 파일 맨 앞 에 다음 코드 를 추가 하여 추적 스 크 립 트 를 정의 합 니 다.
vrrp_script check_local { # check_local
script "/usr/local/keepalived/bin/check_local.sh" #shell
interval 5 #
}
vrrp instance 설정 에 다음 코드 를 추가 하여 위 에서 정의 한 검 측 스 크 립 트 를 사용 합 니 다.
track_script {
check_local
}
우리 가 / usr / local / keepalived / bin / check local. sh 에서 정의 하 는 검 측 규칙 은:
1. 자체 웹 서비스 고장 (시간 초과, http 반환 상태 200 이 아 님)
2. 게 이 트 웨 이 를 ping 할 수 없습니다
3. 상기 모든 문제 가 발생 하면 이 컴퓨터 의 가상 IP 를 제거 해 야 합 니 다 (keepalived 인 스 턴 스 를 중단 하면 됩 니 다)
그러나 여기 서 작은 문제 가 있 습 니 다. 만약 에 본 기기 나 게 이 트 웨 이 가 가끔 고장 이 나 면 우 리 는 서비스 고장 이 라 고 생각 할 수 없습니다. 더 좋 은 방법 은 N 번 연속 으로 본 기기 의 서비스 가 정상 적 이지 않 거나 N 번 연결 되 어 게 이 트 웨 이 를 연결 하지 못 하면 고장 이 발생 했다 고 생각 하고 고장 이전 이 필요 합 니 다.
그러나 스 크 립 트 가 고장 난 것 을 감지 하고 keepalived 서 비 스 를 중단 하면 고장 이 복구 되면 keepalived 는 자동 으로 복구 할 수 없다 는 단점 이 있다.
또한 독립 된 스 크 립 트 를 이용 하여 초 간격 으로 자신의 서비스 와 게 이 트 웨 이 연결 성 을 검사 한 다음 고장 상황 에 따라 keepalived 의 운행 이나 정 지 를 제어 할 수 있 습 니 다.
각 노드 에서 셸 스 크 립 트 실행 (check service. sh)이 컴퓨터 의 서비스 가 정상 인지 확인 합 니 다. 서비스 이상 이 감지 되면 이 컴퓨터 의 keepalived 를 중단 합 니 다. 그러면 가상 IP 는 자동 으로 예비 기기 로 이동 합 니 다. 예 를 들 어 3 초 마다 이 컴퓨터 의 서비스 상 태 를 감지 하고 3 번 의 연결 에 실패 하면 keepalived 인 스 턴 스 를 중단 합 니 다. 또한 이 컴퓨터 서비스 가 정상 이지 만 keepalived 가 시작 되 지 않 았 습 니 다 (고장 복구 후).고장 회복 의 목적 을 달성 하기 위해 keepalived 를 시작 합 니 다.
check service. sh 파일 의 내용
#!/bin/bash
pidfile=/var/lock/subsys/`basename $0`.pid
if [ -f $pidfile ] && [ -e /proc/`cat $pidfile` ] ; then
exit 1
fi
trap "rm -fr $pidfile ; exit 0" 1 2 3 15
echo $$ > $pidfile
maxfails=3
fails=0
success=0
while [ 1 ]
do
/usr/bin/wget --timeout=3 --tries=1 http://127.0.0.1/ -q -O /dev/null
if [ $? -ne 0 ] ; then
let fails=$[$fails+1]
success=0
else
fails=0
let success=$[$success+1]
fi
if [ $fails -ge $maxfails ] ; then
fails=0
success=0
#check keepalived is running ? try to stop it
service keepalived status | grep running
if [ $? -eq 0 ] ; then
logger -is "local service fails $maxfails times ... try to stop keepalived."
service keepalived stop 2>&1 | logger
fi
fi
if [ $success -gt $maxfails ] ; then
#check keepalived is stopped ? try to start it
service keepalived status | grep stopped
if [ $? -eq 0 ] ; then
logger -is "service changes normal, try to start keepalived ."
service keepalived start
fi
success=0
fi
sleep 3
done
두 노드 에서 모두 이 스 크 립 트 를 실행 해 야 합 니 다. 이 스 크 립 트 를 cron 작업 에 추가 하 십시오.
로 컬 서비스 가 세 번 연속 검색 에 실패 하면 keepalived 서 비 스 를 중단 하려 고 시도 합 니 다 (keepalived 가 실행 중인 경우)
로 컬 서비스 연결 이 세 번 검 측 에 성 공 했 지만 keepalived 가 시작 되 지 않 으 면 시작 합 니 다.
관건 적 인 실행 점 은 모두 시스템 로그 에 기록 되 어 있 습 니 다 (/ var / log / messages). crontab - e 를 실행 하고 다음 과 같은 내용 을 추가 합 니 다.
*/1 * * * * /root/check_service.sh
이 컴퓨터 의 keepalived 를 중단 합 니 다. 조금 있 으 면 keepalived 서비스 가 자동 으로 시 작 됩 니 다. (로 컬 서비스 가 정상적으로 감지 되 었 기 때 문 입 니 다)
이 컴퓨터 의 nginx 를 멈 추 면 조금 있 으 면 keepalived 서비스 도 정지 되 었 습 니 다.
nginx 를 다시 시작 합 니 다. 잠시 후 keepalived 도 정상적으로 작 동 되 고 정확 한 가상 IP 가 연결 되 어 있 습 니 다.
참고 자료:
http://zhangxugg-163-com.iteye.com/blog/1665419
다음으로 전송:https://www.cnblogs.com/MacoLee/p/5853356.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.