2019년 9월 9일 월요일

AWX(Ansible worker) 설치 방법




  1. AWX 설명 
    1. 기존  비정형 자동화 스크립트들 (shell,perl,python...etc)을 Automation에 방점을 찍어 기능의 모듈화(정형화), python 기반 + yml(야뮬,YAML Ain't Markup Language)을 적용하여 자동화를 지원하는 언어로써 Ansible이 있다.
      이 Ansible은 그저 언어 형태를 가지기만 할 뿐 실제 스크립팅(playbook제작)은 사용자 몫이며
      작은 단위의 실행에서는 CLI형태(Ad-hoc)로 작업이 가능하지만 Enterprise 영역에서
      사용자마다 권한 설정, SCM관리, 병령, 분산처리, 실행결과 로깅, 등등의 필수적인 기능은 제공되지 않으므로
      직접 구현해야 하는(배보다 배꼽이 크다)형태라 이 부분을 제공하는 제품으로 Ansible Tower라는 제품을 Redhat에서 제공(판매)한다. 
      (레드햇은 Ansible, Inc를 인수했다. ansible org 역시 메인 서포터는 레드햇)
      이 Ansible Tower의 OSS 버젼이 AWX(Ansible Worker)이다.
      OSS라면 기능의 차이는 어떨까 레드햇 의 OSS를 Enterprise로 전환 방법과 비지니스 모델은 거의 모든 제품에서 유사하다
      Software이므로 쉽게 설명하면 CentOS와 RHEL을 비교하면 되겠다
      두 개의 차이는 거의 없으나 CentOS는 빠르게 업데이트가 반영되는 반면 안정성이나 지원이 부족하고
      RHEL은 CentOS의 Stable버젼으로 판단되는 시점에서 별도 브렌치되어 개발(보안,특화기능추가) 배포 되므로 서브스크립션을 구입하면 지원과 업데이트 등이 가능해 진다.
      각설하면 기능은 다 되는 것으로 판단할 수 있다.(클러스터 등 몇몇 주요 기능은 2019년 Q1 현재 구현되지 않았다) 하지만 상용 버젼으로 패키징하는 단계를 거치지 못했기 때문에 여러모로 부족한 부분이 있다.
      (예를 들어 초기 만 해도 설치 스크립트가 없어서 yml을 직접 수정 작성해야 했다)
      안되면 게시판을 전전해야 하는 것은 OSS버젼을 쓰는자의 숙명?인듯 하다...... 
    2. 오해 하지 말아야 할것
      1. AWX는 platform만 제공한다.
        1. 말 그대로 AWX는 플렛폼이다. 템플릿팅을 지원하고 로그, 권한 관리등...이 글을 읽고는 바로 와 닿지 않으 수 있지만 기업에서 사용하기 위한 여러가지 기능을 별도의 개발없이 사용할 수 있도록 지원한다 
        2. 예를 들어 awx의 로그를 elastic search에 연동해서 kibana에서 조회하고 싶다면 AWX의 logging 기능에서 logstash로 직접 log를 발행해주는 기능을 사용할 수 있다.
        3. 다만 실제 제어를 위한 부분은 사용자가 개별 개발해야한다. 과거 티볼리나 HP 자동화 솔루션을 접해보거나 데모를 봤다면 "AWX가 알아서 뭔가해주는거아니야?" 하겠지만 어림 1도 없다. 모든 제어는 사용자가 yml형태의 code를 짜야한다.
        4. 물론 이 부분에서 ansible 갤럭시라는 이미 여러 케이스의 기능에 대한 샘플을 볼 수 있지만 내가 필요한 것 보다 과도하게 코드가 복잡하거나 여하간 수정하지 않고 그대로 쓰기에는 문제가 있다. 그래도 그것만 해도 대단한거다 쌩으로 다 짜려면 쓸대없는 시간이 많이 날아 간다...특히나 띄어쓰기와 오타....
        5. redhat 세일즈나 파트너사에서 이야기 하듯이 무지 쉽지않다 오해 하지말자, 다시한번 말하지만 알아서 해주는 부분은 "ansible을 개발하는 개발자가 기업에서 사용하기 위한 환경"에 대해서 도움을 주는것이다. 
        6. 말이 좀 그렇지만 그렇다고 뭐 엄청 어려운건 아니다 셈플 몇개 보고 해보면 금방한다. 오히려 개발해 본 적이 없거나 자신의 PC에 IDE 환경이 만들어져 있지 않다면 그런 환경을 구성하는데 시간을 더 보낼지도 모르겠다.  기존 개발을 위해 atom, eclipse,intelliJ 등의 IDE 환경이 구성되어 있고 git에 code pull/push 할 줄 아는 정도의 시본 스킬이 필요하다
        7. 특히나 시스템업무를 주로 하면서 vi가 지상최강의 editor라며(인정!) 일을 하시는 스크립트 장인분들은 초반 접근이 무지 귀찮을 것이다.  
        8. 세상이 변했다 devops건 SRE이건  장비쟁이가 코드모르거나  개발쟁이가 시스템 모르면 일하기 개 빡신세상이다. 공부해라 공부해서 남줘라
  2. AWX 설치
    1. Pre-Install 
      1. add docker repo
        awx는 docker기반으로의 배포만 지원한다. openshift와 kubernetes환경도 지원하지만 automation을 위해 그런 제품을 사거나 환경구성을 위한 공수를 들이기는 오버이지 싶다
        # yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
      2. Install docker
        OS에 docker를 구동하기 위한 환경을 구성한다 
        # yum -y install docker-ce
        # systemctl enable docker
        # systemctl start docker
      3. Install Ansible & pip & docker compose
        AWX를 쓰는것 자체에서는 필요없겠지만 ansible로 제어를 하려다보면 가끔 python module을 사용해야 할때가 있다. 이때를 위해서 pip를 설치한다.
        # yum -y install ansible python-pip
        # pip install --upgrade pip
        # pip install docker-compose --ignore-installed
      4. vmomi(VMware Managed Object Management Interface) - need for vMware control
        옵션이다  vmware를 자동화 하기 위한 모듈로 이런것도 설치해서 쓴다는 정도만 알고 있으면 되겠다. 필수사항이 아니다.
        #pip install pyvmomi

      5. pip module - some lib is need upgrade
        돌리다보면 ansible version마다 사용하는 python module이 버전이 낮은경우 문제들이 발생하는 경우가 있다.  특히나 url module등에서 많이 발생하는데 이런 경우 아래처럼 설치하거나 업그레이드 해서 회피 가능하다. 
        pip install requests urllib3 pyOpenSSL --force --upgrade
    2. official awx clone
      여기서 부터가 실제 AWX를 설치하는 부분이다.
      1. opensource awx not support HA
        AWX를 그냥 받아서 쓰면 SSL도 안되고 HA도 안된다 이 문서에서는 그 부분을 다루지 않는다....시간나면 써보겠지만.... 여하간 좀 찾아보면 할 수 있기는한데 ......(세상에 안되는게 어디있나  사람 갈아넣으면 다 되지....ㅠ.ㅠ)
        소스를 받아서 로컬에 저장한다  -b 는 해당 git 에서 특정버전을 지정한다. 지정하지 않으면 최신버전이 내려온다
        cd /tmp
        git clone -b 6.0.0 https://github.com/ansible/awx.git
    3. make install script
      1. file :  /tmp/awx/installer/install.sh
        그냥 손으로 돌려도 되지만 한방에 설치되리라는 보장이 없다 할때마다 타이핑 치기 귀찮아서 shell 파일 하나 만든다.
        cd /tmp/awx/installer
        vi /tmp/awx/installer/install.sh
        >>
        ansible-playbook -i ./inventory ./install.yml
        <<
        chmod 755 install.sh
    4. edit config 
      1. file : /tmp/awx/installer/inventory
        이건 취향에 따라 다른데  기본값으로 설치해도 된다. 그런경우 저장되는 위치가 여기저기 흩어지기 때문에 내 경우 /data 파티션을 하나 만들고 그 아래에 몰아 넣도록 했다
        dockerhub_version= 은 이걸 지정하지 않으면 최신 버전의 docker image르 받아오므로 위체 clone할때 지정한 버전과 같도록 해준다
        위에서 지정을 하지 않았으면 최신버전이므로 inventory에도 지정하지 않으면 최신 이미지를 받아온다 
        dockerhub_version=6.0.0
        postgres_data_dir=/data/pgdata
        docker_compose_dir=/data/awxcompose
        project_data_dir=/data/projects
      2. make folder
        AWX의 데이터는 docker로 구동되는 pgsql DB에 저장된다. 이 저장소가 docker container에 저장될 수 는 없으므로 local disk의 어딘가 저장되며 나의 경우 위에 inventory 설정에서 /data/pgdata 라고 지정했으므로 해당 폴더를 만들어준다.
        mkdir -p   /data/pgdata
        #other folder is auto create
    5. install  and check
      1. path : /tmp/awx/installer/install.sh
        이제 별 문제가 없다면 installer를 돌려준다.
        ansible log가 화면가득 떨어질것이고 문제가 있다면 에러를 내고 떨어질것인데...
        문제를 해결하고 중복해서 여러번 돌려도 걱정하지 않아도 된다
        설치 스크립트 자체가 ansible이기 때문에 여러번 수행해도 별 문제 없다.   돌리고 에러나면 처리하고 다시돌리고....또 돌리고...될때까지 돌리자 ㅋㅋㅋ
        cd /tmp/awx/installer
        ./install.sh
        .....
      2. connect awx (web browser)
        처음 설치되고나면 docker가 기동되고 DB에 기본 schema생성을 위해 1~2분 정도 소요된다. 물론 서버의 성능에 따라 천차만별이겠지만...
        아래 URL로 접속해서 뭔가 화면에 나오고 화살표가 빙글빙글돌고 있다면 속편하게 기다리자 
        1. http://${IP_ADDRESS}
        2. default ID/PASS : admin / password
    6. 기타
      1. 설치하고 아무것도 안나오고이상하다면 아래 명령어를 쳐서 docker가 구동중인지 정도는 확인할 수 있다
        1. #docker ps 
      2. docker는 5개가 구동된다.
        1. awx_web : 사용자 UI다 내부는 nginx로 되어 있다.
        2. awx_task : awx_web에서 수신받은 처리를 담당한다. python process로 확인된다.
        3. awx__rabbitmq : 클러스터 구성시 job을 공유하기 위해 사용된다. 다만 awx를 그냥 설치하면 cluster구성이 안되므로 큰 의미는 없다
        4. postgres : awx의 각종정보가 저장되는 RDB이다. pgsql 9.6으로 되어 있다. 10까지는 설치해서 외부 DB로 사용해 봤는데 문제 없이 사용가능하다 
        5. memcached : 걍 케쉬다
        6. # docker ps
          CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                                 NAMES
          5bdb52eadf2d        ansible/awx_task:6.0.0       "/tini -- /bin/sh -c…"   4 weeks ago         Up 2 weeks          8052/tcp                                              awx_task
          4d21608ce7be        ansible/awx_web:6.0.0        "/tini -- /bin/sh -c…"   4 weeks ago         Up 2 weeks          0.0.0.0:80->8052/tcp                                  awx_web
          ce130d98621a        ansible/awx_rabbitmq:3.7.4   "docker-entrypoint.s…"   4 weeks ago         Up 2 weeks          4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp   awx_rabbitmq
          74d79bde7cb9        postgres:9.6                 "docker-entrypoint.s…"   4 weeks ago         Up 2 weeks          5432/tcp                                              awx_postgres
          dd06ffef773d        memcached:alpine             "docker-entrypoint.s…"   4 weeks ago         Up 2 weeks          11211/tcp                                             awx_memcached
      3. log를 보고싶다면
        1. docker 명령어를 좀 배우면 된다.
          1. log : # docker logs -f awx_web 
      4. docker에 접속해서 설정을 보고싶다면 아래 명령어를 사용해서 container의 shell을 실행해서 접근을 할 수 있다.
        1. # docker exec -it awx_web /bin/bash 

2019년 5월 17일 금요일

V50 구입, 강화유리

내가 딴건 모르겠지만

V50으로 풀커버 줄때 알아봤어야 한다

이거 쓰레기임 뭔 씨벌 스치면떨어지고   떨어진다고 뭐라 했더니

뭐?  몇일 뒤야 고정이 된다고? 

지랄을 해요 씨벌 누가 액정보호붙이고 몇일동안 폰을 모셔놓냐?

이건 그냥 돈지랄임 절대 사지말것

두개 남은것도 그냥 버려버렸음


흠...
이글은 1+1 상품이라 블로그에 글을 적어서 URL을 보내야 해서 작성하는 글이 아니다 라고 할 수가 없다

V50을 와이프 내꺼 두개나 구입하고 필름이라고는 허접한 비닐같은것을 주길레....

좀 비싸도 전에도 사서 쓰던 네고퓨어고릴라를 찾아보니 V50이 벌써 나와있내

두개 주문해서 잘 붙여놨다

그냥 평판을 주문했는데 풀커버를 보내주었내.... 풀커버가 더 비싼데...
근데 난 풀커버 별롱 안좋아함

풀커버는 특성이 안쪽은 들뜬형태고 테두리로 접착을 하기 때문에 자주 들뜨고 문제는 대부분 커버와의 간섭이 극심하다는

풀커버를 들고 잠깐 고민하다가 붙여보기로함 ....이거 한장에 만원이 넘는다....조지면 눈물난다...



걱정했는데 다행이 잘 붙었다
라운드 처리를 하느라 좌우가 살짝 꺾어져있는데
이걸 잘 못붙이면 화면터치가 잘 안된다

접착시 커버를 씌운상태에서 잘 붙이고 글을 써봐서 터치가 문제가 없는지 확인하고 눌러주는게 좋겠다

풀커버라 접착이 테투리 위주로 붙기때문에 손톱으로 한쪽면을 고르게 들어올리면 잘 떨어지는편이다 (이거 시간지나서 잘 고정이 되어야 할터인데...)

오래오래 써보자

2019년 5월 9일 목요일

카렌스 튜닝 - 계획 (오일캐치,진공 부압증폭기-Intensifier)

2000년 카렌스 1.8 LPG

이런저런 자가수리를 하던차에 
얼마전에 엔진 헤드커버 개스킷을 갈면서 처음으로 뚜껑을 열어보았다.
생각보다 엄청? 깨끗했다는...



이걸 보고나니 한동안 살려서 더 다녀볼까 하는 생각이.... 노인학대가 심하다...

작년 초에 믹서를 뜯어서 싹 청소를 하고 조립을 했는데
조립할때 개스킷이 없어서 실리콘개스킷(고온용)을 발라버렸더니 다시 뜯을 엄두가 안난다.... 다 긁어내고 다시해야 하는데...
귀찮아도 개스킷 하나 구해볼껄....  후회하면 뭐하나 이미 발라놨는걸 ㅎㅎㅎ

여하간 이번에도 믹서를 보니 1년만에 꽤나 더러워져 있었다 
ISCV(Idle Speed Control Valve)도 뜯어보니 상태가 메롱메롱
예전에 하나 더 사놓은 스페어가 있어서 
뜯어서 세척하는게 아니라 
세척해 놓은 스페어를 끼우고 쓰던건 가져와서 세척 해 놓았다가 가끔 부들거리면 
믹서청소하면서 갈아버리는 방법으로 정비를 한다.

정상적으로 하려면 

베이퍼라이저(기화기)에 거품크리너 넣어서 청소 하고 
다음으로 믹서를 청소하는게 좋겠다  
순서를 바꾸면 베이퍼라이저 청소할때 녹은 카본이 믹서는 아니지만 서지탱크로 또 들어가니까...
믹서 청소할때 거품식 크리너액(MX-5000을 주로 씁니다.)을 뿌리면 서지탱크쪽도 어느정도 청소가 되니까  기화기 청소하고 믹서 하는식으로...

여하간 자꾸 더러워지고 가끔 믹서에 고여있는 엔진오일을 보면서 
블로바이가스를 잡으면  이거 청소가 쉽거나 좀 띠엄띠엄해도 부들거리는게 줄지 않을까 하는 생각을 해봤다.

그리고 하는김에 카렌스의 브레이크가 좀 느슨한 감이 있어서 얼마전에 진공호스를 싹 갈고나니 도둑공기가 잡혀서 반응이 좋아지기는 했는데 부압을 좀 올려보고 싶은 생각도 들었다 

그래서 카렌스 생에 한번도 없었던 튜닝이라는걸 해보기로 마음먹었다.

블로바이가스는 오일캐치통을 두 개 달아서  헤드커버에서 나오는 PCV라인과 브리더라인의 가스를 한번 잡아보고 

브레이크는 부압증폭기를 한번 적용해보자는 생각을 했다 

인터넷을 찾아보니.... 원.... 튜닝 파츠가 왜이리 비싸냐....

그래서 저렴이 튜닝을 하되 모비스정품을 최대한 이용해 보기로 했다 

오일캐치통은 트럭에사용하는 수분제거기를 사용하고 (품번 : 31920-66200)
부품점에서는 몇천원 안하지만 구하러 가기도 귀찮고 얼마 안해서 쇼핑몰에서 1만원 주고 2개 구입했다


부압증폭기는 NF소나타에 적용되는 부압증폭기를 사용하기로 했다(품번 : 59122-3K000)
위와 같은 이유로 7천원주고 인터넷에서 구입 
원래 H자 부품과 진공호스가 연결되어 있는데
분리하고 역류방지를 위해 모닝용 PCV벨브를 달아놓은 후에 찍은사진이다
일단 초기 설계(?)를 하고 이런저런 생각을 하다보니 오일캐치는 별다른 이슈가 없는데 
부압증폭기는 진공을 빨아들이는 OUT과 공기가 흡입되는 IN을 어떻게 구성할지 고민이 되고 그에 따른 진공압력 개선에 대한 정확한 내용을 알지 못했다

그래서 인터넷을 열심히 뒤져봤더니......

이거 달았다가 죽을뻔 했다는 사람도 있고(서지탱크 진공을 안쓰는 경유차에는 이 튜닝은 할 수 없다. 그리고 블로바이가스와 매연이 휘발유나 LPG에 비해 많아서 막힐 위험이 큰것 같다. 경유차 운전자라면  이런거 보지 말고  브레이크부스터라고 통을 달아주는걸 보시면 되겠다)
누구는 달아보니 한칸?  (저기요...게이지 달면 bar나 ha등 수치로 좀 써주면 안될까요...) 줄어든다는 글도 있고 
누구는 위아래 4개 구멍을 다 쓴 경우를 이야기 하고 
누구는 구입시 1개가 막혀 있는상태로 구성한 경우가 있고...

여하간 인터넷 보고는 정확하게 뭘 알 수가 없다.

그래서 직접 해보고 수치를 구해 보기로 생각했고 구성에 대한 몇개 case를 구상했다.

아래와 같이 

순정, CASE1, CASE2, CASE3 으로 구성을 해서 
진공값 개선이 얼마나 되는지 직접 확인을 해보고 선택을 해보려고 한다. 

덕분에 진공게이지도 하나 구입했다 







사실 그림을 만들다보니 

CASE2 가 가장 안전할 것 같고 
진공게이지는 브레이크부스터 앞에 달아놓아서 가끔 보면서 
압이 떨어지면 문제를 확인할 수 있도록 하면 될 것 같다 

하지만 가정일 뿐이고 

일단 부품들은 대충 수급이 되었으니 이번주 주말에 만지작 거리며 숫자를 뽑아보자 

참고로 앞에서 말 안한
가이드, 쫄대, 클램프, PCV밸브, 미니오픈필터, 닛플, 진공호스 3m 등등 다 해서 8만원 정도 구입했다
이만큼 질렀다.
언제 다 할지...결과는 언제 정리할 지 알 수 가 없다.


마지막으로 저번주에 찢어진 진공호스 교환과 믹서 등등 청소 후 카렌스 엔진룸 사진 한장 


2019년 3월 26일 화요일

DBCP2, Tomcat 8 이후 JDBC 설정

tomcat8 부터 내부 DB Pool이 DBCP2 이다. 
인터넷에서 DBCP가 기본이라는곳도 있는데...
스텍을 보면 확인된다.   DBCP2다 

        at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1532)

server.xml에 JDBC 등록 예 이다. 

<Resource 
    name="jdbc/dbaccess" 
    auth="Container" 
    type="javax.sql.DataSource"
      username="some_user" 
    password="{the password}" 
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://dbserver:3306/dbaccess?useFastDateParsing=false&amp;jdbcCompliantTruncation=false"
    maxTotal="500" 
    maxIdle="50"
    minIdle="50"
    initialSize="50"
    <!-- dbcp2, tomcat 8 부터 바뀜 getConnection후 대기시간 -->
    maxWaitMillis="5000"
    validationQuery="SELECT 1" 
    <!-- 가져올 때 체크 --> 
    testOnBorrow="false"
    <!-- eviction 체크 시간마다 Idle 체크 -->
    testWhileIdle="true"
    <!-- 반납할때 체크 -->
    testOnReturn="false"
    minEvictableIdleTimeMillis="30000" <!--이시간동안 사용안하면 제거 대상이 된다. -->
    numTestsPerEvictionRun="10" <!-- eviction시에 Pool을 lock을 잡고 이 수량만큼 체크 한다. 너무 적으면 전체 체크에 오래 걸리고 너무 길면 Pool이 lock되는 시간이 길어서 성능영향이 있을 수 있다. -->
    timeBetweenEvictionRunsMillis="30000" <!-- evction 주기를 설정한다. 이 주기와 한번에 점검하는수 그리고 전체 수의 상관관계를 잘 계산해야 F/W이 있는경우 안짤린다. -->
    <!-- SQL 수행시간을 제한 한다. connector의 timeout값과 맞추었다.
dbcp2, tomcat8 부터 removeAbandoned 가 두개로 분리 되었다 OnMaintenance는 앞서 Eviction시 Abandoned를 제거할지 지정한다. 
--> 
    removeAbandonedOnBorrow="true" 
    removeAbandonedOnMaintenance="true" 
     <!-- 20초 이상 돌고 있으면 잘라 -->
    removeAbandonedTimeout="20" 
    <!--제거내용이 로그로 남는다 초기에는 켜서 보다가 문제 없으면 꺼도 된다. 까끔 끊어진다고 크레임 있을 수 있으므로 켜놓고 운영하는게 좋다 -->
    logAbandoned="true"
   <!--SQL을 컴파일 하여 성능을 올리는 방법을 사용할지 선택한다. 대부분 문제 없지만 SQL이 동적으로 생성되는 일부  사이트의 경우 사용율이 떨어지고 Native mem 누수를 유발하기도 한다 문제 있으면 꺼보도록 하자 개선 사항이지 껐다고 장애 나지 않는다. --> 
    poolPreparedStatements="true"
    defaultTransactionIsolation="READ_COMMITTED"
  />


DB Pool이 꽉차면 Thread가 다 대기하는 상태가 되어 문제가 된다. 
아래 같은 메시지가 발생할 수 있다. 

All threads (512) are currently busy, waiting. Increase maxThreads (512) or check the servlet status