클러스터 아키텍처 -LVS + Keepalived 고 가용성 클러스터 구성

배경

이 고도의 정보 기반 IT 시대에 기업의 생산 시스템, 비즈니스 운영, 판매 및 지원, 일상적인 관리는 컴퓨터 정보 및 서비스에 점점 더 의존하고 있으며, 이는 고 가용성 (HA) 기술 애플리케이션에 대한 수요를 크게 증가 시켰습니다. 지속적이고 중단없는 컴퓨터 시스템 또는 네트워크 서비스를 제공하기 위해.

1. 유지 된 개요

1.1 Keepalived 도구 소개

LVS 및 HA를 위해 특별히 설계된 상태 확인 도구 :

  • 자동 장애 조치 지원 (장애 조치)
  • 지원 노드 상태 검사 (상태 검사)
  • 공식 웹 사이트 : http://www.keepalived.org/

여기에 사진 설명 삽입

1.2 Keepalived 구현 원칙

  • Keepalived는 소프트웨어에서 Linux 서버의 다중 머신 핫 백업 기능을 구현하기 위해 VRRP (Virtual Routing Redundancy Protocol) 핫 백업 프로토콜을 채택합니다.
    여기에 사진 설명 삽입

원리 분석 :

VRRP (Virtual Routing Redundancy Protocol)는 라우터를위한 백업 솔루션입니다.

  • 공유 된 가상 IP 주소를 통해 외부 서비스를 제공하는 상시 대기 그룹 인 여러 라우터로 구성됩니다.
  • 동시에 서비스를 제공하는 각 상시 대기 그룹에는 하나의 주 라우터 만 있고 다른 라우터는 중복 상태에 있습니다.
  • 현재 온라인 라우터에 장애가 발생하면 다른 라우터가 설정된 우선 순위에 따라 자동으로 가상 IP 주소를 인수하고 서비스를 계속 제공합니다.

1.3 Keepalived 설치 및 시작

  • LVS 클러스터 환경에 적용될 때 ipvsadm 관리 도구도 필요합니다.
  • YUM은 Keepalived를 설치합니다.
  • Keepalived 서비스를 활성화합니다.

2.Keepalived 케이스

2.1 사례 분석

  • 엔터프라이즈 응용 프로그램에서 단일 서버는 응용 프로그램에서 단일 실패 지점의 위험을 감수합니다.
  • 단일 장애 지점이 발생하면 엔터프라이즈 서비스가 중단되어 큰 피해를 입 힙니다.

여기에 사진 설명 삽입

2.2 사례 설명

  • 이중 시스템 핫 백업의 장애 조치는 다양한 애플리케이션 서버에 적합한 가상 IP 주소의 드리프트에 의해 실현됩니다.
  • 웹 서비스 기반 이중 시스템 핫 백업 실현
    드리프트 주소 : 192.168.70.200
    기본 및 대기 서버 : 192.168.70.9, 192.168.70.10
    제공되는 애플리케이션 서비스 : 웹
    여기에 사진 설명 삽입

3. Keepalived 서버 구성

3.1 Keepalived 마스터 서버 구성

3.1.1 구성 디렉토리 및 기본 구성 파일

  • Keepalived 구성 디렉토리는 / etc / keepalived /에 있습니다.
  • keepalived.conf는
    전역 매개 변수를 지정 하는 기본 구성 파일의 global_defs {...} 섹션 입니다 .
    vrrp_instance 인스턴스 이름 {...} 섹션은 VRRP 상시 대기 매개 변수를 참조하며
    주석 텍스트는 "!"기호로 시작합니다. ;
    디렉토리 샘플은 많은 구성 예제 참조를 제공합니다.

3.1.2 공통 구성 옵션

  • router_id HA_TEST_R1 : 라우터 (서버)의 이름입니다.
  • vrrp_instance VI_1 : VRRP 상시 대기 인스턴스를 정의합니다.
  • state MASTER : 핫 스탠바이 상태, MASTER는 마스터 서버를 나타냅니다.
  • interface ens33 : VIP 주소를 전달하는 물리적 인터페이스.
  • virtual_router_id 1 : 각 상시 대기 그룹에 대해 일관된 가상 라우터의 ID 번호입니다.
  • 우선 순위 100 : 우선 순위, 값이 클수록 우선 순위가 높으며 기본값은 100입니다.
  • advert_int 1 : 알림 사이의 시간 (하트 비트 빈도).
  • auth_type PASS : 인증 유형;
  • auth_pass 123456 : 암호 문자열;
  • virtual_ipaddress {vip} : 드리프트 주소 (VIP)를 지정합니다. 두 개 이상일 수 있습니다.

3.2 Keepalived 슬레이브 서버 구성

Keepalived 백업 서버의 구성은 다음 세 가지 옵션에서 마스터 구성과 다릅니다.

  • router_id : 자신의 이름으로 설정
  • 상태 : BACKUP으로 설정
  • 우선 순위 : 우선 순위 값이 기본 서버보다 낮습니다.
  • 다른 옵션은 마스터와 동일합니다.

4. Keepalived 듀얼 머신 핫 백업 효과 테스트

이중 시스템 핫 백업의 효과를 테스트합니다.

  • 웹 서비스는 주 시스템과 대기 시스템 모두에서 활성화되며 다른 내용이 설정됩니다.
  • 주 서버의 네트워크 카드를 연속적으로 비활성화 및 활성화합니다.

수행 된 테스트 :

  • 테스트 1 : ping을 사용하여 192.168.70.200의 연결을 감지합니다.
  • 테스트 2 : http://192.168.70.200을 방문하여 가용성 및 콘텐츠 변경 사항을 확인합니다.
  • 테스트 3 : 로그 파일 / var / log / messages의 변경 사항을 확인합니다.

5. LVS + Keepalived 고 가용성 클러스터 프로젝트 기반

5.1 프로젝트 환경

(1) 두 개의 LVS로드 디스패치 서버

  • IP 주소 : 192.168.70.9
    가상 IP : 192.168.70.200
  • IP 주소 : 192.168.70.10
    가상 IP : 192.168.70.200

(2) 두 개의 웹 사이트 서버

  • IP 주소 : 192.168.70.11 (서버 AA)
  • IP 주소 : 192.168.70.12 (SERVER AB)
    참고 : 여기에서 웹 서버의 게이트웨이는 디스패처 네트워크 카드를 가리킬 필요가 없습니다.

(3) NFS 공유 서버 1 개

  • IP 주소 : 192.168.70.13

(4) 테스트 및 검증을위한 클라이언트 컴퓨터 1 대

  • IP 주소 : 192.168.70.14

참고 : 동일한 네트워크 세그먼트가 서로 통신 할 수 있는지 확인해야합니다.

5.2 실험 목적

  • 클라이언트는 Keepalived 상시 대기 주 서버를 통해 가상 주소 192.168.70.200에 액세스하여 Apache1 및 Apache2 호스트에 대한 액세스를 폴링합니다. 주 서버가 실패하면 대체 서버가이를 주 서버로 교체하고 주 서버의 기능을 실현합니다. 섬기는 사람
  • nfs 네트워크 파일 스토리지 서비스를 구축합니다.

5.3 프로젝트 단계

5.3.1 NFS 스토리지 서버 구성

[root@nfs ~]# rpm -qa | grep rpcbind		//默认虚拟机已安装rpcbind模块
rpcbind-0.2.0-42.el7.x86_64
[root@nfs ~]# yum -y install nfs-utils	//确认是否安装nfs-utils软件包
已加载插件:fastestmirror, langpacks
base                                                     | 3.6 kB     00:00     
Loading mirror speeds from cached hostfile
 * base: 
软件包 1:nfs-utils-1.3.0-0.48.el7.x86_64 已安装并且是最新版本
无须任何处理
[root@nfs ~]# mkdir /opt/web1
[root@nfs ~]# mkdir /opt/web2
[root@nfs ~]# echo "<h1>this is web1.</h1>" > /opt/web1/index.html
[root@nfs ~]# echo "<h1>this is web2.</h1>" > /opt/web2/index.html
[root@nfs ~]# vi /etc/exports
/opt/web1 192.168.70.11/32 (ro)
/opt/web2 192.168.70.12/32 (ro)
[root@nfs ~]# systemctl restart nfs
[root@nfs ~]# systemctl restart rpcbind
[root@nfs ~]# showmount -e
Export list for nfs:
/opt/web2 (everyone)
/opt/web1 (everyone)

5.3.2 웹 사이트 서버 구성

  • Web1의 구성
[root@web1 ~]# yum -y install httpd
[root@web1 ~]# showmount -e 192.168.70.13
Export list for 192.168.70.13:
/opt/web2 (everyone)
/opt/web1 (everyone)
[root@web1 ~]# mount 192.168.70.13:/opt/web1 /var/www/html
[root@web1 ~]# systemctl restart httpd
[root@web1 ~]# netstat -anpt | grep httpd
tcp6       0      0 :::80                   :::*                    LISTEN      55954/httpd   
[root@web1 ~]# vi web1.sh
#!/bin/bash
#lvs_dr模式 web1
ifconfig lo:0 192.168.70.200 broadcast 192.168.70.200 netmask 255.255.255.255 up
route add -host 192.168.70.200 dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &>/dev/null

[root@web1 ~]# sh web1.sh
[root@web1 ~]# ifconfig		//查看虚拟端口
[root@web1 ~]# route -n 	//查看路由
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.70.10   0.0.0.0         UG    100    0        0 ens33
192.168.70.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.70.200  0.0.0.0         255.255.255.255 UH    0      0        0 lo
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

여기에 사진 설명 삽입
여기에 사진 설명 삽입

  • Web2의 구성
[root@web2 ~]# yum -y install httpd
[root@web2 ~]# mount 192.168.70.13:/opt/web2 /var/www/html
[root@web2 ~]# systemctl start httpd
[root@web2 ~]# netstat -anpt | grep httpd
tcp6       0      0 :::80                   :::*                    LISTEN      54695/httpd 
[root@web2 ~]# vi web2.sh
#!/bin/bash
#lvs_dr模式 web2
ifconfig lo:0 192.168.70.200 broadcast 192.168.70.200 netmask 255.255.255.255 up
route add -host 192.168.70.200 dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &>/dev/null

[root@web2 ~]# sh web2.sh
[root@web2 ~]# ifconfig		//查看虚拟端口
[root@web2 ~]# route -n 	//查看路由
kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.70.10   0.0.0.0         UG    100    0        0 ens33
192.168.70.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.70.200  0.0.0.0         255.255.255.255 UH    0      0        0 lo
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

여기에 사진 설명 삽입
여기에 사진 설명 삽입

5.3.3 LVS 스케줄러 구성

연결 유지 소프트웨어 패키지 가져 오기
여기에 사진 설명 삽입
1) 두 개의 LVS 스케줄러에서 다음과 동일한 구성을 수행합니다.

  • ip_vs 모듈로드
[root@lvs ~]# modprobe ip_vs     	  '//加载ip_vs模块'
[root@lvs ~]# cat /proc/net/ip_vs      '//查看ip_vs版本信息'
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  • ipvsadm 설치
[root@lvs ~]# yum -y install ipvsadm
  • 관련 환경 구성, 컴파일 및 설치
[root@lvs ~]# yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel
[root@lvs ~]# tar zxvf keepalived-2.0.13.tar.gz
[root@lvs ~]# cd keepalived-2.0.13/
[root@lvs keepalived-2.0.13]# ./configure --prefix=/
[root@lvs keepalived-2.0.13]# make && make install
[root@lvs keepalived-2.0.13]# cp keepalived/etc/init.d/keepalived /etc/init.d/
[root@lvs keepalived-2.0.13]# systemctl enable keepalived.service
Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.

2) LVS_1에서 구성

[root@lvs_1 ~]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
    
    
	router_id lvs_1
}
vrrp_instance vi_1 {
    
    
	state MASTER
	interface ens33
	virtual_router_id 51
	priority 110
	advert int 1
	authentication {
    
    
	 auth_type PASS
	 auth_pass 6666
	}
	virtual_ipaddress {
    
    
	 192.168.70.200
	}
}
virtual_server 192.168.70.200 80 {
    
    
	delay_loop 6
	lb_algo rr
	lb_kind DR
	persistence_timeout 6
	protocol TCP
real_server 192.168.70.11 80 {
    
    
	weight 1
	TCP_CHECK {
    
    
	 connect_port 80
	 connect_timeout 3
	 nb_get_retry 3
	 delay_before_retry 3
	}
}
real_server 192.168.70.12 80 {
    
    
	weight 1
	TCP_CHECK {
    
    
	 connect_port 80
	 connect_timeout 3
	 nb_get_retry 3
	 delay_before_retry 3
	}
}
}
[root@lvs_1 ~]# systemctl start keepalived.service
[root@lvs_1 ~]# ipaddr

여기에 사진 설명 삽입

[root@lvs_1 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.70.200:80 rr
  -> 192.168.70.11:80             Route   1      0          0         
  -> 192.168.70.12:80             Route   1      0          0 

3) LVS_2의 구성

[root@lvs_2 ~]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
    
    
        router_id lvs_2
}
vrrp_instance vi_1 {
    
    
        state BACKUP
        interface ens33
        virtual_router_id 51
        priority 105
......//其他的和LVS_1配置相同

[root@lvs_2 ~]# systemctl start keepalived.service
[root@lvs_2 ~]# systemctl status keepalived.service

여기에 사진 설명 삽입

[root@lvs_2 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.70.200:80 rr persistent 6
  -> 192.168.70.11:80             Route   1      0          0         
  -> 192.168.70.12:80             Route   1      0          0

5.4 검증 결과

  • 클라이언트에서 확인하고 브라우저에 액세스합니다.
    여기에 사진 설명 삽입
    여기에 사진 설명 삽입

  • 일정 세부 정보보기

여기에 사진 설명 삽입
여기에 사진 설명 삽입

  • 메인 서버가 실패 할 때
[root@lvs_1 ~]# systemctl stop keepalived.service

여기에 사진 설명 삽입

여기에 사진 설명 삽입

여기에 사진 설명 삽입
여기에 사진 설명 삽입

추천

출처blog.csdn.net/weixin_42449832/article/details/110940851