Apache KNOX 같은 것을 haproxy를 사용하여 Impala로 시도

Apache KNOX란?



게이트웨이가 주요 역할. 내부의 처리가 kerberos 인증등을 사용하고 있었다고 해도 숨기고 의식하지 않고 제공할 수 있다고 하는 것. URL 베이스로 배분도 할 수 있으므로, 포트 번호가 난립하는 시스템에는 단일의 액세스 포인트를 준비할 수 있으므로 최고.
라는 것.

HAproxy를 사용하면 비슷한 일을 할 수 있습니다.



HDP는 표준으로 KNOX 넣을 수 있게 되어 있지만, CDH는 그렇게 되어 있지 않기 때문에, 스스로 준비한다.
CDH(클라우델라사)적으로는 따로, 다른 컴퍼넌트 사용해 같은 것 할 수 있어. 라는 것이 말입니다.

그래서 이번에는 그 말을 시험해 보았다.

환경



centos7 CDH 6.2 keberized hdfs openldap

haproxy 준비



yum install haproxy
소스 파일 가져와 빌드해도 OK. 단지 UNIT 팔을 자작으로 만들어야 하기 때문에,
yum install 후에 빌드, 바이너리 교체가 좋을지도.

/etc/haproxy/haproxy.cnf
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
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 local2
    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
#---------------------------------------------------------------------
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
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  main *:21111
#    acl url_static       path_beg       -i /static /images /javascript /stylesheets
#    acl url_static       path_end       -i .jpg .gif .png .css .js

#    use_backend static          if url_static
#    default_backend             app

#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
#backend static
#    balance     roundrobin
#    server      static 127.0.0.1:4331 check

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
#backend app
#    balance     roundrobin
#    server  app1 127.0.0.1:21000 check
#    server  app2 127.0.0.1:5002 check
#    server  app3 127.0.0.1:5003 check
#   server  app4 127.0.0.1:5004 check

listen impala :21111
    mode tcp
    option tcplog
    balance leastconn

    server impala1 localhost.localdomain:21000 check


impalad는 21000번으로 기동하고 있으므로, 그 번호를 21111에 매핑.
덧붙여서 비왁스용으로 2105?가 비어 있습니다만, 주로 hue로부터의 접속에 이용되는 포트입니다.

service haproxy restart로 시작.

haproxy는 syslog이므로 rsyslog의 설정을 아래와 같이 변경하여 systemctl restart rsyslog에서/var/log/haproxy.log에 로그를 준다.

/etc/rsyslog.conf
(差分のみ)
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
$AllowedSender UDP, 127.0.0.1
*.info;mail.none;authpriv.none;cron.none,local2.none  /var/log/messages
local2.*                       /var/log/haproxy.log

keytab



cdh를 사용하면 자동으로 keytab을 생성합니다.
프록시를 통해 액세스하려면 imapald의 keytab과 프록시의 keytab을 ktutil로 병합해야합니다.



Impala Daemons Load Balancer를 다음과 같이 설정하면 CDH가 마음대로 keytab을 병합합니다.



※localhost.localcomain과 일부러 하고 있습니다.

설정 전
[root@localhost 67-impala-IMPALAD]# klist -kt impala.keytab 
Keytab name: FILE:impala.keytab
KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
   2 05/27/2019 20:51:46 impala/[email protected]
   2 05/27/2019 20:51:46 impala/[email protected]
   2 05/27/2019 20:51:46 impala/[email protected]
   2 05/27/2019 20:51:46 impala/[email protected]
   2 05/27/2019 20:51:46 impala/[email protected]
   2 05/27/2019 20:51:46 impala/[email protected]
   2 05/27/2019 20:51:46 impala/[email protected]
   2 05/27/2019 20:51:46 impala/[email protected]

프록시 설정 후
localhost.localcomain이 추가되었습니다.
[root@localhost 70-impala-IMPALAD]# klist -kt impala.keytab 
Keytab name: FILE:impala.keytab
KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
   2 05/27/2019 21:00:00 impala/[email protected]
   2 05/27/2019 21:00:00 impala/[email protected]
   2 05/27/2019 21:00:00 impala/[email protected]
   2 05/27/2019 21:00:00 impala/[email protected]
   2 05/27/2019 21:00:00 impala/[email protected]
   2 05/27/2019 21:00:00 impala/[email protected]
   2 05/27/2019 21:00:00 impala/[email protected]
   2 05/27/2019 21:00:00 impala/[email protected]
   2 05/27/2019 21:00:00 impala/[email protected]
   2 05/27/2019 21:00:00 impala/[email protected]
   2 05/27/2019 21:00:00 impala/[email protected]
   2 05/27/2019 21:00:00 impala/[email protected]
   2 05/27/2019 21:00:00 impala/[email protected]
   2 05/27/2019 21:00:00 impala/[email protected]
   2 05/27/2019 21:00:00 impala/[email protected]
   2 05/27/2019 21:00:00 impala/[email protected]

당연하지만, 이것은 연결할 수 없으므로 제대로 localhost.localcomain으로 수정하여 impala 서비스와 haproxy를 다시 시작합니다.

막상 연결



[root@localhost 70-impala-IMPALAD]# kinit zako/localhost.localdomain
Password for zako/[email protected]: 

[root@localhost 70-impala-IMPALAD]# impala-shell -i localhost.localdomain:21111 -d default -k
Starting Impala Shell using Kerberos authentication
Using service name 'impala'
Opened TCP connection to localhost.localdomain:21111
Connected to localhost.localdomain:21111
Server version: impalad version 3.2.0-cdh6.2.0 RELEASE (build edc19942b4debdbfd485fbd26098eef435003f5d)
Query: use `default`
***********************************************************************************
Welcome to the Impala shell.
(Impala Shell v3.2.0-cdh6.2.0 (edc1994) built on Thu Mar 14 00:14:35 PDT 2019)

Want to know what version of Impala you're connected to? Run the VERSION command to
find out!
***********************************************************************************
Query: use `default`
[localhost.localdomain:21111] default> show databases;
Query: show databases
+---------+-----------------------+
| name    | comment               |
+---------+-----------------------+
| default | Default Hive database |
+---------+-----------------------+
Fetched 1 row(s) in 0.26s
[localhost.localdomain:21111] default> 


이제 21000 대신 21111로 연결할 수 있습니다.

결론



KNOX는 좀 더 다양한 것을 해주지만, 열심히 하면 haproxy가 되어 ELB가 될 수 있다.
수가 많아지면 힘들지도 모르지만, 디폴트로 이런 것 같은 기능을 가지고 있는 에코시스템은 많기 때문에(hive + zookeeper라든지), 국소적으로 활약시키는 것이 좋을 것 같은 생각이 들었다.

KNOX를 알기보다는 HAproxy나 syslog의 공부가 되었다.

좋은 웹페이지 즐겨찾기