티스토리 뷰

몇일동안 OpenStack 과 씨름을 하면서 얻은 경험과 문제를 해결하기 위해서 반복했던 실수와 해결 과정들을 여러분들과 함께 공유하기로 했습니다. 그 이유는 저 또한 많은 분들이 이미 경험했던 것들을 받았기 때문입니다. 


그럼 지금부터 운영 중인 OpenStack에 Compute Node를 추가하기 위해 어떻게 했었는지 좌충우돌 그 경험담을 여러분께 들려드리고자 합니다. 




클라우드 노드에 생성된 VM 인스턴스가 인터넷이 되지 않는다는 사실을 알았을 때 문득 이런 생각이 들었다. 그러면 Master Server 즉 클라우드 노드를 다른 노드로 변경하면 되지 않을까? 하는 생각이 문득 스치고 지나갔다. 그래서, 남은 마지막 서버에다가 OpenStack 클라우드 서버를 설치하기로 하였다. 결과는 로컬의 Proxy Server에 연결을 실패하여 설치 실패~!!


그럼 이번에는 컴퓨트 노드로 설치해 보자~!! 그리고 다시 도전~!! 결과는 역시 또 실패~!! 이유는 같은 이유였다. 로컬의 Proxy Server에 연결을 할 수 없어서,…


다음과 같은 로그를 남기고 설치 중단~!!

+ screen -S stack -p n-api -X stuff 'cd /opt/stack/nova && /usr/local/bin/nova-api^M'

+ echo 'Waiting for nova-api to start...'

Waiting for nova-api to start...

+ timeout 60 sh -c 'while ! http_proxy= wget -q -O- http://127.0.0.1:8774; do sleep 1; done'

+ echo 'nova-api did not start'

nova-api did not start

+ exit 1

+ clean

+ local r=1

++ jobs -p

+ kill

+ exit 1

 

그럼, nova-api를 시작할 때 어떤 문제가 발생하길래 오류가 난 걸일까? 하고 screen 로그 분석~!

cd /opt/stack/nova && /opt/stack/nova/bin/nova-api

2012-11-06 16:59:56 16224 DEBUG nova.wsgi [-] Loading app ec2 from /etc/nova/api-paste.ini load_app /opt/stack/nova/nova/wsgi.py:383

2012-11-06 16:59:56 16224 CRITICAL nova [-] No module named api

2012-11-06 16:59:56 16224 TRACE nova Traceback (most recent call last):

2012-11-06 16:59:56 16224 TRACE nova   File "/opt/stack/nova/bin/nova-api", line 50, in <module>

2012-11-06 16:59:56 16224 TRACE nova     server = service.WSGIService(api)

2012-11-06 16:59:56 16224 TRACE nova   File "/opt/stack/nova/nova/service.py", line 570, in __init__

2012-11-06 16:59:56 16224 TRACE nova     self.app = self.loader.load_app(name)

2012-11-06 16:59:56 16224 TRACE nova   File "/opt/stack/nova/nova/wsgi.py", line 384, in load_app

2012-11-06 16:59:56 16224 TRACE nova     return deploy.loadapp("config:%s" % self.config_path, name=name)

중간 생략 …

2012-11-06 16:59:56 16224 TRACE nova     return import_class(import_str)(*args, **kwargs)

2012-11-06 16:59:56 16224 TRACE nova   File "/opt/stack/nova/nova/api/ec2/cloud.py", line 186, in __init__

2012-11-06 16:59:56 16224 TRACE nova     self.volume_api = volume.API()

2012-11-06 16:59:56 16224 TRACE nova   File "/opt/stack/nova/nova/volume/__init__.py", line 27, in API

2012-11-06 16:59:56 16224 TRACE nova     cls = importutils.import_class(nova.flags.FLAGS.volume_api_class)

2012-11-06 16:59:56 16224 TRACE nova   File "/opt/stack/nova/nova/openstack/common/importutils.py", line 30, in import_class

2012-11-06 16:59:56 16224 TRACE nova     __import__(mod_str)

2012-11-06 16:59:56 16224 TRACE nova ImportError: No module named api

2012-11-06 16:59:56 16224 TRACE nova

 

그럼 github에 있는 Nova 소스를 살펴봐야겠다는 생각이 문득.. 그래서 살펴보았다.



내가 OpenStack을 설치했던 건 10 8일에서 9~!! 현재 한달이 지났다. 그런데, github에 있는 Nova 소스는 한시간 전에 업데이트가 일어났다. 그러면 기존에 설치했던 Nova 소스와 현재 다운받아서 설치한 Nova 소스는 버전이 다르며, 현재 Nova 소스에 버그가 있을수도 있다.


그리하여, 기존에 오픈스택 컴퓨트가 설치되어 있는 컴퓨터 노드의 소스를 복사하기로 결정!!


우선, tar를 이용하여 기존에 Compute Node /opt/stack/ 폴더에 있는 Nova 관련 소스들을 모두 묶는다. 이때, backup 폴더를 하나 생성하여 tar로 묶은 파일들을 한군데에 모아놓으면 다음에 사용할 때 편하다.

$ mkdir backup

$ tar cvf backup/glance.tar glance

$ tar cvf backup/keystone.tar keystone

$ tar cvf backup/nova.tar nova

$ tar cvf backup/python-glanceclient.tar python-glanceclient

$ tar cvf backup/python-keystoneclient.tar python-keystoneclient

$ tar cvf backup/python-novaclient.tar python-novaclient

$ tar cvf backup/python-openstackclient.tar python-openstackclient

 

tar로 묶인 압축파일들을 설치하고자 하는 서버로 보낸다.

$ scp *.tar stack@openstack04:/opt/stack/backup

glance.tar                                                                100% 9260KB   9.0MB/s   00:00

keystone.tar                                                             100%   13MB  12.7MB/s   00:01

nova.tar                                                                   100%  126MB  41.9MB/s   00:03

python-glanceclient.tar                                              100%  630KB 630.0KB/s   00:00

python-keystoneclient.tar                                           100%  780KB 780.0KB/s   00:00

python-novaclient.tar                                                 100% 1540KB   1.5MB/s   00:00

python-openstackclient.tar                                         100%  390KB 390.0KB/s   00:00

 

전송이 완료되면 해당 서버로 가서 다시 tar를 이용해 압축된 소스를 푼다.

$ tar xvf glance.tar

$ tar xvf keystone.tar

$ tar xvf nova.tar

$ tar xvf python-glanceclient.tar

$ tar xvf python-keystoneclient.tar

$ tar xvf python-novaclient.tar

$ tar xvf python-openstackclient.tar

$ mv *.tar /opt/stack

 


그럼 다시 devstack 폴더로 이동하여 서비스를 재 설치하거나 재 시작한다. 나는 재 시작하였다.

$ ./restart_stack.sh

 

재시작이 완료되었으면 이제 nova-manage를 통하여 service가 정상적으로 동작하는지 확인해 본다. 역시나 서비스는 확인 안되고, 오류들만 잔뜩~~~ 보인다.

다시 삽질시작.. 뭐가 문제일까? 모르겠다. 오픈스택 커뮤니티로 다시 질문~!! 누군가는 이런 경험이 있겠지누군가가 답변을 올렸다. 확인.. nova.conf를 보면 된다. 그래서 /etc/nova/nova.conf 확인~!!

$ cat nova.conf

[DEFAULT]

... 중간 생략 ...

osapi_compute_extension=nova.api.openstack.compute.contrib.standard_extensions

my_ip=10.10.10.4

sql_connection=

libvirt_type=kvm

libvirt_cpu_mode=none

instance_name_template=instance-%08x

…. 이하 생략 …

sql_connection에 값이 빠져있는걸 발견~!! 저거다.. 바로 다른 컴퓨터 노드의 nova.conf를 보고 복사해서 붙여넣기를 실행한다.

$ cat nova.conf

[DEFAULT]

... 중간 생략 ...

osapi_compute_extension=nova.api.openstack.compute.contrib.standard_extensions

my_ip=10.10.10.4

sql_connection=mysql://root:mypassword@www.host.co.kr/nova?charset=utf8

libvirt_type=kvm

libvirt_cpu_mode=none

instance_name_template=instance-%08x

이하 생략 …

 

이제 다시 서비스를 재 시작한다.

$ ./restart_stack.sh

 

nova-manage를 활용하여 서비스가 정상적으로 돌고 있는지 확인해 본다.

$ nova-manage service list

2012-11-07 16:30:21 DEBUG nova.utils [req-fdc0c17c-4048-4038-b0cb-5f1e3874fb6c None None] backend <module 'nova.db.sqlalchemy.api' from '/opt/stack/nova/nova/db/sqlalchemy/api.pyc'> from (pid=20778) __get_backend /opt/stack/nova/nova/utils.py:502

Binary           Host                                 Zone             Status     State Updated_At

nova-compute     openstack01                          nova             enabled    :-)   2012-11-07 07:30:17

nova-cert        openstack01                          nova             enabled    :-)   2012-11-07 07:30:18

nova-scheduler   openstack01                          nova             enabled    :-)   2012-11-07 07:30:20

nova-network     openstack01                          nova             enabled    :-)   2012-11-07 07:30:13

nova-consoleauth openstack01                          nova             enabled    :-)   2012-11-07 07:30:15

nova-volume      openstack01                          nova             enabled    :-)   2012-11-07 07:30:13

nova-compute     openstack02                          nova             enabled    :-)   2012-11-07 07:30:32

nova-network     openstack02                          nova             enabled    :-)   2012-11-07 07:30:28

nova-volume      openstack02                          nova             enabled    XXX   2012-10-21 00:12:02

nova-compute     openstack03                          nova             enabled    :-)   2012-11-07 07:30:50

nova-network     openstack03                          nova             enabled    :-)   2012-11-07 07:30:43

nova-volume      openstack03                          nova             enabled    XXX   2012-10-21 00:12:12

nova-compute     openstack04                          nova             enabled    :-)   2012-11-07 07:30:17

nova-network     openstack04                          nova             enabled    :-)   2012-11-07 07:30:13

nova-volume      openstack04                          nova             enabled    :-)   2012-11-07 07:30:14

 

잘 돌아간다. 드디어, 운영 중인 OpenStack Compute Node 추가 완료~!!

알면 쉽지만, 모르면 이렇게 삽질해야 한다. 이제 또 이런 일이 발생하게 되면 그때는 삽질을 하지 않겠지… 



** Tip **

이번 삽질을 통해 또 다시 배운 것 하나 더 팁으로 DevStack 설치를 레파지토리를 지정하는 곳이 있다. 그런 것도 있었어?? 다시 github에 가서 확인~!! 정말 있다.


그럼 devstack에서는 어디에서 레파지토리를 지정하는 거지?? stackrc에 있다.

# stackrc

#

중간 생략

# Repositories

# ------------

 

# Base GIT Repo URL

# Another option is http://review.openstack.org/p

GIT_BASE=https://github.com

 

# metering service

CEILOMETER_REPO=https://github.com/stackforge/ceilometer.git

CEILOMETER_BRANCH=master

 

# volume service

CINDER_REPO=${GIT_BASE}/openstack/cinder

CINDER_BRANCH=master

 

# volume client

CINDERCLIENT_REPO=${GIT_BASE}/openstack/python-cinderclient

CINDERCLIENT_BRANCH=master

 

# compute service

NOVA_REPO=${GIT_BASE}/openstack/nova.git

NOVA_BRANCH=master

이하 생략

 

이번 작업을 통해서 정말 많은 것들을 배웠다. 이렇게 무식할 수가~!!

다음에는 이런일이 일어나지 않겠지~ 대신 새로운 모르는 다른 일이 날 기다리고 있을 것이다.


모르는 걸을 챙피해 하거나 두려워 하지 말자~! 

새로운 것을 배울수 있는 좋은 기회라고 생각하자

공부하고, 배우면 나도 할 수 있다.




최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함