Haproxy + KeepAlived 부하 균형

소프트웨어 부하 균형 은 일반적으로 두 가지 방식 을 통 해 이 루어 진다. 운영 체제 의 소프트 부하 실현 과 제3자 응용 을 바탕 으로 하 는 소프트 부하 실현 이다.LVS 는 Linux 운영 체 제 를 바탕 으로 이 루어 진 소프트 부하 이 고 HAProxy 는 오픈 소스 이 며 세 번 째 응용 을 바탕 으로 이 루어 진 소프트 부하 이다.nginx 를 사용 하여 실현 할 수 있 지만 nginx 는 7 층 네트워크 에서 만 작 동 합 니 다.상세 하 게 는 무 금 이 술 을 끓 여 쓴 '소프트웨어 급 부하 이퀄 라이저 (LVS / HAProxy / Nginx) 의 특징 소개 와 대비' 라 는 글 을 참고 하 세 요. 간단 하고 상세 하 며 좋 습 니 다.
HAProxy 는 LVS 보다 사용 이 훨씬 간단 하고 기능 적 으로 도 풍부 하 다.현재 HAProxy 는 두 가지 주요 프 록 시 모드 를 지원 합 니 다. 'tcp' 즉 4 층 (대부분 메 일 서버, 내부 프로 토 콜 통신 서버 등에 사용) 과 7 층 (HTTP) 입 니 다.4 층 모드 에서 HAProxy 는 클 라 이언 트 와 서버 사이 에서 만 양 방향 트 래 픽 을 전송 합 니 다.7 층 모드 에서 HAProxy 는 프로 토 콜 을 분석 하고 허용, 거부, 교환, 추가, 수정 또는 삭제 요청 (request) 또는 응답 (response) 에서 지정 한 내용 을 통 해 프로 토 콜 을 제어 할 수 있 으 며 이러한 작업 은 특정 규칙 에 기반 해 야 합 니 다.
제 가 지금 HAProxy 를 사용 하 는 것 은 주로 다음 과 같은 장점 이 있 기 때 문 입 니 다. 여기 서 정리 하 겠 습 니 다.
1. 무료 오픈 소스, 안정성 도 매우 좋 습 니 다. 이것 은 제 가 만 든 작은 프로젝트 를 통 해 알 수 있 듯 이 Haproxy 만 잘 달 렸 고 안정성 은 LVS 와 비교 할 수 있 습 니 다.
2. 공식 문서 에 따 르 면 HAProxy 는 Myricom 's 10GbE NICs (Myri - 10G PCI - Express) 를 사용 하여 10Gbps - New benchmark of HAProxy at 10Gbps 를 가득 뛸 수 있 습 니 다. 이것 은 소프트웨어 급 부하 균형 으로서 놀 라 운 것 입 니 다.
3. HAProxy 는 MySQL, 메 일 또는 다른 비 웹 부하 균형 으로 사용 할 수 있 습 니 다. 저 희 는 MySQL (읽 기) 부하 균형 으로 자주 사용 합 니 다.
4. 강력 한 서버 상 태 를 감시 하 는 페이지 를 가지 고 실제 환경 에서 우 리 는 Nagios 와 결합 하여 메 일이 나 문자 경 보 를 하 는데 이것 도 제 가 이 를 매우 좋아 하 는 이유 중 하나 입 니 다.
5. HAProxy 는 가상 호스트 를 지원 합 니 다.
1. 실험 환경
    :CentOS release 5.9 (Final) x86 32 
HAProxy  :1.4.8
Keepalived  :1.2.4
 

MASTER_IP:192.168.207.130  
BACKUP_IP:192.168.207.131 
 
VIP:192.168.207.141  
WEB_1:192.168.207.129 80    
WEB_2:192.168.207.130 8080  
WEB_3:192.168.207.131 8080  

iptables 랑 selinux 다 꺼.
2. Haproxy 설치
cd /usr/local/src
mkdir haproxy
cd haproxy
wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.8.tar.gz
tar xf haproxy-1.4.8.tar.gz
cd haproxy-1.4.8
make TARGET=linux26;make install
#         make TARGET=linux26 --prefix=/usr/local/haproxy, haproxy       

haproxy 프로필 을 작성 합 니 다. 주종 은 모두 같 습 니 다. 이 프로필 을 사용 합 니 다.
useradd haproxy
vi /etc/haproxy.cfg

내용 은 다음 과 같다.
global
            log 127.0.0.1   local0       #     
            maxconn 65535  
            user haproxy
            group haproxy
            daemon                      #          
            nbproc 8                    #haproxy    
            pidfile /tmp/haproxy.pid

defaults
             log     127.0.0.1       local3
             mode   http
             option httplog
             option httpclose
             option dontlognull
             option forwardfor
             option redispatch
             retries 2
             maxconn 65535
             balance roundrobin                         #          ,    roundrobin    ,source   
             stats   uri     /web-status                #      url  ,   ,    http://ip  VIP/web-status      
             contimeout      5000
             clitimeout      50000
             srvtimeout      50000

listen  web_vip 0.0.0.0:80              #            VIP  ,keepalived       ,           ,    keepalived     ,          VIP,   ,  0.0.0.0 
            mode http
            option httplog
            log global
            option httpchk HEAD /index.html HTTP/1.0        #   ,     web         index.html  ,         ,      ,      129:80,130:8080,131:8080  ,    ,haproxy      web      。
            server web1  192.168.207.129:80   weight 5  check inter 2000 rise 2 fall 3
            server web2  192.168.207.130:8080 weight 5  check inter 2000 rise 2 fall 3
            server web3  192.168.207.131:8080 weight 5  check inter 2000 rise 2 fall 3

이것 좀 말씀 해 주세요. haproxy 설정 인 자 를 모 르 시 면 도착 할 수 있 습 니 다.http://cbonte.github.io/haproxy-dconv/configuration-1.4.html여기, 이곳
키 워드 를 검색 해 보면 설명 이 있 습 니 다. 아주 편리 합 니 다. 영어 일 뿐 입 니 다. 네, 알 아서 하 세 요.
여기 서 말씀 드 리자 면 HAProxy 의 알고리즘 도 점점 많아 지고 있 습 니 다. 구체 적 으로 다음 과 같은 8 가지 가 있 습 니 다.
① roundrobin 은 간단 한 폴 링 을 나타 낸다. 이것 은 말 할 것 도 없 이 부하 균형 이 기본적으로 갖 추어 진 것 이다.
② static - rr 는 가중치 에 따라 관심 을 가 지 는 것 을 권장 합 니 다.
③ leastconn 은 최소 접속 자가 먼저 처리 하고 관심 을 가 지 는 것 을 권장 합 니 다.
④ source, 요청 소스 IP 에 따라 이것 과 Nginx 의 IPhash 메커니즘 은 유사 합 니 다. 우 리 는 이 를 session 문 제 를 해결 하 는 방법 으로 삼 아 관심 을 가 지 는 것 을 권장 합 니 다.
⑤ ri, 요청 에 따 른 URI 표시;
⑥rl_param, 요청 한 URL 인자 'balance urlparam' requires an URL parameter name;
⑦ hdr (name) 는 HTTP 요청 헤더 에 따라 매번 HTTP 요청 을 잠 그 는 것 을 의미 합 니 다.
⑨ rdp - cookie (name) 는 쿠키 (name) 에 따라 TCP 요청 을 잠 그 고 해시 가 요청 할 때마다
웹 서버 가 모두 열 린 상태 에서 실행
haproxy -f /etc/haproxy.cfg

이것 은 이미 haproxy + 3 개의 웹 부하 균형 모드 입 니 다.
브 라 우 저 에 입력 가능http://haproxy_ip 주소 로 haproxy 의 운행 방식 을 느껴 보 세 요.
url 에 / web - status 를 더 하면 관리 인터페이스 에 접근 할 수 있 습 니 다.
3. keepalived 설치
wget http://www.keepalived.org/software/keepalived-1.2.4.tar.gz
tar -zxvf keepalived-1.2.4.tar.gz
cd keepalived-1.2.4
./configure --prefix=/usr/local/keepalived
make && make install

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir -p /etc/keepalived/
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf 
chmod +x /etc/init.d/keepalived

keepalived 프로필 쓰기
vi /etc/keepalived/keepalived.conf

내용 은 다음 과 같다.
# Configuration File for keepalived  

global_defs {
   router_id LVS_DEVEL
}


vrrp_script chk_http_port {
     script "/etc/keepalived/checkHaproxy.sh"
     interval 2
     weight 2
}

vrrp_instance VI_1 {
    state MASTER                # keepalived    BACKUP
    interface eth0
    virtual_router_id 51
    priority 104                # keepalived    100 ,        ,    0~255,        
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
        chk_http_port
    }
    virtual_ipaddress {
        192.168.207.141
    }
} 

몇 가지 주의 점:
1. / etc / keepalived / checkHaproxy. sh 는 실행 가능 한 권한 을 추가 해 야 합 니 다. 예 를 들 어 chmod + x / etc / keepalived / checkHaproxy. sh
2. 설정 파일 을 정규 로 쓰 십시오. 괄호 {}, 앞의 키워드 와 빈 칸 을 남 겨 두 십시오.
/ etc / keepalived / checkHaproxy. sh 스 크 립 트 를 작성 합 니 다. 다음 과 같 습 니 다.
#!/bin/bash
A=`ps -C haproxy --no-header | wc -l`
if [ $A -eq 0 ];then
        /usr/local/sbin/haproxy -f /etc/haproxy.cfg
        echo "Haproxy start"
        sleep 3
        if [ `ps -C haproxy --no-header | wc -l` -eq 0 ];then
                /etc/init.d/keepalived stop
                echo "keepalived stop"
        fi
fi

haproxy 가 시작 되 었 는 지 확인 하고 haproxy 프로 세 스 를 먼저 시작 하지 않 으 면 keepalived 프로 세 스 를 닫 습 니 다. 그 쪽 은 keepalived 에서 바로 메 인 프로 세 스 를 프로 그래 밍 하여 계속 작업 합 니 다.
이 각본 은 스스로 쓸 수 있어, 그래도 매우 간단 하 다.
4. 서비스 열기, 검증
사실 웹 서비스 3 개 를 켜 는 거 예요.
keepalived 서버 두 개 를 열 고 keepalived 는 haproxy 서 비 스 를 자동 으로 엽 니 다. / etc / keepalived / checkHaproxy. sh 가 있 기 때 문 입 니까? 하하
모두 열 고 방문http://192.168.207.141웹 서버 3 개 를 돌아 가면 서 방문 할 수 있 습 니 다.
그래서 서비스 가 열 리 면 주 keepalived 에서 실행 할 수 있 습 니 다.
ip addr

eth 0 에 VIP 가상 주소 가 하나 더 있 습 니 다.
keepalived 의 역할 을 알 아 보기 위해 서.
메 인 서버 의 keepalived 를 꺼 주세요.
/etc/init.d/keepalived stop

keepalived 의 / var / log / messages 로 그 를 보면 볼 수 있 습 니 다.
Apr 18 12:20:23 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE
Apr 18 12:20:24 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE
Apr 18 12:20:24 localhost Keepalived_vrrp: VRRP_Instance(VI_1) setting protocol VIPs.
Apr 18 12:20:24 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.207.141
Apr 18 12:20:24 localhost Keepalived_vrrp: Netlink reflector reports IP 192.168.207.141 added
Apr 18 12:20:24 localhost Keepalived_healthcheckers: Netlink reflector reports IP 192.168.207.141 added
Apr 18 12:20:24 localhost avahi-daemon[4208]: Registering new address record for 192.168.207.141 on eth0.

방문http://192.168.207.141아니면 정상 방문?
메 인 keepalived 서 비 스 를 열 면 볼 수 있 습 니 다.
Apr 18 12:20:29 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.207.141
Apr 18 12:21:07 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Received higher prio advert
Apr 18 12:21:07 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE
Apr 18 12:21:07 localhost Keepalived_vrrp: VRRP_Instance(VI_1) removing protocol VIPs.
Apr 18 12:21:07 localhost Keepalived_vrrp: Netlink reflector reports IP 192.168.207.141 removed
Apr 18 12:21:07 localhost Keepalived_healthcheckers: Netlink reflector reports IP 192.168.207.141 removed
Apr 18 12:21:07 localhost avahi-daemon[4208]: Withdrawing address record for 192.168.207.141 on eth0.

여기에 haproxy 관리 페이지 의 그림 과 작은 실험 을 첨부 합 니 다.
방문 하 다.http://192.168.207.141/web-status화면
백 엔 드 를 볼 수 있 는 3 개의 웹 서버 가 모두 좋 습 니 다.
이때 나 는 웹 3 의 웹 서 비 스 를 껐 다. 나 는 apache 를 사용 하기 때문에 service httpd stop 을 직접 실행 했다.
그리고 볼 수 있어 요.
알 겠 습 니 다. 그리고 방문 하 겠 습 니 다.http://192.168.207.141웹 의 index. html 페이지 도 나타 나 지 않 습 니 다.
ok, 끝 났 습 니 다. 친 측 실천, 성공 을 기원 합 니 다.

좋은 웹페이지 즐겨찾기