반응형
반응형

Vagrant를 알기 전까지.. 로컬에 리눅스 가상환경 구축을 위해서 했던 짓은

VirtualBox 설치 + OS iso 파일 구하기 + 기타 네트워크 설정 + 삼바 설정 + 엄청난 시간 + ... 등등 이었다.


하지만, Vagrant를 알고 나서는..

VirtualBox 설치 + Vagrant 설치 + 간단한 명령어 + 네트워크 및 공유폴더 설정 + 짧은 시간 으로 가능하게 되었다.



CentOS 가상환경을 Vagrant를 이용하여 구축해보자.


1. VirtualBox와 Vagrant를 설치한다. (모두 기본설정으로 깔아도 상관없음)


2. Vagrant 세팅

http://www.vagrantbox.es/ 에서 이미지 파일들을 제공을 하고 있는데, 이걸 그냥 vagrant에 add만 시켜주면 된다.

지금 다니는 회사에서 가장 많이 사용하는 CentOS 6.5버전을 깔아보도록 하자. 

위 사이트에 들어가보면, 아래 명령어 사용법도 친절하게 나와있음.

$ vagrant box add centOS6.5 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box
$ vagrant init centOS6.5
$ vagrant up


CentOS 가상환경 구축이 완료되었다


3. 이제 네트워크 설정을 해보자.

vagrant init을 하면, 현재 경로에 VagrantFile이라는 파일이 생기는데, 이것을 열어주고 아래와 같은 부분을 수정하여, 사설 IP를 하나 할당받도록 하자. 주석만 풀면 될 것임.

config.vm.network "private_network", ip: "192.168.33.10"

공인 아이피 설정은 config.vm.network "public_network" 부분을 이용하면 되는데, 공짜로 해주는 것 같진 않고..

별도 DNS서버 같은게 필요할 것 같아서 시도해보지 않았음.


4. 공유폴더 설정을 해보자.

config.vm.synced_folder "D:/data", "/home/vagrant/data"       // 내 컴퓨터의 D:/data경로를 가상 환경의 /home/vagrant/data와 동기화 시킨다.

심볼릭 링크처럼 동작을 하는데, 삼바보다 훨씬 편리한 듯..


5. 포트포워딩 설정을 해보자.

가상환경에서 구동중인 예를 들면, httpd가 80포트로 동작을 하고 있는데, 

사내에 다른 사람들은 내 가상환경에 공인 아이피 설정이 되어 있지 않는한, 접근을 할 수 있는 기회조차 얻지 못하게 되는게 보통이다.

그래서, Vagrant는 내 컴퓨터 IP의 포트를 통해 가상환경 포트로 접근이 가능하도록 포트포워딩 설정을 제공을 한다.

config.vm.network "forwarded_port", guest: 80, host: 8180      // 가상환경의 80포트를 내 컴퓨터의 8180포트로 들어갈 수 있도록 포워딩

참고로 여러개 설정 가능.


빌드 환경이 Linux 환경이거나, 공용으로 사용하는 Linux머신이 거지같이 느리다면...

Vagrant를 이용해서 가상환경을 구축해서 사용하는 것을 추천합니다.


Docker 공부하려고 Vagrant부터 알아보고 있는데, Docker보다 이게 더 대박인듯...


※ 머신 부팅 시 계속적으로 timeout이 지속된다면, cmos 셋업의 cpu 가상화 지원 활성화 옵션을 켜면 해결이 되는 경우가 있다.

반응형
,
반응형

모든 설치방법은 Docker 공식홈 (https://docs.docker.com/installation/centos/) 을 참고했음.


CentOS 6.5는 일반적으로 Epel Repo를 포함하지 않기 때문에,

CentOS 7버전대와는 다르게 yum install docker-io 명령어를 쳐도 찾을 수 없다고 나온다.


해결방법은 Epel Repo를 Yum repository에 추가해주면 된다.


먼저 Epel Repo가 OS에 설치되어 있는지 확인한다.

$ rpm -qa | grep epel-release


아무것도 나오지 않으면, Epel Repo가 없는 것이고, 뭔가 나오면 추가로 설치할 필요가 없다.


CentOS 6.x 버전에서 지원하는 최신버전의  Epel Repo를 설치해준다.

$ sudo rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm


아래 명령어를 입력하여 yum repo에 포함이 되었는지도 확인 후,

$ yum repolist


Docker-io를 설치해준다.

$ yum install docker-io


Docker service를 올려준다

$ sudo service docker start


이제 CentOS 6.5버전에서 Docker를 사용할 수 있게 되었다!

참고로 Docker를 사용할 때 모든 명령어는 sudo 권한을 필요로 하는 것 같다.

반응형
,
반응형

1. 어떤시간대를 머신에서 지원하는지 확인

$ ls /usr/share/zoneinfo/


2. Seoul시간으로 변경

$ cp -f /usr/share/zoneinfo/Asia/Seoul /etc/localtime


물론 소프트 심볼릭 링크로 처리하는 경우도 많다.

반응형
,
반응형

추후 버전에선 고쳐질지도 모르겠는데,

Vagrant 1.7.3 버전에서는 config.vm.network의 "forwarded_port" 설정 시에, host_ip를 명시해주지 않으면,

virtualBox에서 공백으로 인식을 하게되어, vm에 private ip가 할당되어 있다고 하더라도,

동일한 네트워크 상의 다른 사람 PC에서는 접근을 못하는 문제가 생기는 것 같다.


이럴 경우에는 host_ip 옵션을 추가로 줘서, 내 PC의 private IP를 명시를 해주면, 해결이 된다.


ssh 접근의 경우 default로 설정이 되어 있어서, VagrantFile에는 명시가 되어 있지 않은데,

설정 파일에 22번 포트에 대해서 명시를 해주면, default설정이 새롭게 명시한 설정으로 매핑이 된다.

반응형
,
반응형

RabbitMQ fanout 테스트를 위해, 로컬에서 vagrant로 돌고 있던 동일한 vm이 하나 더 필요하게 되었다.


이런경우 vagrant up시에 뒤에 붙는 파라미터 값으로 구분을 해야 하는데,

VagrantFile을 열어서 아래와 같이 처리를 해주면된다.


config.vm.define "vm1" do |vm1|
// 파라미터로 vm1이라는 문자열이 들어오면 실행.
end

config.vm.define "vm2" do |vm2|
// 파라미터로 vm2이라는 문자열이 들어오면 실행.
end



처음에 설정할 땐, vm1, vm2를 init이나 box add시에 따로 지정을 해줘야되는줄 알았는데,

그냥 파라미터여서 허무했다.

반응형
,
반응형

vagrant package 하기 전에,

/etc/udev/rules.d/70-persistent-net.rules 경로에 가서 이 파일을 지워주면 된다고 한다.


자체적으로 mac address를 생성하는데, 그게 중복되서라나 뭐라나;;


이미 받은 경우에는 vagrant ssh로 접근해서 지우고 reboot하면 된다.

반응형
,
반응형

클러스터 구성한 RabbitMQ중 노드 하나가 내려간 경우, 

client에서 죽은 노드로 요청을 보내면 실패를 하기 때문에, Load Balancer를 통해 health체크를 하여,

죽은 노드로는 요청을 보내지 않도록 하기 위해 HAProxy를 사용해보았다.


일단 HAProxy를 설치해보도록 하자. (CentOS 기준)

CentOS버전이 낮다면, yum repository에 포함이 되어 있지 않은 경우가 있으므로, repo를 추가 해준 후 install한다.

$ rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

$ sudo yum install haproxy


설치가 되었으니, 설정을 해보도록 한다.

설정 파일은 /etc/haproxy/haproxy.cfg에 위치해 있다.

# haproxy.cfg
listen rabbitmq-cluster 192.168.33.10:5670
balance roundrobin

mode tcp server node-01 192.168.33.10:5672 check inter 5s rise 2 fall 3 server node-02 192.168.33.11:5672 check inter 5s rise 2 fall 3 server node-03 192.168.33.12:5672 check inter 5s rise 2 fall 3

192.168.33.10번 서버에서 5670포트로, 아래 나열된 server들에 대해서

tcp방식의 roundrobin방식으로 밸런싱을 한다. 


이제 서비스를 올리면 끝난다.

$ service haproxy start


이제 client단에서 10번 서버의 5670포트만 바라보도록 설정을 변경하면 되고,

노드를 일부로 죽여서 테스트를 해보면, 죽은 노드로는 밸런싱이 되지 않도록 구성이 되었다.


하지만, HAProxy를 단일로 두게되면, 심각한 SPOF이기 때문에 slave구성을 해야될 듯 하다.

slave구성은 완료되는 대로 다음포스트에 작성하는걸로..

반응형

'개발 > Linux, System' 카테고리의 다른 글

[Vagrant] CentOS 가상환경 세팅  (0) 2016.06.10
[CentOS] TimeZone 변경  (0) 2016.06.10
[HAProxy] Logging  (0) 2016.06.10
[Shell] Expect 사용 시 timeout 설정  (0) 2016.06.10
[Expect] Crontab에서 사용 시 주의점  (0) 2016.06.10
,
반응형

Http의 경우 기본설정이라 로그가 잘 남는진 모르겠는데,

RabbitMQ의 경우는 TCP로 연결을 해서 그런지, 로그가 남질 않았다.


일단 /etc/haproxy/haproxy.cfg에 들어가서

option tcplog 항목을 추가를 해줬다.


그리고 cfg파일 상단에 보면, syslog에다가 local2.*    /var/log/haproxy.log 이런걸 설정해주라고 되어있다.

일단 rsyslog설정파일(/etc/rsyslog.conf)에 들어가서, udp로그와 tcp로그부터 활성화를 시켜주어야 한다.

아래 부분을 찾아서 주석을 해제해준다.


#/etc/rsyslog.conf
$ModLoad imudp
$UDPServerRun 514

$ModLoad imtcp
$InputTCPServerRun 514

/etc/rsyslog.d/haproxy.conf 파일을 만들어서, 아까 주석에 달려있던 내용을 그대로 넣어준다. 

(local2 뒤의 *는 로그 레벨이니, 로그 레벨에 따라 파일을 나눠서 저장하는 것도 가능하다.)


#/etc/syslog.d/haproxy.conf
local2.* /var/log/haproxy.log

rsyslog와 haproxy 서비스를 재시작한다.


$ service rsyslog restart
$ service haproxy restart


이제부터 /var/log/haproxy.log 파일에 모든 로그 레벨에 대한 로그가 남게 되었다.

반응형
,
반응형
mkdir -p /home/vagrant/.ssh 

sudo chmod 0700 /home/vagrant/.ssh 

sudo wget --no-check certificate https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub -O /home/vagrant/.ssh/authorized_keys 

sudo chmod 0600 /home/vagrant/.ssh/authorized_keys 

sudo chown -R vagrant /home/vagrant/.ssh



패키징할때 뭘 잘못했는진 모르겠는데.. vagrant ssh로 직접 접근해서 ssh key를 다시 설치하니까 잘된다.


반응형
,
반응형
#!/bin/sh

expect -c "shell 명령어" 



이런식으로 작성을 하게 되는데, expect가 눈에 보이지 않는 timeout 10초를 가지고 있다.

90메가짜리 파일을 국내에서 유럽망으로 전송했는데, 10초만에 끝나길래.. 빠르구나라고 좋아라했더니만

유럽망에 있는 서버에 들어가보니 보내지다가 말았다-_-


이런 경우 timeout을 늘려서 해결이 가능하다.


스크립트 자체를 bash가 아닌 expect로 사용한다면, 상단에다가

set timeout 60 // 타임아웃 60초

이런식으로 붙여주면 되고,


bash의 경우

expect -c "set timeout 60" 과 같이, -c 하위에 넣어주고 이후 명령어를 작성하면, 정상적으로 동작을 한다.


이걸 타임아웃 없이 젠킨스에 넣고 테스트를 해봤었는데, 뭔가 이상하길래

shell로 만들어서 돌려보니 이런 문제였음.. ㅠㅠ

반응형
,
반응형