>  기사  >  운영 및 유지보수  >  keepalived와 nginx를 결합하여 고가용성을 달성하는 방법

keepalived와 nginx를 결합하여 고가용성을 달성하는 방법

WBOY
WBOY앞으로
2023-05-15 21:07:121309검색

1. 소개

keepalived는 단일 장애 지점을 방지하는 데 사용할 수 있는 vrrp 프로토콜을 기반으로 하는 lvs 서비스용 고가용성 솔루션입니다. LVS 서비스에는 연결 유지를 실행하는 두 개의 서버가 있습니다. 하나는 주 서버(마스터)이고 다른 하나는 백업 서버(백업)이지만 외부 세계에는 가상 IP로 표시됩니다. 주 서버는 특정 메시지를 LVS에 보냅니다. 백업 서버가 이 메시지를 수신할 수 없는 경우, 즉 메인 서버가 다운된 경우 백업 서버가 가상 IP를 넘겨받아 계속해서 서비스를 제공함으로써 고가용성을 보장합니다. Keepalived는 vrrp의 완벽한 구현이므로 keepalived를 소개하기 전에 먼저 vrrp의 원리를 소개하겠습니다.

1.vrrp 프로토콜 소개

실제 네트워크 환경에서 통신이 필요한 두 호스트는 대부분의 경우 직접적인 물리적 연결이 없습니다. 이러한 상황에서 그들 사이의 경로를 선택하는 방법은 무엇입니까? 호스트는 대상 호스트에 대한 다음 홉 경로를 어떻게 선택합니까? 이 문제에 대한 두 가지 일반적인 해결책이 있습니다.

  1. 호스트에서 동적 라우팅 프로토콜(rip, ospf 등)을 사용합니다.

  2. 정적 라우팅을 구성합니다. 호스트

분명히 호스트에서 동적 라우팅을 구성하는 것은 관리 및 유지 비용, 지원 여부 등 많은 문제로 인해 매우 비현실적입니다. 고정 경로 구성은 매우 널리 사용되지만 라우터(또는 기본 게이트웨이)가 단일 실패 지점이 되는 경우가 많습니다. vrrp의 목적은 정적 라우팅의 단일 실패 지점 문제를 해결하는 것입니다. vrrp는 선택 프로토콜을 사용하여 LAN의 가상 라우터 중 특정 vrrp 라우터에 라우팅 작업을 동적으로 할당합니다.

2.vrrp 작동 메커니즘

vrrp 가상 라우터에는 여러 개의 물리적 vrrp 라우터가 있지만 이러한 여러 물리적 머신은 동시에 작동할 수 없지만 마스터라는 사람이 작업 라우팅을 담당하고 그 밖의 모든 것은 백업의 경우 마스터는 정적이 아니며 vrrp는 각 vrrp 라우터가 선거에 참여할 수 있도록 허용하며 결국 마스터가 승자가 됩니다. 예를 들어, 마스터는 가상 라우터의 IP 주소를 가지고 있으며 이 IP 주소를 고정 경로로 사용합니다. 권한 있는 마스터는 게이트웨이 주소로 전송된 패킷을 전달하고 arp 요청에 응답하는 일을 담당합니다.

vrrp는 선거 프로토콜을 통해 가상 라우터의 기능을 구현합니다. 모든 프로토콜 메시지는 IP 멀티캐스트(멀티캐스트) 패킷(멀티캐스트 주소 224.0.0.18) 형식으로 전송됩니다. 가상 라우터는 vrid(범위 0-255)와 외부 세계에 잘 알려진 Mac 주소로 나타나는 IP 주소 세트로 구성됩니다. 따라서 가상 라우터에서는 누가 마스터인지에 관계없이 외부 Mac과 IP가 동일합니다(vip라고 함). 클라이언트 호스트는 마스터의 변경으로 인해 라우팅 구성을 수정할 필요가 없습니다. 클라이언트의 경우 이 마스터-슬레이브 전환은 투명합니다.

가상 라우터에서는 마스터인 vrrp 라우터만 항상 vrrp 알림 메시지(vrrpadvertisement 메시지)를 보내며 백업은 우선 순위가 더 높지 않으면 마스터를 선점하지 않습니다. 마스터를 사용할 수 없는 경우(백업이 알림 정보를 받을 수 없음) 여러 백업 중 우선 순위가 가장 높은 백업이 선점되어 마스터가 됩니다. 이 선점은 서비스 연속성을 보장하기 위해 매우 빠릅니다(1초 미만). 보안 고려 사항으로 인해 vrrp 패키지는 암호화에 암호화 프로토콜을 사용합니다.

3.vrrp 워크플로

(1).초기화:

라우터가 시작될 때 라우터의 우선 순위가 255(가장 높은 우선 순위, 라우터에 라우터 주소가 있음)인 경우 vrrp 알림 정보는 다음과 같아야 합니다. 라우터의 IP 주소에 해당하는 MAC 주소를 라우팅 가상 MAC로 알리기 위해 arp 정보를 방송합니다. vrrp 알림 정보를 정기적으로 보낼 준비를 하고 그렇지 않으면 백업 상태로 전환합니다. 마스터의 알림 정보가 수신되는지 정기적으로 확인하도록 타이머를 설정하십시오.

(2).master

  1. 예약된 알림 타이머를 설정합니다.

  2. vrrp 가상 Mac 주소를 사용하여 라우터 IP 주소의 arp 요청에 응답합니다.

  3. 대상 Mac이 다음인 패킷을 전달합니다. vrrp 가상 Mac;

  4. 가상 라우터 IP의 소유자인 경우 대상 주소가 가상 라우터 IP인 데이터 패킷을 수락하고, 그렇지 않으면 이를 폐기합니다.

  5. 종료 이벤트를 수신하면 삭제합니다. 예약된 알림 타이머가 있고 전송 우선순위가 0 알림 패킷이면 초기화 상태로 전환됩니다.

  6. 예약된 알림 타이머가 시간 초과되면 vrrp 알림 정보를 보냅니다.

  7. vrrp 알림 정보가 수신되면 우선순위가 0이면 vrrp 알림 정보를 보냅니다. 그렇지 않으면 데이터를 판단하여 우선 순위가 로컬 우선 순위보다 높거나 같고 실제 IP 주소가 실제 로컬 IP보다 큰지 여부를 판단하고 예약된 알림 타이머를 설정하고 호스트 시간 초과 타이머를 재설정합니다. 그렇지 않으면 알림 패킷을 삭제합니다.

호스트 시간 초과 타이머를 설정합니다.

  1. 가상 라우터 IP에 대한 요청 정보에 응답할 수 없습니다.

  2. 대상 mac 주소가 가상 라우터 mac 주소인 모든 패킷을 삭제합니다.
  3. 가상 라우터 IP로 향하는 모든 데이터 패킷을 허용하지 않습니다.
  4. 종료 이벤트를 수신하면 호스트 시간 초과 타이머를 삭제하고
  5. 초기화 상태로 전환;
  6. 호스트 타임아웃 타이머가 타임아웃되면 vrrp 알림 정보를 보내고 arp 주소 정보를 브로드캐스트하며 마스터 상태로 전환됩니다.

  7. vrrp 알림 정보를 수신할 때 우선 순위가 0이면 그렇지 않으면 데이터가 로컬 머신보다 높은지 판단합니다. 높으면 마스터가 유효한 것으로 인식되고 그렇지 않으면 알림 패킷이 삭제됩니다.

    4.arp 쿼리 처리

내부 호스트가 arp를 통해 가상 머신에 쿼리할 때 라우터 IP 주소가 mac 주소와 일치할 때 마스터 라우터가 반환한 mac 주소는 mac 주소가 아닌 가상 vrrp의 mac 주소입니다. 실제 네트워크 카드의 주소. 라우터가 전환될 때 내부 네트워크 시스템이 이를 감지할 수 없고 라우터가 다시 시작될 때 로컬 네트워크 카드의 실제 mac 주소를 적극적으로 보낼 수 없습니다. 가상 라우터에서 arp 프록시(proxy_arp) 기능이 활성화된 경우 프록시의 arp 응답도 vrrp 가상 Mac 주소에 응답합니다.

2. 환경 구축

1. 서버 1: 10.63.0.154 keeplived를 설치하고 우선순위 값을 1002로 설정합니다. 서버 2: 10.63.0.155 keeplived를 설치하고 우선순위 값을 98
3으로 설정합니다. 설정 두 서버에 해당하는 가상 IP는 10.63.0.158


3입니다. keepalived 마스터 노드를 설치하세요

이 keepalived 설치는 yum 모드를 채택하고 서버 1에 설치됩니다. 주요 단계는 다음과 같습니다. 1. ipvsadm 설치, 명령: yum install ipvsadm, 설치가 완료된 후 ipvsadm –v 명령을 통해 버전 번호를 확인할 수 있습니다. 2. keepalived 설치, 명령: yum install keepalived 설치가 완료된 후 keepalived –v 명령을 통해 버전 번호를 확인할 수 있습니다.

3. /usr/local/nginx/nginx_check.sh 스크립트를 생성합니다. 스크립트 내용은 다음과 같습니다.


#!/bin/bash
#判断nginx服务是否启动,如果不存在,调用nginx启用命令,并停止2秒,若#启动失败,杀掉keepalived
a=`ps -c nginx --no-header |wc -l`
if [ $a -eq 0 ];then 
 /usr/sbin/nginx
 sleep 2
 if [ `ps -c nginx --no-header |wc -l` -eq 0 ];then
  killall keepalived
 fi
fi

Set nginx_check.sh 권한 설정 명령은 chmod 777 /usr/local/nginx/nginx_check.sh


4 기본 구성 파일입니다. /etc/keepalived/keepalived.conf. Keepalived.conf 구성 파일은 다음과 같습니다.

! configuration file for keepalived

global_defs {
 router_id nginx_master154
}

vrrp_script chk_nginx {
 script "/usr/local/nginx/nginx_check.sh"
 interval 2
 weight 20
}
vrrp_instance vi_1 {
 state master
 interface eth0
 virtual_router_id 154
 mcast_src_ip 10.63.0.154
 priority 100
 nopreempt
 advert_int 1
 authentication {
  auth_type pass
  auth_pass 1111
 }
 track_script {
  chk_nginx
 }
 virtual_ipaddress {
  10.63.0.158
 }
}
}

구성 파일 키 매개변수 설명:


router_id // 노드 이름 정의

    vrrp_script chk_nginx {script "/etc/keepalived/nginx_check.sh" Internet Al 2 Weight -20 } //2초마다 /etc/keepalived/nginx_check.sh 스크립트를 실행합니다. 이 검사는 처음부터 수행되는 간격을 의미하며, 가중치 -20은 예외를 확인하기 위해 스크립트가 실행될 때를 의미합니다. , 이 노드 10.63.0.154의 우선순위는 20만큼 감소합니다.
  1. state master //노드 역할이 master로 정의되었음을 나타냅니다
  2. virtual_router_id 154 //가상 노드 식별 정의
  3. interface eth0 //서버 네트워크 카드 이름을 보려면 네트워크 카드 이름을 정의합니다. 그림과 같이 ifconfig 또는 ip a 명령을 통해:
  4. 위 구성 파일이 완료된 후 nginx를 시작하고 keepalived를 시작하여 가상 IP 주소로 nginx에 액세스할 수 있는지 테스트합니다. keepalived 명령 시작: systemctl start keepalived.service 시작 후 systemctl status keepalived.service 명령을 통해 상태를 확인할 수 있습니다. 가상 IP를 사용하는 nginx의 메인 인터페이스 스크린샷은 다음과 같습니다.

keepalived와 nginx를 결합하여 고가용성을 달성하는 방법

3. keepalived 백업 노드 설치

keepalived와 nginx를 결합하여 고가용성을 달성하는 방법 서버 2에 keepalived를 설치하는 방법은 서버 1과 완전히 동일합니다. keepalived.conf 구성 파일에서 세 가지 수정이 필요합니다. 장소:

interface eth0 // 서버 2의 네트워크 카드를 보려면 네트워크 카드 이름을 정의합니다. 네트워크 카드 이름이 eno24인 경우 다음과 같이 정의됩니다. eno24

    priority //우선순위 값은 98
  1. mcast_src_ip 10.63.0.155
  2. 두 서버에 Keepalived 설치가 성공한 후 가상 ip10.63.0.158 호출 테스트를 통해 항상 기본 노드의 페이지이고 백업 노드의 페이지는 호출되지 않는 것으로 나타났습니다. 서버 1에 keepalived를 설정하고 다시 호출하면 아래와 같이 대기 노드의 기본 인터페이스가 나타납니다.

4 Linux 서비스 관리 도구 systemctl

keepalived와 nginx를 결합하여 고가용성을 달성하는 방법 Linux에는 두 가지 명령이 있습니다. : 서비스 및 chkconfig 관리 서비스. systemctl은 서비스 관리를 위한 주요 도구이며 chkconfig 및 서비스 기능을 통합합니다. (이 명령을 사용하여 yum 설치 소프트웨어를 관리하고 부팅 시 시작 여부를 설정할 수 있습니다)

systemctl is-enabled servicename.service #부팅 시 서비스 시작 여부 쿼리

    systemctl 활성화 *.service # boot
  1. 에서 서비스를 실행하십시오. systemctl 비활성화 *.service #부팅 작업 취소
  2. systemctl start *.service #서비스 시작
  3. systemctl stop *.service #서비스 중지
  4. systemctl restart *.service #重启服务

  5. systemctl reload *.service #重新加载服务配置文件

  6. systemctl status *.service #查询服务运行状态

  7. systemctl --failed #显示启动失败的服务

注:*代表某个服务的名字,如http的服务名为httpd

例如在centos 7 上安装http

[root@centos7 ~]# yum -y install httpd

启动服务(等同于service httpd start)  systemctl start httpd.service
停止服务(等同于service httpd stop)  systemctl stop httpd.service
重启服务(等同于service httpd restart) systemctl restart httpd.service
查看服务是否运行(等同于service httpd status) systemctl status httpd.service 开机自启动服务(等同于chkconfig httpd on)  systemctl enable httpd.service
开机时禁用服务(等同于chkconfig httpd on) systemctl disable httpd.service

ps -ef | grep nginx #查看服务进程

#非systemctl配置开机启动:chmod +x /etc/rc.d/rc.local
#打开rc.localvi /etc/rc.local
#加入启动脚本其中路径一定要用全路径如:/usr/local/nginx/sbin/nginx

위 내용은 keepalived와 nginx를 결합하여 고가용성을 달성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제