LVS + Keepalived 고 가용성 클러스터 (이론 + 실제 배포)

머리말

이 고도의 정보 기반 IT 시대에 기업의 생산 시스템, 비즈니스 운영, 영업 및 지원, 일상적인 관리는 컴퓨터 정보 및 서비스에 점점 더 의존하고 있으며, 이는 고 가용성 (HA) 기술 애플리케이션에 대한 수요를 크게 증가 시켰습니다. 지속적이고 중단없는 컴퓨터 시스템 또는 네트워크 서비스를 제공하기 위해.
Keepalived를 사용하여 IP 주소에 대한 장애 복구 및 LVS 고 가용성 클러스터의 핫 백업 애플리케이션을 포함한 이중 시스템 핫 백업을 구현합니다.

1. Keepalived 이중 시스템 핫 백업의 기본 사항

1.1 Keepalived의 개요 및 설치

1.1.1, Keepalived 핫 백업 방법

Keepalived는 Linux 서버의 다중 머신 핫 백업 기능을 실현하기 위해 VRRP 핫 백업 프로토콜을 채택합니다.

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

여러 라우터가 핫 백업 그룹을 형성하고 공유 가상 IP 주소를 통해 외부에 서비스를 제공합니다.

각 핫 백업 그룹에서 동시에 하나의 주 라우터 만 서비스를 제공하고 다른 라우터는 중복 상태입니다.

현재 온라인 라우터에 장애가 발생하면 다른 라우터가 설정된 우선 순위에 따라 가상 IP 주소를 자동으로 인수하고 서비스를 계속 제공합니다.
여기에 사진 설명 삽입

1.1.2, Keepalived 설치 및 서비스 제어

LVS 클러스터 환경에 적용 할 때 Keepalived 서비스

활성화 하려면 lipvsadm 관리 도구 YUM을 사용하여 Keepalived를 설치해야 합니다.

[root@localhost ~]# yum -y install keepalived ipvsadm

1.2. Keepalived를 사용하여 이중 시스템 핫 백업 달성

Keepalived는 다중 머신 핫 백업을 실현할 수 있으며 각 핫 스탠바이 그룹은 여러 서버를 가질 수 있으며 가장 일반적으로 사용되는 것은 이중 머신 핫 백업입니다.

이중 시스템 핫 백업의 페일 오버는 다양한 애플리케이션 서버에 적합한 가상 IP 주소의 드리프트로 실현됩니다.

이 배포는 웹 서비스를 기반으로 이중 머신 핫 백업을 구현합니다.
여기에 사진 설명 삽입

1.2.1, 메인 서버의 구성

Keepalievd 구성 디렉토리는 / etc / keepalievd /에 있습니다.
keepalievd.conf는 기본 구성 파일입니다.

[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak
[root@localhost keepalived]# vi keepalived.conf
global_defs{
    
    }区段指定全局参数
vrrp_instance实例名称{
    
    }区段指定VRRP热备参数
注释文字以“!”符号开头
目录samples/,提供了许多配置样例作为参考
常用配置选项
router_id HA_TEST_R1: 本路由器(服务器)的名称
vrrp_instance VI_1:定义VRRP热备实例
state MASTER:热备状态,MASTER表示主服务器
interface ens33:承载VIP地址的物理接口
virtual_router_id 1:虚拟路由器的ID号,每个热备组保持一致
priority 100:优先级,数值越大优先级越高
advert_int 1:通告间隔秒数(心跳频率)
auth_type PASS:认证类型
auth_pass 123456:密码字串
virtual_ipaddress{
    
    vip}:指定漂移地址(VIP),可以有多个,多个漂移地址以逗号分隔

구성에 문제가 없는지 확인하고 Keepalived 서비스를 시작하면 ip 명령을 통해 볼 수 있습니다.

[root@localhost keepalived]# systemctl start keepalived                  ####启动keepalived
[root@localhost keepalived]# ip addr show dev ens33                      ####查看主控制IP地址和漂移地址

1.2.2, 대기 서버의 구성

Keepalived 백업 서버의 구성은 세 가지 옵션에서 마스터 구성과
다릅니다. router_id : 무료 이름
상태로 설정 : BACKUP
우선 순위로 설정 : 마스터 서버보다 낮은 값
기타 옵션은 마스터와 동일합니다.

1.2.3, 이중 시스템 핫 백업 기능 테스트

이중 시스템 핫 백업의 효과 테스트
메인 머신과 백업 머신 모두 웹 서비스가 활성화되어 있으며 내용은 동일
합니다 메인 서버의 네트워크 카드를 연속적으로 비활성화 및 활성화하고 다음 테스트를 수행하십시오.

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

2. LVS + Keepalived 고 가용성 클러스터 실제 배포

2.1. 실험 환경

VMware 5 서버
IP 주소 계획 :
드리프트 주소 (VIP) : 192.168.100.100
기본 스케줄러 : 192.168.100.21
보조 스케줄러 : 192.168.100.20
웹 서버 1 : 192.168.100.22
웹 서버 2 : 192.168.100.23
스토리지 서버 : 192.168.100.100 100.24

2.2, 기본 스케줄러 구성

2.2.1, / proc 응답 매개 변수 조정

[

root@localhost network-scripts]# vi /etc/sysctl.conf 
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@localhost network-scripts]# sysctl -p
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0 

2.2.2, 연결 유지 매개 변수 조정

[root@localhost ~]# yum -y install keepalived ipvsadm
[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak
[root@localhost keepalived]# vi keepalived.conf
global_defs {
    
    
   router_id HA_TEST_R1
}
vrrp_instance VI_1 {
    
    
   state MASTER
   interface ens33
   virtual_router_id 1
   priority 100
   advert_int 1
   authentication {
    
    
      auth_type PASS
      auth_pass 123456
   }
   virtual_ipaddress {
    
    
      192.168.100.100
   }
}

virtual_server 192.168.100.100 80 {
    
    
    delay_loop 15
    lb_algo rr
    lb_kind DR
    persistence 60
    protocol TCP

    real_server 192.168.100.22 80 {
    
    
        weight 1
        TCP_CHECK {
    
    
	    connect_port 80
	    connect_timeout 3
	    nb_get_retry 3
	    delay_before_retry 4
	}
    }
    real_server 192.168.100.23 80 {
    
    
        weight 1
        TCP_CHECK {
    
    
	    connect_port 80
	    connect_timeout 3
	    nb_get_retry 3
	    delay_before_retry 4
	}
    }
}
[root@localhost keepalived]# systemctl start keepalived
[root@localhost keepalived]# ip addr show dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:11:0d:16 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.21/24 brd 192.168.100.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.100.100/32 brd 192.168.100.100 scope global noprefixroute ens33:0
       valid_lft forever preferred_lft forever
    inet6 fe80::3069:1a3d:774b:18f/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

2.3, 슬레이브 스케줄러 구성

2.3.1, / proc 응답 매개 변수 조정

[root@localhost network-scripts]# vi /etc/sysctl.conf 
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@localhost network-scripts]# sysctl -p     
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

2.3.2, 연결 유지 매개 변수 조정

[root@localhost ~]# yum -y install keepalived ipvsadm
[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak
[root@localhost keepalived]# vi keepalived.conf
global_defs {
    
    
   router_id HA_TEST_R2
}
vrrp_instance VI_1 {
    
    
   state BACKUP
   interface ens33
   virtual_router_id 1
   priority 99
   advert_int 1
   authentication {
    
    
      auth_type PASS
      auth_pass 123456
   }
   virtual_ipaddress {
    
    
      192.168.100.100
   }
}

virtual_server 192.168.100.100 80 {
    
    
    delay_loop 15
    lb_algo rr
    lb_kind DR
    persistence 60
    protocol TCP

    real_server 192.168.100.22 80 {
    
    
        weight 1
        TCP_CHECK {
    
    
	    connect_port 80
	    connect_timeout 3
	    nb_get_retry 3
	    delay_before_retry 4
	}
    }
    real_server 192.168.100.23 80 {
    
    
        weight 1
        TCP_CHECK {
    
    
	    connect_port 80
	    connect_timeout 3
	    nb_get_retry 3
	    delay_before_retry 4
	}
    }
}
[root@localhost keepalived]# systemctl start keepalived
[root@localhost keepalived]# ip addr show dev ens33 
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:48:b8:83 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.20/24 brd 192.168.100.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::e438:b533:985e:cf94/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

2.4, 스토리지 서버 구성

먼저 nfs-utils 및 rpcbind가 설치되어 있는지 확인하고 yum과 함께 설치되지 않은 경우 설치
후 두 서비스를 시작합니다.

[root@localhost ~]# systemctl start nfs
[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# mkdir /opt/51xit /opt/52xit
[root@localhost ~]# vi /etc/exports
/opt/51xit 192.168.100.0/24(rw,sync)
/opt/52xit 192.168.100.0/24(rw,sync)
[root@localhost ~]# systemctl restart rpcbind
[root@localhost ~]# systemctl restart nfs
[root@localhost ~]# systemctl enable nfs
[root@localhost ~]# systemctl enable rpcbind
[root@localhost ~]# echo "this is www.51xit.top" > /opt/51xit/index.html
[root@localhost ~]# echo "this is www.52xit.top" > /opt/52xit/index.html

2.5, 노드 서버 구성

2.5.1, 가상 IP 주소 (VIP) 구성

방화벽과 코어 보호가 모두 꺼져 있습니다. nfs-utils가 설치되어 있는지 확인하십시오.

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vi ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.100.100
NETMASK=255.255.255.255
ONBOOT=yes

[root@localhost network-scripts]# ifup lo:0
[root@localhost network-scripts]# ifconfig
        省略部分内容
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.100.100  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)
        省略部分内容
[root@localhost network-scripts]# vi /etc/rc.local 
/sbin/route add -host 192.168.100.100 dev lo:0

[root@localhost network-scripts]# route add -host 192.168.100.100 dev lo:0

2.5.2, / proc 응답 매개 변수 조정

[root@localhost network-scripts]# vi /etc/sysctl.conf 
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

[root@localhost network-scripts]# sysctl -p

이전에 구성된 두 노드 서버가 동일합니다.

2.5.3, httpd 마운트 테스트 페이지 설치

아래에 두 개의 노드 서버를 별도로 마운트하십시오.

[root@localhost ~]# showmount -e 192.168.100.24
Export list for 192.168.100.24:
/opt/52xit 192.168.100.0/24
/opt/51xit 192.168.100.0/24
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# mount 192.168.100.24:/opt/51xit /var/www/html/
[root@localhost ~]# vi /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Thu Aug  6 12:23:03 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=a1c935eb-f211-43a5-be35-2a9fef1f6a89 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/cdrom /mnt iso9660 defaults 0 0
192.168.100.24:/opt/51xit/ /var/www/html/ nfs defaults,_netdev 0 0
[root@localhost ~]# systemctl start httpd

로그인이 정상인지 테스트
여기에 사진 설명 삽입

[root@localhost ~]# showmount -e 192.168.100.24
Export list for 192.168.100.24:
/opt/52xit 192.168.100.0/24
/opt/51xit 192.168.100.0/24
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# mount 192.168.100.24:/opt/52xit /var/www/html/
[root@localhost ~]# vi /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Thu Aug  6 12:23:03 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=a1c935eb-f211-43a5-be35-2a9fef1f6a89 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/cdrom /mnt iso9660 defaults 0 0
192.168.100.24:/opt/52xit/ /var/www/html/ nfs defaults,_netdev 0 0
[root@localhost ~]# systemctl start httpd

로그인이 정상인지 테스트
여기에 사진 설명 삽입

2.6, 실험적 검증

2.6.1, 메인 스케줄러 테스트

패킷 캡처 도구를 열면 192.168.100.21의 마스터 스케줄러가 VRRP 패킷을 보내고 있음을 알 수
여기에 사진 설명 삽입
있습니다. 실제 시스템의 브라우저 192.168.100.100을
여기에 사진 설명 삽입
입력하고
여기에 사진 설명 삽입
마스터 스케줄러 를 새로 고치거나 다시 입력 할 때까지 잠시 기다리십시오 . ! !

2.6.2, 테스트 슬레이브 스케줄러

주 서버의 연결 유지 중지

[root@localhost keepalived]# systemctl stop keepalived

패킷 캡처 도구를 열면 192.168.100.20 슬레이브 스케줄러가 VRRP 패킷을 전송하고 있음을 알 수
여기에 사진 설명 삽입
있습니다. 실제 시스템의 브라우저 192.168.100.100을 입력
여기에 사진 설명 삽입
하고 새로 고침하거나 다시 입력
여기에 사진 설명 삽입
때까지 잠시 기다리 십시오. 스케줄러는 정상입니다! !

추천

출처blog.csdn.net/weixin_48191211/article/details/108749220