Category Archives: Infra

Object Storage 비교 – minio, ceph …

용도

예전에는 서버를 여러개 띄우면 /upload 경로에 nas를 마운트해서 사용했을거다.
요즘은 앱 배포시 서버리스나 컨테이너를 많이 사용하면서 서버에 직접 파일을 업로드 하는경우가 더 없어져서 스토리지를 별도로 사용해야 한다.

덤으로 대용량 로그파일도 저장하고 빅데이터 분석플랫폼에서 쉽게 가져와서 돌릴 수도 있다.

종류

  • 설치형
    • minio
      (https://www.minio.io)
    • ceph
      (https://ceph.com)
    • Red Hat OpenShift
      (https://www.redhat.com/ko/technologies/cloud-computing/openshift-container-storage)
    • HDFS
      하둡 파일시스템
    • infinit storage
      ??망했나
  • 클라우드 On demand
    • gcs(Google Cloud Storage)
    • aws(s3)

용도도 각각 다르고 성능도 다르고 해서 아무데나 막 쓸 수는 없다.
대강 써도 어느정도 성능은 나오긴 할텐데
아직 기술이 초기라서 그런지 딱히 좋은 자료가 안 보인다.

선택

minio, ceph 중에 하나를 쓸 것 같다.
성능이야 다 개선되고 있는 중이고 서로 다 좋다고 하니 써 봐야 알 것 같다.
일단 쓰기 편한건 두가지다.
용도는

  • 로그파일 저장
  • 이미지 업로드, 파일업로드 백엔드

minio는 설치가 편하다. docker 기반으로 실행도 가능.
ceph는 엔터프라이즈 서비스에서도 적용사례가 있는 것 같다. 설치는 조금 더 복잡할 것 같다.

어차피 개발중이니 minio를 먼저 써 보고 문제가 생기면 검토 해 보는걸로

Ubuntu18.04 Bionic Beaver HDD Mount 하드 추가

파티션 잡기

parted 이용
(참고) 

포맷

자동 마운트

tmpdir을 원하는 경로로 변경 

Iaas, Provisioning tool – Chef, Ansible, Puppet, Rex, Provy, Fabric

서버 프로비저닝 툴

최근 컨테이너(도커)와 Serverless 사용으로 서버 프로비저닝은 중요도가 좀 떨어지긴 했는데
PC, 로컬서버, 개별인스턴스 초기구성할 때 아쉬운 경우가 종종있다.

예전엔 chef가 대세였는데…
그냥 관련 기술 자체에 대한 관심이 죽은건지 이 회사가 폐쇄적인 정책으로 변해서 그런건지 커뮤니티에서 언급이 상당히 줄었다.

## Chef
유료. 인데다가 꽤나 비쌈.
로컬 서버를 쓰거나 클라이언트 모드로 사용하면 무료
최근에 변경이 많았는지 옛날책들 보고 하면 되는게 없다.
https://github.com/chef/chef

## Puppet
유료. chef랑 비슷한 것 같다.
잘 몰라서..

## Ansible
open stack에 사용되고 있다.
chef과 경쟁관계 안써봄.
https://github.com/ansible/ansible

## Fabrid
http://www.fabfile.org/
툴이라기보다는 python ssh 라이브러리.
이걸 베이스로 개발된 툴들이 좀 있는 것 같다.

## Rex
https://github.com/RexOps/Rex
오픈소스.
perl 기반 툴
perl까지 해야되나…

## Provy
http://heynemann.github.io/provy/
오픈소스.
파이썬 기반

Tiamet

Python기반 클라우드 프로비저닝 툴
https://github.com/HardBoiledSmith/tiamat
https://github.com/HardBoiledSmith/johanna

# ~
뭘 쓸지 아직 결론을 내진 못했는데..
DSL형태는 Ansible/Chef
코드는 조금이라도 익숙한 파이선 기반의 provy를 쓰게되지 않을까??? 싶다.

인프라쪽은 본업도 아닌데 너무 많이 시간을 잡아먹는다.

Serverless Architcture 적용 – 기술조사

올해의 핫 키워드 서버리스 아키텍처

갑자기 떠올랐다고 해야되나.. 내가 갑자기 알게된건가

AWS서밋2018 가서 보고 이게 이렇게 핫한 기술이라는걸 알게 됐다.

컨테이너 기반 개발/배포에 어느정도 익숙해져 갈 즈음이라… 이게 왜 필요한지 잘 이해가 안 갔었달까
(뭐 그냥 로그수집 할 때나 쓰면 적당하겠군)

그런데 최근 파일업로드 서버를 만들다가 갑자기 생각이 들었다.

여기다가 쓰면 되는거구나…

한번 생각나고 나니까 여기저기 적용할만한 구석이 보이기 시작한다.

개발환경

테스트 없이 배포까지 한 번에 할 수 있는 사람이 있긴할까?

역시 테스트가 필수적이다. 실서버에 배포를 하면 시간도 오래 걸리고, 돈도 들고, 운영중인 서비스라면 서비스가 중단된다.

로컬에서 빠르게 코딩-테스트할 환경이 필요한데

AWS, GCP 모두 테스트 환경을 제공 해 주고 있다.

로컬에 설치해서 개발이 가능한 솔루션도 많이 있다. 집에다가 한개 설치 해 놓고 개발용으로 써도 될 것 같다.

서버리스 솔루션

https://github.com/kubeless/kubeless

Home Page


https://www.openfaas.com/
https://openwhisk.apache.org/

FAAS

AWS는 다양한 언어를 제공 해 주고 있는 데 반해.
GCP는 아직 걸음마 단계… js만 사용가능하다.

kubernets 기반에 설치해서 사용이 가능한 fission도 있고
다른 서버리스 솔루션들을 kubernetes에 설치해서 써도 될 것 같지만….
그럴거면 그냥 컨테이너를 띄우지…

Serverless가 간편하다고 하지만.. SpringBoot나 다른기술들에 어느정도 익숙하다면 시간차이는 크지 않다.
AWS를 쓰면 구축 난이도가 좀 높은 API게이트웨이까지 사용할 수 있어서 더 좋을 것 같다.
AWS의존적인 시스템을 만들지 않으려고 했지만.. 이건 뭐 답이 없다. 그냥 의존적으로 가다가 문제가 생기면 빼는게 나을 것 같다.

로컬테스트는 이것저것 해보겠지만… 실 서비스는 AWS, API Gateway, DynamoDB/Aurora가 거의 확정.

PowerShell 명령어로 윈도우 환경변수Env 관리

Registry에서 환경변수의 경로

‘Path’에 gradle 경로 append

Gradle HOME 추가

 

뽀너스

자주 쓰는 명령

Ubuntu 사용자 추가삭제

 

가끔 생각이 안날때가 있어서

 

[Mac] Mac 패키지 관리 툴 – Homebrew + Cask

Homebrew

[공식 사이트](https://brew.sh/index_ko.html)

예전에는 Mac에서 패키지관리를 할 때 MacPort를 많이 썼는데
요새는 Homebrew진영에 주도권을 넘겨준 모양새다.

Port는 소스코드를 받아서 컴파일 후 설치를 하는데 Brew는 미리 컴파일된 파일을 다운받아 바로 설치를 하니 속도가 빠르고 오류가 적다.

설치 방법

스크립트

사용법

Homebrew Cask

[공식 사이트](https://caskroom.github.io)

기존의 Homebrew가 라이브러리, 데몬 설치에 사용됐다면
Cask는 유틸리티 설치에도 사용된다

사용법

검색은 공식사이트에서 해도 된다

https://caskroom.github.io/search

사용후기

cask 설치 실패가 나는 경우도 종종 있다.

환경때문에 그런 것 같지는 않고 자주 안 쓰는 패키지는 관리가 안되는 경우가 종종 있는 것 같다.

공식앱스토어가 아닌 이런곳에서 패키지를 설치하는게 보안상 안좋을 수도 있을 것 같다. 리포지터리나 dns가 해킹당하는 경우 아니면 패키지에 바이러스를 심어서 배포하는 경우에는 위험할 수도 있다.

괜찮겠지?

Vagrant berkshelf 동작이 안되는 경우

vagrant도 ruby  기반이라서 내장 ruby gem을 가지고 있다

내장 ruby gem과 rbenv/rvm/그냥설치… 된 다양한 루비환경이 분리되어있기 때문에 생기는 문제

 

운이 좋으면 두개를 겹쳐서 설치해도 되는 경우도 있다.

명령어가 있는 gem은 설치시 path를 셋팅한다.

운이 좋으면 높은 우선순위를 잡아서 실행이 될수도 있다.

 

 

 

해결하려면 다른환경에 설치된 gem을 지우고 vagrant 내장 gem을 따로 설치 해 주면 된다.

gem uninstall chef chef-zero berkshelf knife-solo

맞나? 이거 대충써놨다가 수정하려니까 기억이 안난다.

딱봐도 아닌데… 이걸 지우는게 해결책일리가 없다.

 

vagrant 내장 gem을 설치해야할 것 같은데

다음에 생각나면 다시 해봐야겠다.

 

 

Vagrant에서 .bashrc source가 먹히지 않는 문제

오류상황

vagrant shell에서 rbenv가 안먹힌다.

vagrant ssh 접속해서 보니 설치가 잘 돼 있고 path도 잡혀있는데

vagrant 설치시에 command not found가 발생

source가 안먹히는건가? 라고 생각

 

검색해보니

키워드 :

  • vagrant
  • command not found
  • source
  • not working

맘에드는 대답이 안나왔는데… 찾다보니 이런게 보인다.

https://stackoverflow.com/questions/29628635/why-is-source-home-vagrant-bashrc-not-working-in-a-vagrant-shell-provisionin

.bashrc에 인터렉티브 쉘이 아닌경우 리턴을 시키는문구가 있다고?

 

ubuntu .bashrc를 확인

.bashrc의 맨 앞에 이런게 있다.

If not running interactively, don’t do anything.
인터렉티브 쉘이 아닌경우, 아무것도 하지마.

rbenv공식 메뉴얼에는 .bashrc에 패스를 잡으라고 돼 있었는데..(메뉴얼이 바뀐건가? bash_profile에 하라고 돼있네)
어쨌든 이전 메뉴얼대로 하면 안돌아간다.

위의 검색결과에 나오는 스택오버플로우에는
.bashrc에서 return명령을 없애라고 하는데… 필요해서 해놨겠지.. 이 방법은 안쓰겠다.
대신에 .bash_profile/.profile에서 패스를 잡고 source .profile을 하면 된다.
아니면 .custom_profile을 만들어서 임포트해도 되고 .profile.d/를 써도될듯

Ruby Version 관리 툴 – rvm.io rbenv

개요

rvm보다 가볍고 시스템에 영향을 주지 않는다(삭제하기쉽다)는 이유로 rbenv으로 루비 버전관리 툴의 대세가 넘어간 것 같다.

rvm

http://rvm.io 접속해서 스크립트로 설치

rbenv

설치는 좀 더 성가시다.
공식 주소 :
https://github.com/rbenv/rbenv
install명령을 쓰려면 이것도 깔아줘야한다 :
https://github.com/rbenv/ruby-build

ubuntu 17.04 desk