린아저씨의 잡학사전

Third Party 애플리케이션을 이용하여 JDBC로 Impala에 쿼리를 던지다 보니 특정 Impala Daemon에 커넥션이 집중되는 문제가 발생하였습니다. 

 

이를 해결하기 위하여 HAProxy를 이용하여 Impala에 대한 커넥션을 Load Balancing 해주었습니다.

 

이를 통해 얻게된 이점으로는 

 

1. Impala를 이용하는 애플리케이션들이 특정 Impala Daemon에 접근하지 않고 공통적인 Proxy 서버를 통해서 접근하게 됩니다.

 

2. Coordinator Only로 지정된 Impala Daemon들에게만 Least connection 또는 Round robin 방식으로 커넥션을 분배할 수 있습니다.

 

3. 특정 Impala Daemon에게 과도하게 부하가 걸리는 것을 방지할 수 있습니다.

 

NOTE:

Load Balancing 및 HA에 대한 대부분의 고려 사항은 Impala Daemon에 적용됩니다. Statestored 및 Catalog Daemon에는 HA에 대한 특별한 요구 사항이 없습니다. 데몬의 문제점으로 인해 데이터가 손실되지 않기 때문입니다. 특정 호스트의 중단으로 인해 해당 데몬을 사용할 수 없으면 Impala 서비스를 중지하고 Impala StateStore 및 Impala Catalog 서버 역할을 삭제하고 다른 호스트에 역할을 추가 한 다음 Impala 서비스를 다시 시작할 수 있습니다.

 


 

일반적인 절차

 

1. Impala 요청을 중계하기 위해 Load Balancer가 수신 대기하는 포트를 설정하십시오.

2. Load Balancer 알고리즘 옵션에 대한 알고리즘 선택을 참조하십시오.

3. Kerberos 클러스터의 경우 Kerberos를 사용하는 클러스터에 대한 특별 프록시 고려 사항의 지침을 따르십시오.

 

4. Hue 또는 JDBC 기반 응용 프로그램을 사용하는 경우 impala-shell 명령이 포트 21000을 통해 연결하는 동안 이러한 클라이언트 응용 프로그램이 포트 21050을 통해 연결되기 때문에 일반적으로 포트 21000과 21050 모두에 대한 Load balancer를 설정합니다. Load balancer 중인 연결 유형에 따라 포트 21000, 21050 또는 다른 값을 사용하십시오.

 

5. Cloudera Manager에 의해 관리되는 시스템의 경우, Cloudera Manager Web Console의 Impala > Configuration > Imapala Daemon Default Group 페이지에서 Impala Daemons Load Balancer 필드의 값을 지정하십시오. host:port 형식으로 Load Balancer 주소를 지정하십시오. 이 설정을 사용하면 Cloudera Manager가 Impala 관련 작업을 proxy server를 통해 라우팅할 수 있습니다.


 

1. Proxy 서버로 사용할 서버에 HAproxy를 설치하여 줍니다.

yum install -y haproxy

2. /etc/haproxy 디렉터리에 haproxy.cfg 파일을 수정하여 줍니다.

vi /etc/haproxy/haproxy.cfg


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

global
    # To have these messages end up in /var/log/haproxy.log you will
    # need to:
    #
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    #
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    #
    #    local2.*                       /var/log/haproxy.log
    #
    log         127.0.0.1 local0
    log         127.0.0.1 local1 notice
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    # turn on stats unix socket
    #stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#
# You might need to adjust timing values to prevent timeouts.
#
# The timeout values should be dependant on how you use the cluster
# and how long your queries run.
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    maxconn                 3000
    timeout connect 5000
    timeout client 3600s
    timeout server 3600s

#
# This sets up the admin page for HA Proxy at port 25002.
#
listen stats :25002
    balance
    mode http
    stats enable
    stats auth username:password

# This is the setup for Impala. Impala client connect to load_balancer_host:25003.
# HAProxy will balance connections among the list of servers listed below.
# The list of Impalad is listening at port 21000 for beeswax (impala-shell) or original ODBC driver.
# For JDBC or ODBC version 2.x driver, use port 21050 instead of 21000.
listen impala :25003
    mode tcp
    option tcplog
    balance leastconn

    server symbolic_name_1 impala-host-1.example.com:21000 check
    server symbolic_name_2 impala-host-2.example.com:21000 check
    server symbolic_name_3 impala-host-3.example.com:21000 check
    server symbolic_name_4 impala-host-4.example.com:21000 check

# Setup for Hue or other JDBC-enabled applications.
# In particular, Hue requires sticky sessions.
# The application connects to load_balancer_host:21051, and HAProxy balances
# connections to the associated hosts, where Impala listens for JDBC
# requests on port 21050.
listen impalajdbc :21051
    mode tcp
    option tcplog
    balance source
    server symbolic_name_5 impala-host-1.example.com:21050 check
    server symbolic_name_6 impala-host-2.example.com:21050 check
    server symbolic_name_7 impala-host-3.example.com:21050 check
    server symbolic_name_8 impala-host-4.example.com:21050 check

 

Important:

Hue는 HAProxy가 도달 할 수없는 Impalad 서버를 감지하고 장애 복구가 성공적으로 이루어질 수 있도록하기 위해 위 파일의 각 행 끝에 체크 옵션이 필요합니다. TCP 검사가 없으면 Hue가 연결하려고하는 Impala 데몬이 다운되었을 때 오류가 발생할 수 있습니다.

 

구성 시 주요 고려 사항

  • Impala 연결 요청은 TCP 모드 이기 때문에 client timeout / server timeout 값을 동일하게 설정합니다.

  • Long-query를 수용하기 위해 client timeout / server timeout을 쿼리 특성 또는 SLA에 맞게 긴 값으로 설정합니다.

  • Impala-shell을 활용한 스크립트를 사용하는 경우, 연결이 쿼리 수행 후 정상적으로 종료하기 위해 "Connect > 쿼리 수행 > quit"와 같이 절차에 준수하십시오.

  • 업무 속성에 맞도록 balance 옵션을 올바르게 설정하십시오.

  • 보다 자세한 정보는 HAProxy 메뉴얼을 참조하십시오.

 


Cloudera Manager 설정 사항

 

1. Impala 설정

 

2. Hue 설정

 

☞ 이 글이 도움이 되셨다면 광고 클릭을 부탁드립니다 :) 

 

 



출처

https://www.cloudera.com/documentation/enterprise/latest/topics/impala_proxy.html

https://imp51.tistory.com/entry/Using-Impala-through-a-Proxy-for-High-Availability [Slow but Surely!]

https://my.cloudera.com/knowledge/Impala-Instance-Fails--Configuring-Hue-to-Connect-to-Impala?id=72753

 

Cloudera Support - Knowledge Base

MyCloudera is currently optimized for desktop computers only.

my.cloudera.com

https://my.cloudera.com/knowledge/HAProxy--Load-Balancing-Impala-JDBC?id=72929

 

Cloudera Support - Knowledge Base

MyCloudera is currently optimized for desktop computers only.

my.cloudera.com

공유하기

facebook twitter kakaoTalk kakaostory naver band