728x90
반응형

  이하의 정보는 Ubuntu VM상에서 OpenStack의 개발 버전인 DevStack을 설치하는 방법을 다룹니다.
 본 정보는 이하의 웹 페이지의 내용을 기반으로 이동하여 작성되었을을 밝히며 문제가 될 경우에는 삭제될 수 있습니다.

https://ubuntu.com/openstack/install

 

Install OpenStack yourself on Ubuntu. | Ubuntu

A step-by-step guide to OpenStack installation. You only need your workstation to get started.

ubuntu.com

단일 노드 VM에 MicroStack 설치하기

MicroStack은 OpenStack의 단일 구현체로서 쉽게 설치하고 관리하기 쉽게 만들어 줍니다. MicroStack 홈페이지에서는 OpenStack의 모든것을 제공해 주지는 못하지만 일반적인 테스트나 개발을 위해서는 사용할 수 있으며 특히 Kubernetes와 함께 사용하기에 적합한 구현체라고 소개 하고 있습니다. 현재의 MicroStack은 베타 버전이므로 테스트 용도로만 사용하는 것이 적합하며 실제 서비스에 이를 이용하는 것은 지양하기 바란다. 

 PS. OpenStack의 테스트 환경으로 DevStack과 MicroStack 두가지를 사용할 수 있다. 이는 사용자의 선택의 문제이다. 다만 DevStack은 릴리즈 된지 오래된 관계로 다양한 문제가 있으며 실제 OpenStack을 배포하는 용도로도 사용할 수 있다고 한다.

설치

Microstack은 snap 명령어를 이용하여 간편하게 설치 가능하다.

Requirements:
Ubuntu 18.04 LTS or Ubuntu 20.04 LTS 가 실행되고 있는 8GB 이상의 메모리와 100GB의 디스크 공간을 가진 다중 코어 VM이나 물리 서버에서 동작 한다.

먼저 snap을 베타 채널로 해서 microstack을 설치한다.. (snap은 ubuntu의 패키지 설치기로 기본으로 설치되어 있을것이다. 설치 되어 있지 않다면 검색을 통해서 수동으로 설치 한다.)

sudo snap install microstack --beta

snap에 등록된 microstack의 버전을 확인한다.

snap list microstack
Name        Version  Rev  Tracking     Publisher   Notes
microstack  ussuri   245  latest/beta  canonical✓  -

 

 실제 microstack의 설치는 아래의 명령어를 통해서 간략하게 초기화 하는것으로 설치가 완료 된다. 모든 설정은 자동으로 구성된다.

sudo microstack init --auto --control


% 위와 같이 설치할 경우 cinder의 디바이스 할당이 설정되지 않아서 볼륨생성이 되지 않는다. 이럴 경우 다른 이미지를 제대로 올릴수 없기 때문에 아래와 같이 설치한다.

sudo snap install microstack --devmode --beta

sudo microstack init --auto --control --setup-loop-based-cinder-lvm-backend \
  --loop-device-file-size 50

sudo tee /var/snap/microstack/common/etc/cinder/cinder.conf.d/glance.conf <<EOF
[DEFAULT]
glance_ca_certificates_file = /var/snap/microstack/common/etc/ssl/certs/cacert.pem
EOF

sudo snap restart microstack.cinder-{uwsgi,scheduler,volume}

  위의 명령어들은 베타와 개발 모드로 설치하고 초기화 할때 Cinder Loop Device 를 지원하고 50GB를 할당하도록 설정한다.

 

Instance의 실행

  이제 설치가 되었으므로 간단하게 microstack의 Instance를 만들어 보겠다. 조건은 아래와 같다.

  • keypair ‘microstack’
  • flavor ‘m1.tiny’
  • floating IP address on subnet ‘10.20.20.0/24’

To create an instance named ‘test’ based on the ‘cirros’ image:

microstack launch cirros -n test

The microstack launch command also supports arguments --key, --flavor, --image, and --net-id, in which case you will need to create objects using the standard client if non-default values are desired.

실제 만들어진 Instance를 UI에서 조회하면 아래와 같이 생성되어 있다.

 

 위와 같은 경우 아래의 명령어를 통해서 해당 인스턴스에 접속할 수 있다.

Access the instance using the private SSH key associated with the default keypair:

ssh -i /home/ubuntu/snap/microstack/common/.ssh/id_microstack cirros@10.20.20.199
sokoban@k8smaster1:~/snap/microstack/common/.ssh$ ssh -i /home/sokoban/snap/microstack/common/.ssh/id_microstack cirros@10.20.20.49

The authenticity of host '10.20.20.49 (10.20.20.49)' can't be established.
ECDSA key fingerprint is SHA256:0127VyiAjGhpTU5E+Zl8CEWoA6FJcPMc/1a2pkWqAxU.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.20.20.49' (ECDSA) to the list of known hosts.
sign_and_send_pubkey: no mutual signature supported
cirros@10.20.20.49's password:

위와 같이 패스워드 입력창이 나올 경우에는 아래와 같이 입력하면 접속할 수 있다. ( -o "PubkeyAcceptedKeyTypes +ssh-rsa" 추가)

sokoban@k8smaster1:~/snap/microstack/common/.ssh$ ssh -o "PubkeyAcceptedKeyTypes +ssh-rsa" -i /home/sokoban/snap/microstack/common/.ssh/id_microstack cirros@10.20.20.49
$

OpenStack 대시보드에 접속 하기

위의 설치 과정을 완료 하였다면 이제 OpenStack의 대시보드 UI에 접속할 수 있다.

https://10.20.20.1

사용자 이름은 'admin' 이고 패스워드는 아래의 명령어를 CLI에 입력하면 패스워드를 얻을수 있다.

sudo snap get microstack config.credentials.keystone-password
OAEHxLgCBz7Wz4usvolAAt61TrDUz6zz

 

이미지 추가하기

 기본으로 Microstack을 설치하면 CirrOS라는 리눅스 배포판이 포함되어 있는 다만 이는 최소화된 리눅스 배포판으로 실제 구성을 테스트 하기에는 부족함이 있다. 그러므로 이미지를 추가해 준다.

  https://docs.openstack.org/image-guide/obtain-images.html

 

Get images — Virtual Machine Image Guide documentation

Get images The simplest way to obtain a virtual machine image that works with OpenStack is to download one that someone else has already created. Most of the images contain the cloud-init package to support the SSH key pair and user data injection. Because

docs.openstack.org

  이미지는 위의 사이트에서 찾을수 있으므로 본인이 원하는 이미지로 다운로드 한다.
이번 자료에서는 CentOS 8버전을 사용하고자 한다. 이미지 크기가 가장 작은 걸로 선택 하여 다운로드 해본다.

sokoban@k8smaster1:~$ wget https://cloud.centos.org/centos/8/x86_64/images/CentOS-8-GenericCloud-8.1.1911-20200113.3.x86_64.qcow2

다음으로 이미지를 생성한다.

root@k8smaster1:/home/sokoban# microstack.openstack image create --container-format bare --disk-format qcow2 --file CentOS-8-GenericCloud-8.1.1911-20200113.3.x86_64.qcow2  CentOS8.1

이미지 생성 에러 처리

[Errno 13] Permission denied: 'CentOS-8-GenericCloud-8.1.1911-20200113.3.x86_64.qcow2'

위와 같은 이미지가 나올경우에는 microstack에서 이미지 파일을 읽을수 있는 위치에 넣어 주어야 한다.
다운로드 받은 이미지 파일을 /var/snap/microstack/common/images 로 이동한 다음에 명령을 내려 준다. 

위와 같이 생성된 이미지를 인스턴스로 띄울때는 아래의 명령어로 띄울수 있다.

microstack launch CentOS8.1 -n test2 -f ma.small

 

이미지의 기본 지식

QCOW2 형식의 가상 머신 스토리지

QCOW2는 가상 머신 디스크 이미지의 저장 형식입니다. QCOW는 QEMU copy on write의 약자입니다. QCOW2 형식은 논리 블록과 물리적인 블록 사이에 매핑을 추가하여 가상 계층으로부터 물리적인 스토리지 레이어를 분리합니다. 각 논리 블록은 물리적 오프셋에 매핑되어서 스토리지 초과 할당 및 가상 머신 스냅샷을 사용 가능하게 하며, 여기서 각 QCOW 볼륨은 기반 디스크 이미지의 변경 내용만 보여줍니다.
초기 매핑을 통해 모든 논리 블록이 지원 파일 또는 지원 볼륨에 있는 오프셋과 연결됩니다. 가상 머신이 스냅샷 후 QCOW2 볼륨에 데이터를 쓰면 지원 볼륨에서 관련 블록을 읽고 새 정보로 수정한 후 새 스냅샷 QCOW2 볼륨에 쓰기합니다. 이를 통해 맵은 새 장소로 연결되도록 업데이트됩니다.

RAW

RAW 스토리지 형식으로 저장된 가상 머신 디스크 이미지에는 형식이 적용되지 않는다는 점에서 QCOW2보다 성능면에서 우월합니다. RAW 형식으로 저장된 디스크 이미지를 사용하여 가상 머신 데이터 작업 시 호스트에서 추가적인 작업을 할 필요가 없습니다. 가상 머신이 가상 디스크에서 주어진 오프셋에 데이터를 쓰면 이러한 I/O는 지원 파일 또는 논리 볼륨의 같은 오프셋에 쓰기됩니다.
Raw 형식의 경우 저장 장치 어레이(storage array)에서 외부에서 관리되는 씬 프로비저닝된 LUN을 사용하지 않는 한 정의된 이미지의 전체 공간이 사전 할당되어야 합니다.

https://access.redhat.com/documentation/ko-kr/red_hat_virtualization/4.0/html/technical_reference/qcow2

기타

Microstack 설정 파일

 만약 설정 파일을 변경해야 할 일이 있다면 Microstack 설치이후 설정 파일은 아래의 위치에서 찾을수 있다.

/snap/microstack/245/etc

Microstack 재시작 하기

재시작이 필요한 경우 아래와 같은 명령어를 이용하여 재시작 할 수 있다.

systemctl restart snap.microstack.nova-compute.service

 

Microstack 삭제하기

삭제가 필요한 경우 아래의 명령어로 삭제 할 수 있다.

sudo snap remove microstack

 

Microstack Error 들 모음

1.  Unable to create a new session key. It is likely that the cache is unavailable. 에러

  OpenStack중에서 memcached에서 발생하는 에러이다. 발생하면 VM을 재시작 하는것으로 해결은 가능하나 근본적인 해결책은 아님
VM의 suspend 모드를 자주 사용할 경우 세션키의 문제로 발생함

 

Error: Failed to perform requested operation on instance "test2", the instance has an error status: Please try again later [Error: Build of instance d699f986-24f3-485d-8063-ef46b64736d2 aborted: Volume cbad7ea8-a247-4c75-bf92-58eccfb10cb8 did not finish being created even after we waited 28 seconds or 10 attempts. And its status is error.].

Error: Failed to perform requested operation on instance "test2", the instance has an error status: Please try again later [Error: Build of instance 8ee77d2f-6341-4251-86eb-86683816594b aborted: Volume 527b54e7-9de0-47e6-8adc-0a1ab51cf14c did not finish being created even after we waited 3 seconds or 2 attempts. And its status is error.].

https://discourse.charmhub.io/t/microstack-invalid-image-identifier-or-unable-to-access-requested-image-http-400/5643

 

Microstack - Invalid image identifier or unable to access requested image. (HTTP 400)

I can create volumes and virtual machines if i leave the create new volume box unticked, then i create a volume and map it manually and it works fine. But if i try and create a volume from an image it errors out giving me - Invalid image identifier or unab

discourse.charmhub.io

 

참고 사이트

DevStack의 설치는 아래를 참고한다.

https://docs.openstack.org/devstack/latest/

 

DevStack — DevStack documentation

DevStack DevStack is a series of extensible scripts used to quickly bring up a complete OpenStack environment based on the latest versions of everything from git master. It is used interactively as a development environment and as the basis for much of the

docs.openstack.org

https://www.youtube.com/watch?v=0ds2Bs9CZss

https://discoposse.com/2014/01/26/openstack-havana-all-in-one-lab-on-vmware-workstation/

 

OpenStack Havana All-in-One lab on VMware Workstation | DiscoPosse.com

With all of the popularity of OpenStack in general, and specifically with my other posts on deploying the Rackspace Private Cloud lab on VMware Workstation, I think it’s time for me to update with a new lab build for everyone. This lab build process will

discoposse.com

https://delightwook.tistory.com/40

 

오픈스택 연구하기 : Devstack으로 오픈스택 빠르게 설치하기

오픈스택 연구하기 : Devstack으로 오픈스택 빠르게 설치하기 안녕하세요 김민욱입니다. 이번 포스팅에서는 Devstack을 이용해서 오픈스택을 빠르게 구축해보겠습니다. Devstack은 오픈스택을 설치하

delightwook.tistory.com

https://opendev.org/x/microstack

 

microstack

OpenStack in a snap!

opendev.org

 

728x90
반응형
728x90
반응형

  윈도우즈와 맥을 사용하는 입장에서 키보드와 마우스를 번갈아 가면서 사용하는건 여간 귀찮은 일이 아닐수 없다. 특히 데스크탑이라면 여러개의 키보드와 마우스가 어지럽게 책상에 놓여질수 있을것이다. 물론 KVM을 사용하는게 가장 좋은 일이지만 KVM이 없다면 키보드 마우스 공유 프로그램을 사용하는것도 한가지 방법이다.

 먼저 공유 프로그램을 사용하기 위해서는 동일 인터넷 환경에 PC가 위치하는게 가장 좋다. 
 그런다음 아래의 프로그램을 각각 설치한다.

https://github.com/debauchee/barrier/releases

 

Releases · debauchee/barrier

Open-source KVM software. Contribute to debauchee/barrier development by creating an account on GitHub.

github.com

 

프로그램을 모두 설치하고 나면 아래와 같은 화면을 볼수 있는데.. 조건은 아래와 같다.

1. Server : 키보드와 마우스를 사용하고자 하는 PC에 설정한다. (윈도우나 맥의 경우 방화벽이 켜져 있으면 작동하지 않으니 예외처리를 꼭 해주어야 한다.)

2. Client : 키보드와 마우스를 공유 받는 쪽이다. 서버를 시작한 이후에 별도로 Auto Config에 서버의 IP가 나오지 않는 다면 설정이 잘못된 것이다. 이런 경우 꼭 Log를 검사해 보기를 바란다. 만약 다른 네트워크라면 서버 IP에 별도로 IP를 지정한다.

 

 아래는 서버단에서의 상세 설정 화면이다. 가급적 SSL을 사용하기를 바란다. 포트는 24800번으로 만약 방화벽에서 예외 처리를 해주지 않으면 서로간에 통신이 되지 않아 Auto config가 동작하지 않는다.

 

Enable SSL 사용시

기본적으로 간략한 설정을 한 이후에 제대로 동작하지 않아 Log를 확인해 보니 아래와 같이 Barrier.pem 파일이 존재하지 않아 서로 SSL 통신이 이루어 지지 않는 것을 알수 있다.

  이렬 경우 해당 디렉터리로 가서 아래의 명령어로 pem 파일만 생성해 주면 된다.

SSL openssl req -x509 -nodes -days 365 -subj /CN=barrier -newkey rsa:4096 -keyout barrier.pem -out barrier.pem

 

  정상적으로 연결이 된다면.. 아래와 같은 로그를 출력하면서 정상적으로 마우스를 이용하여 다른 PC로 이동이 가능하다.

 

https://github.com/debauchee/barrier

 

GitHub - debauchee/barrier: Open-source KVM software

Open-source KVM software. Contribute to debauchee/barrier development by creating an account on GitHub.

github.com

 

 

728x90
반응형
728x90
반응형

  S3와 Route53을 이용하여 정적 웹사이트를 구성하는 방법을 통해서 간단하게 정적 웹 사이트 서비스를 AWS를 이용해서 올려 보았다. 하지만 이렇게 편리하게 만들어진 웹 사이트의 반응성은 어떨까 ? 최근의 인터넷 서비스는 상당히 빠른 응답 속도를 자랑하고 콘텐츠 양이 많더라도 크게 영향 받지 않고 서비스를 쾌적하게 사용할 수 있게 해주기 때문에 아주 중요한 부분이므로 한번 간단하게 비교 테스트를 해보았다. 

   테스트 조건

 (1). S3 + Route53을 이용한 정적 웹 사이트
 (2) EC2 + Apache 웹 서버

  공통 조건

 (1) 동일한 index.html 파일 사용
 (2) 크롬의 검사툴을 이용함 (캐시 무시 기능 이용)

1. S3 + Route53

  먼저 S3로와 Route53으로 간단하게 설정한 웹 페이지상에서 index.html 에 대해서 크롬의 Network를 이용하여 반응 속도를 측정해 보았다. 아래의 결과에서 볼수 있듯이 일반적으로 30ms 에서 40ms 정도의 속도가 보편적이다. (평균을 따로 내지는 않았다.) 

  내가 보기엔 느리다는 생각이 들었다. 그래서 동일한 파일은 AWS EC2 인스턴스에 올리고 기본 설정의 Apache에 올려 보았다. ( EC2의 경우에는 별도로 DNS 설정이 없이 IP를 이용하여 접근 하였다.)

  2. EC2에 Apache

  일반적인 속도의 분포가 10ms대에서 20ms 이하가 주류를 이룬다. 그렇다면 실제로 저기서 부하가 걸리는 것은 무엇은지를 한번 알아 보았다.

간단하게 수치상으로 봐도 EC2+Apache 대비 S3+Route53이 두배가량의 시간이 더 걸린것을 알수 있다. 

3. 상세 원인은 무엇인가 ?

  가장 주된 원인은 TTFB로 인해 발생된 것으로 보이며 해당 시간이 거의 두배가 걸린것을 볼수 있을 것이다.
  TTFB : Time to First Byte로 처음 byte가 브라우저에 도달하는 시간을 이야기 합니다. TTFB가 빠를수록 사용자에게 체감되는 웹 반응성이 우수합니다.

EC2 + Apache

 

S3 + Route53

 % 위의 테스트 결과는 기본 설정만을 테스트 한것이며 Apache의 경우 캐시 전용 설정 구성을 통해서 위의 시간을 더 단축 시키는것이 가능하다. S3의 경우에도 CloudFront 및 여러가지 설정을 통해서 TTFB를 줄이는 것이 가능하다고 한다 하지만 실제로 테스트 해본적은 없으므로 향상 방법에 대해서는 Amazon 사이트의 내용을 첨부한다.

https://aws.amazon.com/ko/premiumsupport/knowledge-center/s3-cloudfront-website-latency/

 

Amazon S3에서 호스팅되고 CloudFront를 통해 제공되는 웹 사이트의 지연 시간 문제 해결

웹 사이트의 정적 콘텐츠가 Amazon Simple Storage Service(Amazon S3) 버킷에서 호스팅되고 Amazon CloudFront 배포를 통해 사용자에게 제공됩니다. 웹 사이트의 콘텐츠가 느리게 로드되거나 TTFB(Time To First Byte)

aws.amazon.com

 

4. 그렇다면 실제 서비스 사이트는 ?

 

  아래는 AWS 인프라를 사용하는 모 인터넷 쇼핑몰 사이트의 반응 응답 속도이다. 응답한 파일중에서 js 파일만을 필터링 하여서 한번 수치를 보았다. 전반적으로 속도가 100ms-300ms 수준에서 분포하고 있다는 것을 알수 있다. (이것도 통계를 내어서 비교 하고 싶으나 ^^)

 

위의 AWS 대비 IDC에서 서비스를 이용하는 포털 사이트의 응답 속도이다. 전체적으로 파일의 크기가 큰 JS 파일이지만 응답속도는 대부분 30ms ~ 40ms 이하의 분포를 보이고 있다는 것을 알수 있다. 간혹 가다가 150ms 대가 몇가지 보이지만 전반적인 응답 속도에 영향을 줄 정도는 아니다.

% 자체 IDC와 AWS를 사용하는 서비스에 대해서는 접속하는 IP로 구분하였습니다.

5. 결론

 추가적으로 테스트나 조사가 필요하지만 AWS상에서 서비스를 할때 S3를 이용하여 CDN을 구성하거나 하는 경우 속도가 일반적인 CDN 대비 느릴수 밖에 없다. 실제로 파일 딜리버리 전용으로 구성한다면 S3 보다는 Apache Cache 서버로 잘 튜닝해서 구성하는것은 어떨까 ? 하는 생각이 든다. 물론 S3의 응답 속도를 정말 제대로 튜닝해서 사용한다면 Apache를 구성하는거보다 더 손쉽게 빠른 서비스를 구성할수 있을것이다. 

  가장 의외인 것은 가끔 AWS 인프라로 서비스 하는 웹 사이트에 접근하면 거의 행이 걸린듯하듯이 멈춘 현상을 종종 볼수 있는데 이번 테스트시에 S3 + Route53 구성에서 722B의 index.html을 딜리버리 하는 최대 300ms 까지의 응답 속도를 보여준 적도 있었다. 이런 부분을 잘 생각해서 서비스를 구성할떄 AWS를 활용한다면 좋을것 같다고 결론 내려 봅니다.

% 본 테스트는 개인적인 연구 목적의 테스트 이므로 특정 단체나 집단의 이익을 대변하지 않습니다.

728x90
반응형
728x90
반응형

   정적 요소만 있는 홈페이지 즉 DB 연결이나 외부에서 데이터를 가져와서 변화하는 페이지가 아닌 단순 이미지나 JS 파일로 된 웹 사이트를 만들어야 하는 경우가 종종 있다. 혹은 동적 페이지를 개발하면서 정적 요소를 가져와야 하는 경우가 있을 것이다. 이번 글은 그러한 경우에 AWS 상에서 간단하게 만들수 있는 방법을 제시한다.

  아마존에서는 아래의 메뉴얼을 제공하고 있고 아래 메뉴얼을 보면서 따라가더라도 AWS에 익숙하지 않은 사람이라도 크게 어렵지 않게 몇십분 정도만 투자하면 금방 S3에 웹 페이지 리소스를 업로드 하고 도메인을 연결하여 웹 서비스를 구축 할수 있다. 즉 아파치니 Nginx 같은 웹 서버를 설치하고 권한을 잡아주고 기본 설정을 연결하지 않아도 된다.

  공식 메뉴얼은 아래에 있으므로 참조 하기 바란다.

https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/website-hosting-custom-domain-walkthrough.html

 

Route 53에 등록된 사용자 지정 도메인을 사용하여 정적 웹 사이트 구성 - Amazon Simple Storage Service

변경 사항은 일반적으로 60초 이내에 모든 Route 53 서버로 전파됩니다. 전파가 완료되면 이 절차에서 생성한 별칭 레코드의 이름을 사용하여 트래픽을 Amazon S3 버킷으로 라우팅할 수 있습니다.

docs.aws.amazon.com

% 아래의 글은 위의 메뉴얼과는 일부 상이하나 메뉴얼 대로 하는 것도 좋다.

1. 버킷 만들기

  제일 먼저 해야 할 일은 S3 버킷을 만들어야 한다. 버킷은 아래의 그림과 같이 기본적인 설정만을 통해서 생성하면 된다. (To-Do 참고) 다만 주의할 점이 두가지 정도 있으므로 버킷 생성시에 참고 하기 바란다.

  To-Do

1. 버킷 생성 클릭하기
2. 버킷 이름 넣기
3. 버킷의 리전을 원하는 리전으로 변경하기
4. 버킷을 퍼블릭으로 설정하기 
5. 완료

 생성시 주의해야 할 두가지 사항은 아래와 같다.

 (1). 버킷 이름

  외부에 도메인을 통해서 서비스를 하기로 하였고 도메인은  http://site.golobby.xyz으로 하기로 하였다. 그렇다면 버킷의 이름을 지정할때 해당 도메인과 동일한 이름인 site.golobby.xyz 로 설정해야 한다. 아래의 사진을 보면 버킷 이름을 내가 노출하고자 하는 도메인으로 설정한것을 알수 있다.

(2). 퍼블릭으로 설정

  기본적으로 버킷을 생성시 "이 버킷의 퍼블릭 액세스 차단 설정" 이라는 옵션이 모두 활성화 되어 있어 내부에서만 사용하도록 되어 있다. 이를 모두 풀어 주고 퍼블릭으로 설정해야 한다. 다만 이렇게 ACL의 설정 없이 모두 열어주고 정책을 줄 경우 외부에서 해당 버킷에 모두 접근할 수 있으므로 외부에 특별한 권한 없이 노출 할 수 있는 파일들만 위치 하는게 좋다. 별도로 S3 버킷의 권한에 대해서는 별도의 문서에서 알아 보겠다.

생성 완료를 클릭하면 아래와 같이 버킷이 생성된 것을 알 수 있다.

 

2. 정책 설정 하기 

 버킷이 생성되었다면 이제 정책을 설정하여 외부에서 접속이 가능하도록 설정 해야 한다. 버킷을 눌러 상세 화면에서 권한을 눌러서 "버킷 정책"으로 접속 하여 정책을 수정한다.

To-Do

1. 버킷 상세 페이지에서 "권한" 탭을 선택하고 "버킷 정책"  편집을 누른다.
2. 정책 생성기를 누루고 정책은 S3 버킷 정책으로 설정 한다.
3. 정책 생성기에서 허용, *, 그리고 Actions에는 GetObject만 설정
4. ARN에는 arn:aws:s3:::site.golobby.xyz 와 같이 적어주고 생성을 클릭
5. JSON 형식으로 뜬 정책을 클립보드에 복사
6. 정책에 복사한 다음 Resource에 ARN의 마지막 부분에 "/*" 첨부 "Resource": "arn:aws:s3:::site.golobby.xyz/*"
7. 완료 

정책 생성기

 정책 생성기를 통해서 액션, ARN을 이용한 JSON 형태의 정책을 생성한다.

버킷 정책을 설정 한다.

3. 정적 웹 호스팅 설정

  이제 버킷을 만들었다면 여기에 서비스할 리소스를 올려야 한다. 여기서는 테스트 이므로 공식 페이지에 나와 있는 index.html을 수정해서 간단하게 아래와 같은 소스를 업로드 하였다. 

<html> <head> <title>Amazon Route 53 Getting Started</title> </head> <body> <h1>Routing Internet traffic to Cloudfront distributions for your website stored in an S3 bucket</h1> <p>For more information, see <a href="https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/getting-started.html">Getting Started with Amazon Route 53</a> in the <emphasis>Amazon Route 53 Developer Guide</emphasis>.</p> </body> </html>

  위의 내용을 index.html 파일로 저장한다음에 아래의 To-Do의 과정을 통해서 업로드 한다.

To-Do

1. site.golobby.xyz 버킷의 상세 화면에서 객체에서 "업로드" 버튼 클릭
2. 사전에 만들어둔 index.html을 선택하고 업로드
3. 업로드가 완료 되면 index.html이 등록됨

  서비스할 페이지를 만들었다면 이제는 정적 웹 호스팅 설정을 통해서 위의 index.html을 외부에서 접근할수 있게 만들어야 한다. 방법은 아래의 To-Do를 참고하여 따라한다.

정적 웹 호스팅 설정 To-Do

1. 버킷의 상세 화면의 "속성" 탭을 선택 최하단에 정적 웹 사이트 호스팅 선택
2. 정적 웹 사이트 호스팅의 활성화 선택, 호스팅 유형은 "정적 웹 사이트 호스팅 선택"
3. 접속시 최초로 보여줄 페이지에 index.html 선택 (에러 페이지가 있을 경우 별도 업로드후 기입)
3. 완료 버튼 클릭이후 별도로 나오는 버킷 웹 사이트 엔드 포인트 확인 
4. http://site.golobby.xyz.s3-website.ap-northeast-2.amazonaws.com 라고 나오고 여기에 접속이 되면 완료

  % 여기까지만 해도 위의 주소를 이용하여 외부에서 정적 홈페이지를 서비스 할 수 있다.

4. 도메인의 등록

  아마존에서도 별도로 도메인을 사용할수 있지만 그럴경우 1년에 몇만원의 비용이 들수 있으니 여기서는 xyz 도메인을 외부에서 등록해서 사용하고자 한다. 요즘 1년에 2천원 정도 사용 가능한 도메인을 쉽게 구할수 있으므로 외부 도메인 등록 기관을 통해서 도메인을 2천원에 등록했다. 

  To-Do

1. 외부 호스팅 업체를 통해서 도메인을 등록 한다.
2. 해당 도메인을 Rote53의 "호스팅 영역" > "호스팅 영역 생성"을 선택하고 기입한다. (그림 1)
3. 생성된 영역에서 나오는 NS 서버 (총 3개 수준)를 등록한 호스팅 업체의 NS로 교체 한다. (그림2)
4. golobby.xyz라고 등록된 도메인을 선택하고 "레코드 생성" 화면으로 진입하여 "단순 레코드 정의"를 선택 (그림3)
5. 여기에 site를 입력하고 레코드 유형은 "A-IPv4주소" 값/트래픽 라우팅 대상은 S3로 존은 서울 리전으로 선택 (그림 3)
6. 마지막으로 S3 엔드 포인트에 s3-website.ap-northeast-2.amazonaws.com 라고 입력 (그림 3) 
    ( 정상적으로 입력이 되었다면 자동으로 스크롤되어 선택할수 있게 해준다. 스크롤이 안된다면 잘못된 것이다.)
7. 이제 레코드를 생성 하여 완료 한다. (그림 4)

해당 도메인을 Rote53의 "호스팅 영역" > "호스팅 영역 생성"을 선택하고 기입한다. (그림 1)
생성된 영역에서 나오는 NS 서버 (총 3개 수준)를 등록한 호스팅 업체의 NS로 교체 한다. (그림2)
golobby.xyz라고 등록된 도메인을 선택하고 "레코드 생성" 화면으로 진입하여 "단순 레코드 정의"를 선택 (그림3)
이제 레코드를 생성 하여 완료 한다. (그림 4)

  이제 모든것이 완료 되었다. 

  % 웹 브라우저에 http://site.golobby.xyz 를 입력해서 아래와 같이 뜬다면 성공한 것이다.  

 

5. 에러가 나올때의 상황

 (1) NoSuchBucket

: Route53의 라우팅 입력시 별도의 값을 입력하지 않는다 즉 site.golobby.xyz.s3-website.ap-northeast-2.amazonaws.com 으로 접속이 가능한 것을 site.golobby.xyz 로 맵핑해주는것이므로 S3 버킷의 이름이 정확하게 등록한 도메인 주소와 일치 하여야 한다. 이럴때에는 버킷의 이름이 라우팅 하고자 하는 도메인으로 정확하게 설정 되었는지 확인한다.

 (2) Access Denied 

Access Denied : S3 버킷에 대한 정책이 입력되지 않은 경우 발생한다. 위의 정책 부분이 빠졌는지 확인한다.

 

6. 정리

 (1) 장점

  - 별도로 웹 서버를 설정할 필요가 없다. (응답 헤더를 봐도 특별한점은 없다.)

요청/응답 헤더

  - 정적으로 리소스를 서비스 해야 할 경우에 당장에 서버의 확장 등을 고려하지 않고도 편리하게 사용 가능하다.
  - 침해에 대한 염려가 적다. (계정이 노출되지 않는다면 별도로 파일을 업로드할 방법은 ? 없는 것 같다. 즉 웹 사이트 디페이스에 어느정도 안정성은 있다 하지만 절대적일지는 ??)
  - 사소하게 신경을 쓰지 않아도 된다. (다만 대량으로 트래픽이 발생된다면 과금이 올라갈 것이다. 주의해야 한다.)

  (2) 주의 할점

   - ACL이나 정책을 별도로 설정하지 않을 경우 모든 파일에 접근이 가능하므로 꼭 노출할 파일만 위치 시킨다.
   - 권한 설정을 했다면 반드시 테스트 해봐야 한다.

 

 

728x90
반응형
728x90
반응형

  데이터 시각화 툴로서 종종 사용하는 Zeppelin을 갑자기 사용해야 할 일이 생겼다. 다만 예전에 설치할때 좀 까탈스러웠던 기억이 나서 Docker 이미지로 제공되는지를 찾아 보았더니 아니나 다를까 D2hub에 등록되어 있었다.

  이제 간단하게 설치를 진행해 보았다. (기본적으로 도커가 설치되어 있다는것을 전제로 하며 OS는 MAC, Linux 를 대상으로 합니다.)

#docker run -p 8080:8080 --rm --name zeppelin apache/zeppelin:0.9.0

  위의 명령어를 실행하면 Zeppelin 0.9 버전의 도커 이미지를 다운로드 하고 실행합니다. 하지만 로그라던가 notebook이 이미지 내에서 저장되므로 이미지가 삭제되거나 하면 작업한 notebook이 삭제될 수 있으므로 외부의 저장공간으로 아래와 같이 마운트 시켜 줍니다. 아래의 옵션은 차후에 드라이버를 적재하는 용도로도 사용되므로 아래와 같이 사용합니다.   

#docker run -p 8080:8080 --rm -v $PWD/logs:/logs -v $PWD/notebook:/notebook -e ZEPPELIN_LOG_DIR='/logs' -e ZEPPELIN_NOTEBOOK_DIR='/notebook' --name zeppelin apache/zeppelin:0.9.0

  이제 명령어를 수행하면 notebook 디렉터리와 logs 디렉터리가 현재 실행한 위치에 생성되고 실행이 잘 되는것을 볼 수 있습니다.

  % 실행중에 만약 root로 실행했는데 당황스럽게 파일 생성시 Permission Denied 라는 에러 메시지와 함께 실행시에 .git(notebook 하위) 디렉터리 생성이 안되거나 notebook이 생성되지 않았다면 (ubuntu 일때) root로 docker는 실행했지만 실제 Zeppelin이 실행되는 Java 프로세스는 사용자 권한으로 실행되므로 위에서 지정한 logs, notebook, .git 3가지를 해당 사용자로 생성하고 소유권을 변경해도 된다.

  이제 http://localhost:8080으로 접속하면 아래와 같은 화면이 나올것이다.

 

MySQL 연결하기..

  이제 MySQL을 연결해볼 차례다. 아래의 링크에 가면 Zeppelin 공식 페이제에서 각 DBMS 연결 방법이 설명되고 있다. 이번에는 jdbc를 이용하여 연결해 보도록 하겠다.

  참고로 Zeppelin은 postgresql 만 기본적으로 드라이버가 포함되어 배포되고 나머지는 모두 사용자가 다운로드 해서 interpreter 디렉터리 하위에 복사해서 넣어주어야만 한다. 하지만 Docker 이미지로 설치를 했기 때문에 Docker에 이를 넣어주기가 ..... 물론 불가능하지는 않다. 여러가지 방법이 있으니 시도해 보고자 하는분은 시도해 보시기 바랍니다. (귀차니즘에 입각하여 간단한 방법을.. ^^)

  우선 mysql-connector.jar 파일을 다운로드 한다. 그런 다음 위에서 docker 명령어를 수행했던 디렉터리로 간다. 내가 설치한 디렉터리는 /opt/zeppelin에서 실행하였다. 실행시 PWD를 변수로 받아서 notebook을 /notebook으로 맵핑 시켜 두었기 때문에 아래와 같이 /opt/zeppelin/notebook/mysql-connector-java-8.0.21.jar를 복사해 준다.

환경 변수 설정하기

  이제는 interpreter를 추가해줄 차례다. Zeppelin의 interpreter메뉴로 가서 신규로 생성을 눌러 새로 interpreter를 만든다. 그 때 템플릿은 jdbc를 선택하면 기본적인 필드가 나온다. 많은 필드중에서 아래의 몇가지 필드만 수정한다.

   default.url -> jdbc:mysql://localhost:3306/   
   default.user -> 사용자명   
   default.password -> 비밀번호   
   default.driver -> com.mysql.jdbc.Driver

  4가지만 기본적으로 설정하면 된다. 추가적인 mysql 접속 설정은 필요한 경우 하면 된다.

  이제 interpreter 하위에 Dependencies 부분에 추가한 디렉터리 위치를 넣어주어야 한다. 실제 파일이 위치한 경로는 /opt/zeppelin/notebook 이지만 실행시 맵핑을 해두었으므로 이미지상에서는 /notebook 으로 적어주면 된다.

  위와 같이 추가해준 다음 저장을 하고 이제 새로운 note를 생성한 다음 아래와 같이 쿼리를 내려 본다.

%interpreterName
select now()

 

  % 다만 위의 방법을 사용할 경우 docker 컨테이너를 재실행 시켜 줄 경우 노트북 파일과 드라이버 파일은 그대로 남지만 interpreter가 리셋되는 단점이 있다. 이 부분의 보완이 필요하다.

zeppelin.apache.org/docs/latest/interpreter/jdbc.html

 

Apache Zeppelin 0.8.2 Documentation: Generic JDBC Interpreter for Apache Zeppelin

 

 

728x90
반응형
728x90
반응형

  맥에서 syslog 데몬을 통해서 발생하는 syslog를 UDP 514로 전송할 수 있다.

1. /etc/syslog.conf 에 아래의 라인을 추가한다.

*.*        @10.10.10.5

2. syslog 데몬 재시작

launchctl stop com.apple.syslogd

launchctl start com.apple.syslogd

이제 해당 목적지 서버로 로그가 전송되는것을 확인할수 있다.

728x90
반응형
728x90
반응형

  주로 DB를 사용하고자 할때 요즘은 SQL Lite등을 사용하지만 개발을 진행하다가 보면 보안적인 측면 그리고 성능적인 측면에서 수십, 수백만건의 데이터가 넘어 갈 경우에는 파일 DB로는 불가능한 경우를 종종 만나게 된다. 그럴때 사용할 만한 RDBMS로 MySQL을 사용하는데 매번 설정을 찾아 보는게 귀찮아 한번에 정리한 버전을 만들어 본다.

 

환경

OS : CentOS 7.X (amd64)

설치 방법 : yum을 이용한 설치

설치 대상 : MariaDB 10.5.2-1.el7.centos

 

yum repository에 등록

yum으로 최신 버전의 MariaDB를 설치하고자 한다면 먼저 /etc/yum.repos.d/ 하위에 신규 파일을 생성하고 아래와 같이 넣어 준다.

 

maria.repo

 

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

 

간략 설명

: 위의 yum.mariadb.org 에 접속하면 버전과 OS까지 선택할수 있게 되어 있다. 

설치하고자 하는 버전별로 OS를 선택해서 위의 baseurl을 업데이트 하기 바란다.

 

설치

이제는 설치를 진행해 보자.

아래의 명령어만으로 관련된 모든 패키지를 설치 할수 있다.

yum install MariaDB*

 

(2/435): MariaDB-common-10.5.2-1.el7.centos.x86_64.rpm                 |  81 kB  00:00:07     
(3/435): MariaDB-compat-10.5.2-1.el7.centos.x86_64.rpm                 | 2.2 MB  00:00:17     
(4/435): MariaDB-devel-10.5.2-1.el7.centos.x86_64.rpm                  | 8.1 MB  00:00:43     
(5/435): MariaDB-client-10.5.2-1.el7.centos.x86_64.rpm                 |  12 MB  00:01:16     
(6/435): MariaDB-shared-10.5.2-1.el7.centos.x86_64.rpm                 | 113 kB  00:00:02     

 

만약 구버전을 사용하다가 위의 yum을 업데이트 한다면 관련된 많은 패키지가 업데이트 된다.

 

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !
To do so, start the server, then issue the following commands:

'/usr//bin/mysqladmin' -u root password 'new-password'
'/usr//bin/mysqladmin' -u root -h sokoban.co.kr password 'new-password'

Alternatively you can run:
'/usr//bin/mysql_secure_installation'

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the MariaDB Knowledgebase at http://mariadb.com/kb or the
MySQL manual for more instructions.

You can start the MariaDB daemon with:
cd '/usr/' ; /usr//bin/mysqld_safe --datadir='/data/mysql/'

You can test the MariaDB daemon with mysql-test-run.pl
cd '/usr//mysql-test' ; perl mysql-test-run.pl

Please report any problems at http://mariadb.org/jira

The latest information about MariaDB is available at http://mariadb.org/.
You can find additional information about the MySQL part at:
http://dev.mysql.com
Consider joining MariaDB's strong and vibrant community:
https://mariadb.org/get-involved/

 

잘 설치 되었다면 위의 메시지가 뜨면서 MariaDB가 실행된것을 PS로 확인할 수 있다.

 

후속 작업

먼저 접속을 위해서 아래의 명령어를 통해서 root 패스워드를 설정 한다.

 

/usr/sbin/mysqladmin -u root password 'new-password'

 

 

설정 변경

DB의 캐릭터 설정과 메모리 사용량 등을 설정한다.

my.cnf 파일의 변경

 

 

[client-server]

[mysqld]
datadir=/data/mysql
general_log_file=/data/mysql/log/general.log
socket=/var/lib/mysql/mysql.sock
init_connect="SET collation_connection = utf8_general_ci"
init_connect="SET NAMES utf8"
#default-character-set = utf8
character-set-server = utf8
collation-server = utf8_general_ci
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
#
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size =1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 16M
query_cache_limit = 32M
thread_concurrency = 4
max_connections = 100 #200

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

[client]
default-character-set = utf8

[mysqldump]
default-character-set = utf8
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

 

 

 

시작 할때 datadir을 변경하고자 한다면 아래와 같이 /etc/init.d/mysql 스크립트내의 datadir에 명시해준다.


# If you change base dir, you must also change datadir. These may get
# overwritten by settings in the MariaDB configuration files.

basedir=
datadir=/data/mysql

# Default value, in seconds, afterwhich the script should timeout waiting
# for server start. 
# Value here is overriden by value in my.cnf. 
# 0 means don't wait at all
# Negative numbers mean to wait indefinitely

 

 

예외상황 처리

 

설치 이후 초기 DB 파일이 설치 되지 않았을 경우 대처

sudo mysql_install_db --user=mysql --basedir=/usr/ --ldata=/data/mysql/

 

서비스 포트 변경

보안성 향상을 위해 Port를 변경해 주어야 할 필요가 있을때 아래의 방법으로 변경한다.

 

SE Linux가 활성화 되어 있다면

아래의 명령어를 이용하여 SE Linux에 포트를 추가해야 한다.

semanage port -a -t mysqld_port_t -p tcp 13306

 

그리고 방화벽의 포트를 열어 준다.

firewall-cmd --permanent --zone=public --add-port=13306/tcp

firewall-cmd --reload

 

마지막으로 서비스에서 포트를 변경한다.

vim /etc/my.cnf.d/server.cnf

 

[mariadb]

port=13306

 

서비스 접속 IP 허용

최초 설치하게 되면 자기 자신의 IP만 허용되어 있고 root 계정만 존재하는 상태이다. 

계정을 생성한 다음 본인이 접근하고자 하는 외부 IP를 설정하여 외부 IP에서 접근할 수 있도록 설정해 주어야 한다.

 

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'teddy'@'10.0.0.%' IDENTIFIED BY 'Password';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

728x90
반응형
728x90
반응형


다양한 오픈소스 솔루션들 혹은 개발 언어등에 대해서 교육 환경을 제공해 주는 사이트로 katacoda 라는게 있다. 

처음 나오는 복잡한 솔루션에 대한 교육을 엔지니어나 인터넷에 제공해야 하는경우 천천히 따라하면서 할수 있도록 제공해 주는 사이트이다. 가장 좋은 점은 도커 등을 통해서 직접 개발환경이 셋팅된 환경을 제공하면서 교육 자료를 풀어 나갈수 있기 때문에 바로 실습이 가능하면서 교육이 가능한 점이 큰 강점으로 보인다.


솔직히 처음 접속했을때에 어떤 사이트이지 하는 생각만을 가지고 접속을 해 보았는데 상당히 많은 기능을 제공해 주고 있고 또한 내가 직접 교육 자료를 만들수도 있었다. 




접속 사이트

https://www.katacoda.com/




무료로 제공되고 있는 코스들  





본인이 접속한 강의의 진도율 측정 (코스별로 제공)




교육 환경의 구축 


가입을 하게 되면 교육 환경을 본인이 구축할수 있도록 프로그램을 제공한다. 

https://www.katacoda.com/profile/create-first-scenario/cli 에서 프로그램을 다운로드 하면 되며 간단하게 아래의 명령어를 통해서 교육 환경 파일들을 생성 할수 있다.

$katacoda create scenario

위의 명령어를 내리게 되면 아래와 같이 순서로 진행이 이루어 진다.


katacoda create scenario

Creating New Katacoda Scenario. Please complete the following details to generate scenario template.


Friendly URL (katacoda.com/username/friendly-url): katacoda.com/sokoban/docker

-> katacoda 내에서 노출되는 URL을 선택한다. 가입할때 선택한 이름 뒤에 본인이 노출하고자 하는주소를 기입


Scenario Title: docker-compose #1

-> 타이틀명


Description: docker-compose #1

-> 설명


Environment ImageID (Available environments at https://katacoda.com/docs/scenarios/environments): (docker) docker

-> katacoda의 실습환경에서 제공해주는 도커 이미지 ID를 입력한다. (위의 주소에서 찾을수 있고 아래에 첨부해 두었다.)


Scenario Layout (Available layouts at https://katacoda.com/docs/scenarios/layouts): (terminal) Terminal

-> 실습환경에 대한 레이아웃이다. ( 위의 주소에서 찾을수 있다.)


New Scenario Created: katacodacomsokobandocker

Created index.json, step1.md, step2.md, step3.md, intro.md, finish.md


Complete your content and when ready, push the changes to your configured Git Repository.


  모든 과정이 끝나고 나면 폴더에 교육환경용의 파일들이 step별로 생성된것을 볼수 있을것이고 교육 내용을 해당 파일들에 추가하면 된다.


실제로 반영을 하고 싶다면 git을 이용해서 배포 할수 있다. 우선 관리를 git을 통해서 하겠다고 하면

 git에 자동으로 저장소를 생성해 주게 된다. 모든 교육 환경 파일들은 아래의 git을 통해서 관리 된다.




이제 실제로 교육환경을 반영하고자 한다면 위의 git에 교육 내용을 넣은 다음 자신의 profile에서 적용하기를 눌러 주면 간단하게 적용이 되고 교육 환경이 생성된 것을 볼수 있다.






728x90
반응형
728x90
반응형

 ATOM에서의 세로 선택하기


  ATOM 에디터에서 세로(Vertical) 선택을 사용할수 있을까 찾다 보니 아래와 같이 누군가 패키지를 만들어서 올려 두었다. 간단하게 설치해서 사용해 보자..


  우선 ATOM의 Install Packages를 선택하한 이후 아래와 같이 sublime이라고 검색을 한다. 검색을 하면 중간쯤에 Sublime-Style-Column-Selection이 보일것이다. INSTALL을 눌러 보자



  설치가 완료 되었다면 Settings으로 가서 설정 값을 살펴보자 설정은 간단하게 어떤 키의 조합으로 세로 선택을 할지를 설정하게 되어 있다. 기본으로 Left 마우스 버튼 + Alt 키를 누른 이후 마우스 드래그를 하면 세로 선택이 되도록 설정되어 있다.


  


 이제 실제로 세로 선택을 해보자 사용법은 위에서 설정 된대로라면 마우스 Left + Alt (option) + 드래그 이다.



  세로 선택이 잘 되는것을 확인 할수 있다.



 해당 패키지의 설명

https://atom.io/packages/sublime-style-column-selection




  간단하게 Atom에서 세로 선택을 하는 방법에 대해서 알아 보았다.

728x90
반응형

+ Recent posts