지난번 icinga 로 모니터링 서버를 만들었다.( http://blog.1day1.org/547 )

그런데, 서버가 자주 죽는다. vagrant 로 구축해서 그런가?

아니면 다른 문제일까? vagrant 에 icinga 만 세팅해놨다. icinga 가 불안한가?

좀더 상황을 지켜봐야 겠다.

그냥 리얼서버에 구축해야 할까?




반응형

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

,

vagrant 나만의 패키지 box 를 만들어 보자.

공개된 box 를 사용하다 보면 조금씩 내 입맛에 맞게 변경하게 된다.
그 상태를 패키지로 만들어 본다.

관련 링크 : https://docs.vagrantup.com/v2/virtualbox/boxes.html

# vagrant package --base {가상머신이름} --output {박스이름}

형태로 만들어 준다. 그렇지만 언제나 우리를 당황하게 만드는 에러메시지

# vagrant package --base nhost --output nhost.box
/opt/vagrant/embedded/gems/gems/vagrant-1.6.3/lib/vagrant/machine.rb:306:in `id=': undefined method `children' for nil:NilClass (NoMethodError)
        from /opt/vagrant/embedded/gems/gems/vagrant-1.6.3/lib/vagrant/machine.rb:438:in `state'
        from /opt/vagrant/embedded/gems/gems/vagrant-1.6.3/plugins/providers/virtualbox/action/created.rb:11:in `call'
        from /opt/vagrant/embedded/gems/gems/vagrant-1.6.3/lib/vagrant/action/warden.rb:34:in `call'
        from /opt/vagrant/embedded/gems/gems/vagrant-1.6.3/lib/vagrant/action/builder.rb:116:in `call'
        from /opt/vagrant/embedded/gems/gems/vagrant-1.6.3/lib/vagrant/action/runner.rb:66:in `block in run'
        from /opt/vagrant/embedded/gems/gems/vagrant-1.6.3/lib/vagrant/util/busy.rb:19:in `busy'
        from /opt/vagrant/embedded/gems/gems/vagrant-1.6.3/lib/vagrant/action/runner.rb:66:in `run'
        from /opt/vagrant/embedded/gems/gems/vagrant-1.6.3/lib/vagrant/action/builtin/call.rb:43:in `call'
        from /opt/vagrant/embedded/gems/gems/vagrant-1.6.3/lib/vagrant/action/warden.rb:34:in `call'
        from /opt/vagrant/embedded/gems/gems/vagrant-1.6.3/plugins/providers/virtualbox/action/check_virtualbox.rb:17:in `call'
        from /opt/vagrant/embedded/gems/gems/vagrant-1.6.3/lib/vagrant/action/warden.rb:34:in `call'
        from /opt/vagrant/embedded/gems/gems/vagrant-1.6.3/lib/vagrant/action/builder.rb:116:in `call'
        from /opt/vagrant/embedded/gems/gems/vagrant-1.6.3/lib/vagrant/action/runner.rb:66:in `block in run'
        from /opt/vagrant/embedded/gems/gems/vagrant-1.6.3/lib/vagrant/util/busy.rb:19:in `busy'
        from /opt/vagrant/embedded/gems/gems/vagrant-1.6.3/lib/vagrant/action/runner.rb:66:in `run'
        from /opt/vagrant/embedded/gems/gems/vagrant-1.6.3/lib/vagrant/machine.rb:196:in `action_raw'
        from /opt/vagrant/embedded/gems/gems/vagrant-1.6.3/lib/vagrant/machine.rb:173:in `block in action'
        from /opt/vagrant/embedded/gems/gems/vagrant-1.6.3/lib/vagrant/environment.rb:434:in `lock'
        from /opt/vagrant/embedded/gems/gems/vagrant-1.6.3/lib/vagrant/machine.rb:161:in `call'
        from /opt/vagrant/embedded/gems/gems/vagrant-1.6.3/lib/vagrant/machine.rb:161:in `action'
        from /opt/vagrant/embedded/gems/gems/vagrant-1.6.3/plugins/commands/package/command.rb:83:in `package_vm'
        from /opt/vagrant/embedded/gems/gems/vagrant-1.6.3/plugins/commands/package/command.rb:66:in `package_base'
        from /opt/vagrant/embedded/gems/gems/vagrant-1.6.3/plugins/commands/package/command.rb:42:in `execute'
        from /opt/vagrant/embedded/gems/gems/vagrant-1.6.3/lib/vagrant/cli.rb:42:in `execute'
        from /opt/vagrant/embedded/gems/gems/vagrant-1.6.3/lib/vagrant/environment.rb:252:in `cli'
        from /opt/vagrant/bin/../embedded/gems/gems/vagrant-1.6.3/bin/vagrant:166:in `<main>'

어! 뭐가 문제지.

답은 --base {가상머신이름}

가상머신 이름을 정확하게 적어줘야 한다.

ls  ~/VirtualBox VMs  안에 가상머신들이 있다. 그 이름(폴더명)을 적어준다.

또는

# VBoxManage list vms

결과는 이런 식이다.
"nhost_default_1406732053960_27414" {196dbe3a-1c2f-4414-83f4-dbb612a67059}


이제 제대로 적어준다.

# vagrant package --base nhost_default_1406732053960_27414 --output nhost.box

다음처럼 박스가 생성된다. 가상머신이 실행중이면 먼저 중지된다.

==> nhost_default_1406732053960_27414: Attempting graceful shutdown of VM...
==> nhost_default_1406732053960_27414: Clearing any previously set forwarded ports...
==> nhost_default_1406732053960_27414: Exporting VM...
==> nhost_default_1406732053960_27414: Compressing package to: /opt/nhost.box

해당 위치에 보면 OOO.box 파일이 생겼을 것이다.


사용은 다음처럼 한다. 추후 vagrant init nhost 로 사용가능하다.

# vagrant box add nhost /opt/nhost.box


==> box: Adding box 'nhost' (v0) for provider:
    box: Downloading: file:///opt/nhost.box
==> box: Successfully added box 'nhost' (v0) for 'virtualbox'!

정상적으로 box 가 등록된다.



반응형

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

,

vagrant 의 용량이 모자라요. 디스크를 추가해서 늘려보자.

상황 - vagrant 의 가상머신내 용량이 모자란다. 공유폴더로 하려니 권한, owner 설정등의 문제가 있다.

해결방법 : 200G 가상디스크를 생성하고, guest 의 / root 에 LVM logical 디스크를 추가한다.

조건 : 디스크 /dev/sda 로 설정되어 있고, LVM 으로 /dev/mapper/VolGroup-lv_root 가 root 에 마운트되어 있다. LVM 을 이용해 디스크용량을 확장하려는 것이다.


1. Vagrantfile 에 디스크를 생성하는 명령을 넣는다.

  config.vm.provider "virtualbox" do |vb|
    file_to_disk = File.realpath( "." ).to_s + "/disk.vdi"

    if ARGV[0] == "up" && ! File.exist?(file_to_disk)
       puts "Creating 200GB disk #{file_to_disk}."
       vb.customize [
            'createhd',
            '--filename', file_to_disk,
            '--format', 'VDI',
            '--size', 200 * 1024   # 200 GB
            ]
       vb.customize [
            'storageattach', :id,
            '--storagectl', 'SATA',
            '--port', 1, '--device', 0,
            '--type', 'hdd', '--medium',
            file_to_disk
            ]
    end

  end

  config.vm.provision "shell", path: "scripts/add_new_disk.sh"


2. provision 실행명령을 작성한다.

 스크립트 내용 : 추가된 디스크를 fdisk 로 등록하고, LVM logical 디스크로 추가한후 용량을 확장한다.

# cat scripts/add_new_disk.sh
set -e
set -x

if [ -f /etc/disk_added_date ]
then
   echo "disk already added so exiting."
   exit 0
fi


sudo fdisk -u /dev/sdb <<EOF
n
p
1


t
8e
w
EOF

pvcreate /dev/sdb1
vgextend VolGroup /dev/sdb1
lvextend -L +200G /dev/VolGroup/lv_root
resize2fs /dev/VolGroup/lv_root

date > /etc/disk_added_date



3. provision 명령으로 스크립트를 실행한다.

# vagrant provision
==> default: Running provisioner: shell...
    default: Running: /tmp/vagrant-shell20140730-16554-1duycg4.sh
==> default: ++ '[' -f /etc/disk_added_date ']'
==> default: ++ sudo fdisk -u /dev/sdb
==> default: Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
==> default: Building a new DOS disklabel with disk identifier 0x95391d02.
==> default: Changes will remain in memory only, until you decide to write them.
==> default: After that, of course, the previous content won't be recoverable.
==> default: Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
==> default:
==> default: WARNING: The size of this disk is 219.9 TB (219902325555200 bytes).
==> default: DOS partition table format can not be used on drives for volumes
==> default: larger than (2199023255040 bytes) for 512-byte sectors. Use parted(1) and GUID
==> default: partition table format (GPT).
==> default:
==> default: WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
==> default:          switch off the mode (command 'c')
==> default: .
==> default:
==> default: Command (m for help):
==> default: Command action
==> default:    e   extended
==> default:    p   primary partition (1-4)
==> default: Partition number (1-4):
==> default: First sector (63-4294967295, default 63):
==> default: Using default value 63
==> default: Last sector, +sectors or +size{K,M,G} (63-4294967294, default 4294967294):
==> default: Using default value 4294967294
==> default:
==> default: Command (m for help):
==> default: Selected partition 1
==> default: Hex code (type L to list codes):
==> default: Changed system type of partition 1 to 8e (Linux LVM)
==> default:
==> default: Command (m for help):
==> default: The partition table has been altered!
==> default:
==> default: Calling ioctl() to re-read partition table.
==> default: Syncing disks.
==> default: ++ pvcreate /dev/sdb1
==> default:  
==> default: dev_is_mpath: failed to get device for 8:17
==> default:   Physical volume "/dev/sdb1" successfully created
==> default: ++ vgextend VolGroup /dev/sdb1
==> default:   Volume group "VolGroup" successfully extended
==> default: ++ lvextend -L +200G /dev/VolGroup/lv_root
==> default:   Extending logical volume lv_root to 218.51 GiB
==> default:   Logical volume lv_root successfully resized
==> default: ++ resize2fs /dev/VolGroup/lv_root
==> default: resize2fs 1.41.12 (17-May-2010)
==> default: Filesystem at /dev/VolGroup/lv_root is mounted on /; on-line resizing required
==> default: old desc_blocks = 2, new_desc_blocks = 14
==> default: Performing an on-line resize of /dev/VolGroup/lv_root to 57280512 (4k) blocks.
==> default: The filesystem on /dev/VolGroup/lv_root is now 57280512 blocks long.
==> default: ++ date

vagrant ssh 를 해보면 정상적으로 용량이 늘어난 것을 볼 수 있다.

% 로그를 보니 200G 가 아닌 200T 로 세팅된 듯 하다. Vagrantfile 쪽의 용량 계산을 잘 못 한듯 하다.
다시 설정을 체크해봐야 겠다.%



반응형

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

,

vagrant 를 사용하다 보면 GuestAdditions 의 버전이 다른 경우가 있다.

vagrant up 시에 다음과 같은 메시지가 뜬다.

Got different reports about installed GuestAdditions version:
Virtualbox on your host claims:   4.3.10
VBoxService inside the vm claims: 4.3.14
Going on, assuming VBoxService is correct...
GuestAdditions 4.3.14 running --- OK.

host 와 가상머신내의 버전이 다르다.


~/VirtualBox VMs/chef-solo_default_1406182370453_27414 => 다음 위치에서

 vi OOO.vbox 를 열어본다. (진한부분은 box 별로 다를 것이다.)

          <GuestProperty name="/VirtualBox/GuestAdd/Version" value="4.3.14" timestamp="1397926654949278000" flags=""/>
          <GuestProperty name="/VirtualBox/GuestAdd/VersionExt" value="4.3.14" timestamp="1397926654951054000" flags=""/>

위와 같은 항목이 나오는데, 버전부분을 새버전으로 바꿔준다.

vagrant reload 를 해서 다시 실행시켜 본다.


# 몇가지 guest 체크 명령

# vagrant vbguest --status
GuestAdditions 4.3.14 running --- OK.


- 현재 버전 보기.

# VBoxManage guestproperty get aadfe9f8-a351-42b0-832a-af8d7dcbe6be /VirtualBox/GuestAdd/Version
Value: 4.3.14

진한 부분은 /VirtualBox VMs/ 의 해당가상머신의 UUID (OOO.vbox 파일 위쪽에 있음)


- 현재 머신 설정으로 저장하기

# VBoxManage guestproperty set aadfe9f8-a351-42b0-832a-af8d7dcbe6be /VirtualBox/GuestAdd/Version

# VBoxManage guestproperty set aadfe9f8-a351-42b0-832a-af8d7dcbe6be /VirtualBox/GuestAdd/Revisioin

get 을 set 으로 바꿔주면  OOO.vbox 의 내용을 현재 설정으로 바꿔준다.



참고1) 아래 위치는  기본 box 이미지에서 수정할때 사용한다.

~/.vagrant.d/boxes/chef-VAGRANTSLASH-ubuntu-14.04-i386/1.0.0/virtualbox => 다음과 같은 위치에

 vi box.ovf 를 열어보면 위 와 비슷하다. 버전 부분 변경.


참고2) 버전이 다르면 vagrant 가 자동으로 업데이트 해준다. => 크게 의미 없는 듯 함(사용하는게 좋을 듯)

이때 버전업을 하기 싫다면 다음 옵션을 Vagrantfile 에 추가한다.

  config.vbguest.auto_update = false




반응형

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

,

vagrant up 시에 다음과 같은 vboxsf 관련 에러를 보게되면,

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 reload 를 한번 해준다.



반응형

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

,

vagrant 의 기본 메모리가 부족해서 늘려보고자 한다.

설정은 다음과 같다. Vagrantfile 에 추가해준다.

  config.vm.provider "virtualbox" do |vb|
    vb.customize ["modifyvm", :id, "--memory", "1024"]
  end

적당한 메모리 값을 넣어준다.

위와 같이 하면 정상정으로 진행될 것이다.



=> 아래 에러는 아마도 cpu 를 2 로 늘렸을때 났던 에러인 듯 하다. 빼고 해도 동일 에러가 나는 이유는 무엇일까?
설정값이 남아있었던 것일까? vagrant destroy 후에 다시 해보니 정상이다.

관련 설정을 한후 vagrant up 을 해보면 다음과 같은 에러가 난다.

# vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'chef/ubuntu-14.04-i386' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Fixed port collision for 22 => 2222. Now on port 2201.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 => 2201 (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
The guest machine entered an invalid state while waiting for it
to boot. Valid states are 'starting, running'. The machine is in the
'poweroff' state. Please verify everything is configured
properly and try again.

If the provider you're using has a GUI that comes with it,
it is often helpful to open that and watch the machine, since the
GUI often has more helpful error messages than Vagrant can retrieve.
For example, if you're using VirtualBox, run `vagrant up` while the
VirtualBox GUI is open.


/VirtualBox VMs/chef-solo_default_1406169045971_64274/Logs 에서 VBox.log 를 열어서 보면

00:00:00.070719
00:00:00.070719 ********************* End of CFGM dump **********************
00:00:00.070730 VM: fHMEnabled=true  (configured) fRecompileUser=false fRecompileSupervisor=false
00:00:00.070732 VM: fRawRing1Enabled=false CSAM=true  PATM=true
00:00:00.070842 VMSetError: /home/vbox/vbox-4.3.14/src/VBox/VMM/VMMR3/HM.cpp(532) int HMR3Init(PVM); rc=VERR_VMX_MSR_VMXON_DISABLED
00:00:00.070854 VMSetError: VT-x is disabled in the BIOS.
00:00:00.196099 ERROR [COM]: aRC=NS_ERROR_FAILURE (0x80004005) aIID={8ab7c520-2442-4b66-8d74-4ff1e195d2b6} aComponent={Console} aText={VT-x is disabled in the BIOS. (VERR_VMX_MSR_VMXON_DISABLED)}, preserve=false
00:00:00.248130 Power up failed (vrc=VERR_VMX_MSR_VMXON_DISABLED, rc=NS_ERROR_FAILURE (0X80004005))

결론은 해당 호스트머신이 CPU 가상화 VT-x 를 지원하지 않는 것이다.

테스트한 머신이 i3 라 가상화 지원을 하지 않아서 그런듯 하다. 메모리만 늘리려 하는데도 안되는 듯 하다.

i5 이상급으로 업그레이드 하거나 다른 머신에서 테스트해야 겠다.


반응형

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

,

관리하는 서버 대수가 많아지다 보니 모니터링이 쉽지 않다.

서버 호스팅 업체를 통한 기본관리도 가능하지만, 부족한 부분이 있고, 여러 호스팅 업체를 사용하다보면 그것도 불편하다


icinga 로 모니터링 서버를 구축해본다.

웹 모니터링 화면을 접속하면 이런식으로 나온다.

관련글 : https://www.digitalocean.com/community/tutorials/how-to-use-icinga-to-monitor-your-servers-and-services-on-ubuntu-14-04

설정은 위 링크를 참조하기로 하고 특이사항 들을 추가한다.


관련 패키지를 설치하면 몇가지 설정단계를 거친다.

1) 처음에는 mysql root 계정 암호를 넣을 것이다. 적당한 암호를 넣는다.


2) 메일 설정 부분

메일 설정을 해준다. 메일로 알람을 받을 때 쓰는 듯 하다.


3) 관리자 화면에 쓸 icingaadmin 계정 설정

관리용 웹화면의 암호를 입력한다.

다음처럼 추가 패키지들이 설치된다.


다음은 그냥 No 로 넘어가고,


4) icinga-idoutils 관련 설정

icinga-idoutils 의 설정 : 모니터링 데이터에 쓰이는 듯 하다.

여기에서는 mysql 을 쓸 것이다.


초기데이터 설정을 위해 관리자 암호를 물어본다(처음에 설정한 값)


icinga-idoutils 가 쓸 mysql 계정암호를 넣는다.

여기까지 기본설정 완료. 추가로 패키지들이 마저 설치된다.



5) 모니터링 관리자 화면 접속.

난 설정을 포트포워딩 해서 http://localhost:8800/icinga/ 으로 접속했다.

아이디는 icingaadmin 이고, 암호는 설정시 입력한 값을 넣는다.




참고로 난 vagrant 로 가상머신을 만들고, icinga 를 세팅했다.
vagrant 로 세팅후 box 의 80포트를 포트포워딩 하고, 부팅시 자동실행하도록 설정했다.

1) 포트포워딩(Vagrantfile)

config.vm.network :forwarded_port, host: 8080, guest: 80

2) 부팅시 자동실행(vagrant box) : http://blog.1day1.org/543




반응형

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

,

vagrant up 을 하게 되면 virtualbox 가 시작되면서 가상머신이 부팅하게 된다.

기본 설정은 private network 로 되는 듯 하다.


브리지 모드로 하려면

Vagrantfile 에 다음 항목을 넣어준다.

방법1)
config.vm.network "public_network"

방법2)
config.vm.network "public_network", bridge: "eth0"

설정값이 vagrant 버전에 따라 차이가 있는 듯 하다.

config.vm.network :public_network, bridge: "eth0"

위와 같이 옵션을 넣어줘도 되는 듯 하다. ( 구분은 " => 로 하는게 더 쉬워보인다)


비슷하게 포트 포워딩을 하려면 이런식.

config.vm.network :forwarded_port, host: 8080, guest: 80



# vagrant -v
Vagrant 1.6.3

그냥 config.vm.network "public_network" 부분까지만 넣어주면, 네트웍인터페이스(랜카드) 가 여러개이면 선택하는 화면이 나온다.

# vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'ubuntu/trusty64' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
==> default: Clearing any previously set network interfaces...
==> default: Available bridged network interfaces:
1) eth0
2) wlan0
3) docker0
    default: What interface should the network bridge to?

=> 매번 선택 해줘야 한다. bridge 옵션으로 network interface 를 정해주면 선택하지 않고 바로 가동할 수 있다.




하위 버전은 아래 명령중 하나로 작동할 듯 함.(아래 설정중 알아서 설정)

config.vm.network :bridged, :bridge => "eth0"

config.vm.network :public_network, :public_network => "wlan0"




반응형

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

,

vagrant 이미지를 직접 만들어 쓰는게 답인가?

그냥 별 생각없이 쓰기에는 상관없을 듯 한데, 딱 입맛에 맞는 이미지를 찾으려니 잘 안보인다.
http://www.vagrantbox.eshttps://vagrantcloud.com 이외에 더 좋은 곳이 없을까?

기본 base CentOS 나 Ubuntu 를 깔고, 내 입맛에 맞게 이미지를 만들어 vagrant cloud 에 올려놓고 쓰는게 좋을 듯 하다.

처음부터 vagrant 이미지를 만드는 방법을 찾아봐야 겠다.


반응형

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

,

vagrant 를 사용하려면 virtualbox 를 먼저 설치해야 한다.

우분투에서는 apt 패키지로 설치하면 편하다.

관련 링크 : https://www.virtualbox.org/wiki/Linux_Downloads 


apt-key 등록 , apt update 시에 다음과 같은 에러가 나오는 경우가 있다.

W: bzip2:/var/lib/apt/lists/partial/download.virtualbox.org_virtualbox_debian_dists_trusty_contrib_binary-amd64_Packages 파일을 받는데 실패했습니다  해시 합이 맞지 않습니다

W: bzip2:/var/lib/apt/lists/partial/download.virtualbox.org_virtualbox_debian_dists_trusty_contrib_binary-i386_Packages 파일을 받는데 실패했습니다  해시 합이 맞지 않습니다


apt 캐시를 삭제(clean) 해주고,  /var/lib/apt/lists 쪽도 삭제를 한후 다시 시도해본다.

# apt-get clean

# rm /var/lib/apt/lists/*
rm: `/var/lib/apt/lists/partial'를 지울 수 없음: 디렉터리입니다

# rm /var/lib/apt/lists/partial/*

# apt-get clean

# apt-get update


뭔가 안된다.

이게 아닌가?

네트웍이 불안해서 그런가?
    => 이게 답인 것 같다. 지금 해보니 해당 에러가 없어졌다.


반응형

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
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

vagrant 로 우분투 테스트 환경을 구성해보자.

타이타늄 세팅에 이상한 부분이 있어서 vagrant 로 센드박스를 만들어 테스트 하기로 한다.


1. vagrant 설치

우분투에는 기본 패키지로 등록되어 있다.

apt-get install vagrant


2. 우분투 14.04 를 vm 으로 세팅한다.

vagrant box add trusty https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box

공개된 패키지 URL 은 http://www.vagrantbox.es 에서 찾을 수 있다.


3. vm 을 기본 환경을 만든다.

$ mkdir ubuntu14.04

$ cd ubuntu14.04

$ vagrant init trusty


A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

ubuntu14.04 디렉토리에 vagrant 파일이 생성되어 있을 것이다. 해당 디렉토리가 기본 실행환경이 된다.


4. vm 환경을 실행해본다.

$ vagrant up

다음처럼 실행되는 화면을 볼 수 있다.

Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'trusty'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for machine to boot. This may take a few minutes...
[default] Machine booted and ready!
[default] Mounting shared folders...
[default] -- /vagrant


5. 가상머신 으로 접속해본다.(ssh)

$ vagrant ssh

다음처럼 가상머신으로 접속된다.

Welcome to Ubuntu 14.04 LTS (GNU/Linux 3.13.0-30-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

  System information as of Sat Jun 28 17:29:31 UTC 2014

  System load:  0.96              Processes:           89
  Usage of /:   2.7% of 39.34GB   Users logged in:     0
  Memory usage: 16%               IP address for eth0: 10.0.2.15
  Swap usage:   0%

  Graph this data and manage this system at:
    https://landscape.canonical.com/

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud

0 packages can be updated.
0 updates are security updates.


vagrant@vagrant-ubuntu-trusty-64:~$


이제 테스트 환경은 갖추어졌다.


반응형

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

,

docker 를 어떻게 하면 잘 활용할 수 있을까?

여러가지 방향을 생각해본다.

vagrant 와는 다르게 linux 전용이라 구성에 제약이 따른다.


1. 최대의 성능.

배포용 : 개발머신(linux / docker 호스트)  => docker 이미지

개발용 : 개발PC(win/mac/linux) => 개발환경(linux / docker) + docker pull  <= 배포 이미지

  [필요사항] 배포용 머신이 팀 또는 개인이 보유하고 있어야 한다.

  [장점] linux 머신에 docker 를 바로 세팅해서 최대 성능을 낸다.
  [단점] 리눅스 환경의 개발PC 가 아니면 원격으로 접속해서 개발해야 한다.


2. 관리의 편의.

배포용 : 개발머신(docker 호스트)  => docker 이미지

개발용 : 개발PC+개발환경[ vagrant (docker) ] + docker pull  <= 배포 이미지

  [장점] 개발PC 의 OS 에 상관없이 개발환경을 세팅가능하다.(win / mac)
  [단점] vagrant(vm) 을 활용하기 때문에 성능저하가 있다.



# 개발이 완료된 후 서비스용 설정

기본 구성은 다음과 같이 하려 한다.

서비스서버(docker) + docker pull  <= 배포이미지

서비스서버 를 AWS / DigitalOcean / GoogleCloud 등의 가상서버로 세팅해도 되고, 서버호스팅의 리얼서버를 이용해도 된다.

클라우드는 성능저하가 있겠지만, 빠른배포 와 편의성을 잘 따져보고 결정하면 되겠다.

충분한 테스트를 해보고 결정하는 것이 좋겠다.


디지털오션쪽에 2개월정도 무료사용가능하니 먼저 테스트해봐야 겠다.
(512M 짜리 * 2개 => 1개월 , 4개 => 2주? , 8개 => 1주일정도? )


(무료 사용은 => 링크 참조)

테스트 해보고 사용해도 되겠다 판단이 되면, Core 를 늘려서 서비스용으로 활용해도 되겠다.


# 서비스 시나리오.

서비스용으로 10대의 클라우드 서버에 배포하는 시나리오를 만들고 테스트 해봐야 겠다.

그러고 보니 docker 모니터링툴도 필요하겠다. (관련 자료도 찾아봐야 겠네)


자동화에 필요한 사항은 다양한 시나리오 사례가 만들어지면, 재미있을 것 같다.


반응형

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

,