LTE 를 사용하면서 가장 많이 쓰는 것이 와이파이 hotspot 이다.

갤럭시S5 를 최근에 바꿔서 사용하고 있는데, 성능이 좋지 않다.


처음에는 LTE 가 느린가 했는데, 아니다.

USB 테더링을 하니 빠르다. WiFi 쪽의 호환성인지. 드라이버의 문제인지.

성능이 좋지 못하다. 일단 USB 테더링으로 쓰고 있지만, 추후 다시 테스트 해봐야 겠다.


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

요즘 서버 자동화에 대한 구상을 하고 있다.

여러가지 방법이 있어 상황에 맞는 좋은 방법을 찾고 있다.

docker / vagrant / chef / puppet 등을 체크하고 있다.

관리해야 하는 서버가 수십대 규모에서 수백대 규모로 넘어가는 상황에서는 수작업/스크립트 만으로는 처리가 어렵다. 미리 미리 체크해서 상황이 발생했을 때 빠른 대처를 할 생각이다.


# digital ocean 의 서비스를 활용.

서비스쪽에서는 amazon 이 최고이긴 하지만, 비용문제가 있다. 계산법 복잡한 부분도 있다.
설정 부분도 그렇고, 초보가 접근하기에는 좀 부담스럽다.

디지털오션은 그 부분에서 간략화되어 있다는 느낌이다.

디지털오션 서비스를 체험하려면 관련글을 참조(2개월무료사용글 => http://blog.1day1.org/498 )

droplet 까지 생성을 해봤다면 다음으로 넘어가보자.

미리 세팅한(OS + your service app) droplet 를 스냅샷(snapshot)으로 만들 수 있다.

기본으로는 해당 지역(San Francisco) 에 생성이 되는데, 다른 지역에도 같은 이미지를 배포하고 싶으면 다른 지역으로 전송할 수 있다. 전송하는 시간이 좀 길다. 20G 정도 밖에 안되는데, 꽤 오랜 시간이 걸린다.
미리 미리 타지역으로 배포를 해놓는 것이 좋다.( 이 시간 때문에 다른 서비스도 고려중이다)

일단 스냅샷을 만든후


# droplet 을 저장이미지를 사용해본다.

  지역을 선택하고 My Images 에 저장된 이미지가 보인다. 그것을 선택한다.
  SSH Key 도 미리 등록해 놓으면 로그인도 바로 할 수 있으니 편하다.


기존에 droplet 생성 -> 서비스 app 세팅 하는데, 스크립트를 이용해서 보통 20~30 / 테스트까지 하면 1시간정도 필요했었다. 그런데, 이미지를 이용하면 거의 5분이내로 서비스 가동이 완료된다. 무지 편해졌다.
서비스 배포 시간을 줄이며 그 만큼 빠른 대응을 할 수 있다.

디지털오션쪽에서는 API 도 제공하기 때문에 위 시간에서 더 줄일 수 있을 듯 하다.
(https://developers.digitalocean.com)


내가 한 방법이 최상이라고는 할 수 없다. 서비스 앱의 종류 / 복잡도에 따라 또 달라질 수 있다.

설정등이 서버마다 바뀌거나, 복잡한 부분은 chef 나 puppet 등을 사용해야 할 것이다.

처음에는 간단한 것부터 조금씩 복잡한 부분에 대한 자동화시스템을 구축해볼 예정이다.




반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

우분투 14.04 시스템에 btrfs 를 사용하고 있다.

SSD raid 에 LVM 으로 나눠서 쓰고 있다. 일반적인 사용형태보다는 좀 복잡할 것이다.
(물론 아주 특이한 케이스는 아니다)

docker 를 테스트 하던 중.

docker pull 로  이미지 몇개 설치하지 않았는데, 디스크가 꽉차는 현상이 발생했다.
크롬이 비정상 종료되길래 왜 그러지 싶었다. 그냥 아무 생각없이 재부팅하니. 정상부팅되지 않았다.

순간 멘붕.

허걱! 다시 OS를 깔아야 하나. 데이터 만이라도 살려야 하는데.
중요데이터는 Dropbox 로 동기화 하고 있으니 별 상관은 없지만, 또 세팅을 다시하려니 힘이 쭉.

single 모드로 다시 부팅을 해보고 점검을 해봤다.

주요 메시지는

Incrementally starting RAID arrays...
mdadm: CREATE user root not found
mdadm: CREATE group root not found
Incrementally started RAID arrays.

이런식의 메시지가 계속 무한루프 된다. 위 메시지를 검색 해봤는데, 별다른 원인을 못찾겠다.


docker 를 테스트 하던중 용량 관련 메시지 No space left on device  => 디스크 full 일때 나오는 익숙한(?) 메시지
를 봤었다. 그것과 관련이 있을 것 같다.

# df -h
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/vg_root-lv_root  131G   46G   84G  36% /
none                         4.0K     0  4.0K   0% /sys/fs/cgroup
udev                         3.9G  4.0K  3.9G   1% /dev
tmpfs                        791M  1.3M  789M   1% /run
none                         5.0M     0  5.0M   0% /run/lock
none                         3.9G  156K  3.9G   1% /run/shm
none                         100M   44K  100M   1% /run/user

그러나 시스템 용량은 충분했다. 어떤 다른 이유인것 같다.


docker pull dockerfile/mongodb

등의 명령을 내리면, 이미지를 다운로드하고 컨테이너를 생성한다.

# docker pull dockerfile/mongodb
Pulling repository dockerfile/mongodb
6c03df111896: Download complete
511136ea3c5a: Download complete
5e66087f3ffe: Download complete
4d26dd3ebc1c: Download complete
d4010efcfd86: Download complete
99ec81b80c55: Download complete
b261bc65cd23: Download complete
42404685406e: Download complete
6cc69450fe19: Download complete
efc4fbcd007f: Download complete
2baeb2edbf92: Download complete
ecd5c1cc18ac: Download complete
1f089cc15e82: Download complete
9c1219bb985c: Download complete
d5885db18d17: Download complete
f1b2b4374c6b: Download complete
c0cda6b780cd: Download complete
42f2a60d100f: Download complete

이때 docker 는 btrfs 인 경우 subvolume (스냅샷?) 기능 을 이용하는 것 같다.

/var/lib/docker/btrfs/subvolumes 에 생성이 된다.

btrfs subvolume list /

을 해보면 아무것도 없어야 한다. 그런데, docker pull 후에 다시 명령을 해보면.

# btrfs sub list /
ID 386 gen 94278 top level 5 path var/lib/docker/btrfs/subvolumes/511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158
ID 387 gen 94278 top level 5 path var/lib/docker/btrfs/subvolumes/5e66087f3ffe002664507d225d07b6929843c3f0299f5335a70c1727c8833737
ID 388 gen 94279 top level 5 path var/lib/docker/btrfs/subvolumes/4d26dd3ebc1c823cfa652280eca0230ec411fb6a742983803e49e051fe367efe
ID 389 gen 94280 top level 5 path var/lib/docker/btrfs/subvolumes/d4010efcfd86c7f59f6b83b90e9c66d4cc4d78cd2266e853b95d464ea0eb73e6
ID 390 gen 94281 top level 5 path var/lib/docker/btrfs/subvolumes/99ec81b80c55d906afd8179560fdab0ee93e32c52053816ca1d531597c1ff48f
ID 391 gen 94282 top level 5 path var/lib/docker/btrfs/subvolumes/b261bc65cd23e8399c39ef0b77d732ddf6ca9679d4cea0ad1cdaca715c4a0d81
ID 392 gen 94283 top level 5 path var/lib/docker/btrfs/subvolumes/42404685406e72d29e3b349605d34cb88590cfcfabb06b9925628f2949c2eb89
ID 393 gen 94284 top level 5 path var/lib/docker/btrfs/subvolumes/6cc69450fe1990579c13d444495dcfec342955712481647fcb73d5a8e6184f33
ID 394 gen 94285 top level 5 path var/lib/docker/btrfs/subvolumes/efc4fbcd007ff7a202ead05932a48f62301464b8f1bc1449f3a8f9b5c26d9515
ID 395 gen 94286 top level 5 path var/lib/docker/btrfs/subvolumes/2baeb2edbf92488d7bbd4723368aeb2e86045f7ed6310b5924cec2d3c3ff8710
ID 396 gen 94287 top level 5 path var/lib/docker/btrfs/subvolumes/ecd5c1cc18ac86e88dd6420161d5812ef6cd31c1a0ce252d071d4481996502fc
ID 397 gen 94288 top level 5 path var/lib/docker/btrfs/subvolumes/1f089cc15e82571690524c3633dc361ba526d25fed072e09607fac7ee1178098
ID 398 gen 94289 top level 5 path var/lib/docker/btrfs/subvolumes/9c1219bb985cb5ceb0a602ad943c9dd5b83cf0f16d3cd05730113fe0af37d0be
ID 399 gen 94290 top level 5 path var/lib/docker/btrfs/subvolumes/d5885db18d17c3e473f310ab7723a1c6b4c29a14b9a8db54bfd795466bee1da3
ID 400 gen 94291 top level 5 path var/lib/docker/btrfs/subvolumes/f1b2b4374c6b1813549a4436c190f4e0ab04168eee3244e08931b63c96b943c1
ID 401 gen 94292 top level 5 path var/lib/docker/btrfs/subvolumes/c0cda6b780cdb2c400b470371baea2149ac4caef980d4685465f0ef13eb2af6c
ID 402 gen 94293 top level 5 path var/lib/docker/btrfs/subvolumes/42f2a60d100fcbda388b76bb69270fc057565ab4bdf5d68072b30b225669e5f4
ID 403 gen 94293 top level 5 path var/lib/docker/btrfs/subvolumes/6c03df11189668e549ac34464dbdbef563144f92eeb89246afaa1029b92cfd7d

위 처럼 많은 subvolume 이 생성된 것을 볼 수 있다.
ID 값이 동일한 것(진한부분)을 보니 ID 당 서브볼륨을 생성해서 관리하나 보다.


파일용량을 체크해보면 다음과 같다.

# btrfs file df /
Data, single: total=127.21GiB, used=44.64GiB
System, DUP: total=8.00MiB, used=20.00KiB
System, single: total=4.00MiB, used=0.00
Metadata, DUP: total=1.50GiB, used=1.02GiB
Metadata, single: total=8.00MiB, used=0.00

서브볼륨은 어느 부분에 영향을 주는지 확인해봐야 겠다.

아무튼.

docker rmi dockerfile/mongodb

명령으로 docker 이미지를 삭제하면 해당 subvolume 도 삭제된다.


개별적으로 subvolume 을 삭제하려면

btrfs sub del var/lib/docker/btrfs/subvolumes/6c03df11189668e549ac34464dbdbef563144f92eeb89246afaa1029b92cfd7d

으로 삭제해준다.( 부팅이 안되서 usb 우분투 로 부팅하고, 해당 서브볼륨을 위 처럼 하나씩 삭제해줬다)


btrfs 에 좀더 알기전까지는 조심해야 겠다.

다음부터 docker 는 vagrant 기반의 vm 내에서 테스트 해봐야 겠다.



반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

vagrant cloud 를 사용하려고 한다.( 기존 http://www.vagrantbox.es 를 사용하고 있었다.)

vagrantbox 에는 그리 많지 않아서 vagrant cloud (https://vagrantcloud.com) 를 사용하려 한다.


vagrant cloud 를 사용하려면 1.5 버전 이상에서 사용가능한 듯 하다.

우분투 14.04 기본패키지는 1.4.3 버전이다.( 다음처럼 에러가 난다.)

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
There are errors in the configuration of this machine. Please fix
the following errors and try again:

vm:
* The box 'hfm4/centos7' could not be found.



# 최신 버전으로 업그레이드 한다.

우분투 패키지를 다운받아서 설치했다.( http://www.vagrantup.com/downloads.html )

deb 파일이라 다운로드 하면 자동으로 우분투소프트웨어센터로 설치된다.

업그레이드 하면 된다.

버전을 확인해본다.

$ vagrant -v
Vagrant 1.6.3


vagrant cloud 에서 이미지를 찾아서 설치/가동 해본다.

가입은 쉽다. 가입후 에 Discover 메뉴에서 찾고자 하는 box 를 검색해본다.(가입안해도 될려나?)
그냥 box init 용도로만 사용하려면 가입은 안해도 되나보다.


원하는 box 를 찾았으면 vagrant init  명령을 내린다.

vagrant init hfm4/centos7

위 명령을 하면 Vagrantfile 이 생긴다.
이 파일을 기준으로 vagrant up 시 이미지등을 생성하고, 자동실행하게 된다.


# vagrant up

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'hfm4/centos7' could not be found. Attempting to find and install...
    default: Box Provider: virtualbox
    default: Box Version: >= 0
==> default: Loading metadata for box 'hfm4/centos7'
    default: URL: https://vagrantcloud.com/hfm4/centos7
==> default: Adding box 'hfm4/centos7' (v1.0) for provider: virtualbox
    default: Downloading: https://vagrantcloud.com/hfm4/centos7/version/1/provider/virtualbox.box
    default: Progress: 10% (Rate: 1239k/s, Estimated time remaining: 0:09:02)

위와 같이 진행이 된다.


위와 같이 진행하다가 다음과 같은 에러가 나온다.

Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` vagrant /vagrant
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant /vagrant


다음처럼 guest plugin 을 설치한다.

$ vagrant plugin install vagrant-vbguest
Installing the 'vagrant-vbguest' plugin. This can take a few minutes...
Installed the plugin 'vagrant-vbguest (0.10.0)'!

정상적으로 되면

vagrant ssh

로 접속해본다. vagrant 속에서 다음 명령을 해준다.

sudo ln -s /opt/VBoxGuestAdditions-4.3.12/lib/VBoxGuestAdditions /usr/lib/VBoxGuestAdditions

4.3.12 => 버전은 차이가 있을 것이다.

뭔가 계속 에러가 난다. box 패키징이 잘 못된것인가?


다른 박스로 해봤다.( https://vagrantcloud.com/chef/centos-6.5 )

다른 박스로 해보니 정상적이다.

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'chef/centos-6.5' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
==> default: Machine booted and ready!
GuestAdditions 4.3.12 running --- OK.
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
    default: /vagrant => /user/develop/vagrant/chef-centos-6.5
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: to force provisioning. Provisioners marked to run always will still run.


vagrant cloud 쪽의 box 들이 모두 검증된 것은 아닌것 같다.
각자 취사 선택해서 사용해야 겠다.




반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

git 를 로컬에서 사용해도 좋습니다.

그런데, 원격 저장소를 사용하면 뭔가 있어보입니다.

원격저장소를 직접 구현해도 되지만, 일단 이미 구축된 서비스를 사용해봅시다.

여기서는 bitbucket 을 사용합니다. ( https://bitbucket.org )

가입과정은 건너띄고 바로 저장소를 생성합니다.

Name 만 넣으면 끝. Repository type 은 Git 로 하면 됩니다.


나의 로컬저장소 를 원격에 올려봅니다.

저장소 디렉토리에서 다음 명령으로 원격저장소를 등록해 줍니다.

git remote add origin git@bitbucket.org:myid/test-myproject.git

해당 정보는 .git/config 파일에 저장이 됩니다.


이제 로컬의 commit 정보를 원격저장소에 push 해줍니다.

git push -u origin --all

완료가 되면 bitbucket 에 등록된 것을 볼 수 있습니다.



추가) ssh key 를 등록하면 편합니다.

bitbucket 메뉴에서 Manage Account > Secutiry > SSH keys 메뉴에서 ssh key 를 등록해 둡니다.





반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,