OpenStack Class2014.12.13 21:28

안녕하세요~!!


오늘 포스팅하는 내용이 컨트롤러 마지막 설치편이네요~!! 그동안 무슨일이 그렇게 바뻤는지 열심히 포스팅을 하자 해 놓고는 제가 많이 게을렀나봅니다. 오늘은 마지막으로 오케스트레이션 서비스인 Heat와 텔레미터 서비스인 Ceilometer를 설치해 보도록 하겠습니다. 



Heat 설치

Heat는 오픈스택이 Havana 버전으로 릴리즈되면서 새롭게 추가된 오케스트레이션 서비스입니다.  인스턴스를 생성할 때마다 늘 해야 하는 작업을 오케스트레이션 Heat 서비스를 이용하면 자동으로 인스턴스를 생성할 수 있습니다. 쉽게 말해 인스턴스를 생성하기 위한 일련의 과정 즉 프로세스를 오케스트레이션이라 하고, 이런 일련의 과정들을 Heat 서비스를 이용해 자동으로 인스턴스 생성 및 네트워크 설정 등을 할 수 있습니다. 그럼 지금부터 Heat 서버를 설치하겠습니다.


1.     우선 heat-api, heat-api-cnf, heat-engine를 설치합니다.

$ sudo apt-get install heat-api heat-api-cfn heat-engine

 

2.     Heat 서비스를 설치하면 heat.conf 파일의 데이터베이스 정보를 mysql로 수정합니다.

$ sudo vi /etc/heat/heat.conf
[database]
# The SQLAlchemy connection string used to connect to the database
connection = mysql://heat:heatdbpass@10.10.15.11/heat

 

3.     기본 데이터베이스가 mysql이므로 기존 sqlite 파일을 삭제합니다.

$ sudo rm /var/lib/heat/heat.sqlite

 

4.     Mysql에 접속해서 heat 데이터베이스와 사용자 계정을 생성하고 접속 권한을 설정합니다.

$ mysql -u root -p
mysql> CREATE DATABASE heat;
Query OK, 1 row affected (0.00 sec)
 
mysql> GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'localhost' \
IDENTIFIED BY 'heatdbpass';
Query OK, 0 rows affected (0.00 sec)
 
mysql> GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'%' \
IDENTIFIED BY 'heatdbpass';
Query OK, 0 rows affected (0.00 sec)
 
mysql> exit
Bye

 

5.     Heat 데이터베이스가 생성되면 이번에는 테이블을 생성합니다. 다음과 같은 warning 메시지가 뜨지만 테이블은 정상적으로 생성됩니다.

$ sudo su -s /bin/sh -c "heat-manage db_sync" heat
No handlers could be found for logger "heat.common.config"
2014-05-28 03:22:46.990 16004 WARNING heat.openstack.common.db.sqlalchemy.session [-] 
This application has not enabled MySQL traditional mode, which means silent data corruption may 
occur. Please encourage the application developers to enable this mode.

 

6.     /etc/heat/heat.conf 파일의 RabbitMQ 정보와 Keystone 정보를 다음과 같이 설정합니다.

$ vi /etc/heat/heat.conf
[DEFAULT]
...
# Print more verbose output (set logging level to INFO instead
# of default WARNING level). (boolean value)
verbose = True
...
# (Optional) The base directory used for relative --log-file
# paths (string value)
log_dir=/var/log/heat
...
rabbit_host = 10.10.15.11
rabbit_password = rabbitpass
 
[keystone_authtoken]
auth_host = 10.10.15.11
auth_port = 35357
auth_protocol = http
auth_uri = http://10.10.15.11:5000/v2.0
admin_tenant_name = service
admin_user = heat
admin_password = heatpass
 
[ec2authtoken]
auth_uri = http://10.10.15.11:5000/v2.0

 

7.     KeystoneHeat 사용자 계정을 생성합니다.

$ source admin-openrc.sh
$ keystone user-create --name=heat --pass=heatpass --email=heat@email.com
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|  email   |          heat@email.com          |
| enabled  |               True               |
|    id    | d83082aba04c4c1c9a1642995a98aae7 |
|   name   |               heat               |
| username |               heat               |
+----------+----------------------------------+

 

8.     생성한 사용자 계정은 서비스 테넌트에 추가하고 admin 롤을 설정합니다.

$ keystone user-role-add --user=heat --tenant=service --role=admin

 

9.     이번에는 Heat 서비스를 생성합니다.

$ keystone service-create --name=heat --type=orchestration \
--description="Orchestration"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |          Orchestration           |
|   enabled   |               True               |
|      id     | 1ad5cfe5707a449091c35fb1337fea33 |
|     name    |               heat               |
|     type    |          orchestration           |
+-------------+----------------------------------+

 

10.  생성한 Heat 서비스에 Public URL, Internal URL, Admin URL을 설정합니다.

$ keystone endpoint-create \
  --service-id=1ad5cfe5707a449091c35fb1337fea33 \
  --publicurl=http://10.10.15.11:8004/v1/%\(tenant_id\)s \
  --internalurl=http://10.10.15.11:8004/v1/%\(tenant_id\)s \
--adminurl=http://10.10.15.11:8004/v1/%\(tenant_id\)s
+-------------+------------------------------------------+
|   Property  |                  Value                   |
+-------------+------------------------------------------+
|   adminurl  | http://10.10.15.11:8004/v1/%(tenant_id)s |
|      id     |     9da4fee4a0e3496eb0fca1a8f7673198     |
| internalurl | http://10.10.15.11:8004/v1/%(tenant_id)s |
|  publicurl  | http://10.10.15.11:8004/v1/%(tenant_id)s |
|    region   |                regionOne                 |
|  service_id |     1ad5cfe5707a449091c35fb1337fea33     |
+-------------+------------------------------------------+

 

11.  이번에는 CloudFormation 서비스를 생성합니다.

$ keystone service-create --name=heat-cfn --type=cloudformation \
--description="Orchestration CloudFormation"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |   Orchestration CloudFormation   |
|   enabled   |               True               |
|      id     | 9b268d095c19429e817f951fa89621a4 |
|     name    |             heat-cfn             |
|     type    |          cloudformation          |
+-------------+----------------------------------+

 

12.  생성된 CloudFormation 서비스에 다음과 같이 Public URL, Internal URL, Admin URL을 설정합니다.

$ keystone endpoint-create \
  --service-id=9b268d095c19429e817f951fa89621a4\
  --publicurl=http://10.10.15.11:8000/v1 \
  --internalurl=http://10.10.15.11:8000/v1 \
--adminurl=http://10.10.15.11:8000/v1
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
|   adminurl  |    http://10.10.15.11:8000/v1    |
|      id     | d16093dcffad48158967daba3eb9cb41 |
| internalurl |    http://10.10.15.11:8000/v1    |
|  publicurl  |    http://10.10.15.11:8000/v1    |
|    region   |            regionOne             |
|  service_id | 9b268d095c19429e817f951fa89621a4 |
+-------------+----------------------------------+

 

13.  마지막으로 Heat 서비스를 재시작합니다.

$ sudo service heat-api restart
heat-api stop/waiting
heat-api start/running, process 16305
$ sudo service heat-api-cfn restart
heat-api-cfn stop/waiting
heat-api-cfn start/running, process 16317
$ sudo service heat-engine restart
heat-engine stop/waiting
heat-engine start/running, process 16329

 

Ceilometer 설치

Ceilometer 역시 오픈스택 Havana 버전이 릴리즈 되면서 추가된 텔레미터 서비스입니다. 사용자들이 스토리지 용량을 얼마나 사용하는지 모니터링할 수 있는 기능을 제공합니다. 그럼 지금부터 Ceilometer를 설치해 보도록 하겠습니다.

 

1.     다음과 같이 ceilometer를 설치합니다.

$ sudo apt-get install ceilometer-api ceilometer-collector ceilometer-agent-central \
  ceilometer-alarm-evaluator ceilometer-alarm-notifier python-ceilometerclient

 

2.     Ceilometer는 다른 서비스와 다르게 NoSql인 몽고(Mongo) DB를 사용하므로 몽고 DB를 설치합니다.

$ sudo apt-get install mongodb-server

 

3.     몽고 DB가 설치되면 mongodb.conf 파일의 bind_ip를 컨트롤러 노드 IP로 수정합니다.

$ sudo vi /etc/mongodb.conf
bind_ip = 10.10.15.11

 

4.     몽고 DB를 재시작합니다.

$ sudo service mongodb restart

 

5.     굵게 표시한 부분을 복사하고 실행해서 몽고 DBceilometer 사용자 계정을 추가합니다.

$ sudo mongo --host 10.10.15.11 --eval '
db = db.getSiblingDB("ceilometer");
db.addUser({user: "ceilometer",
            pwd: "ceilometerdbpass",
            roles: [ "readWrite", "dbAdmin" ]})'
 
MongoDB shell version: 2.4.9
connecting to: 10.10.15.11:27017/test
{
             "user" : "ceilometer",
             "pwd" : "c8e9d18c1687378d638b2bee2138c785",
             "roles" : [
                          "readWrite",
                          "dbAdmin"
             ],
             "_id" : ObjectId("5384dd7a8dd44e7534eb12fe")
}

 

6.     Ceilometer.conf 파일을 열어 데이터베이스를 몽고 DB로 접속할 수 있게 수정합니다.

$ sudo vi /etc/ceilometer/ceilometer.conf
[database]
# The SQLAlchemy connection string used to connect to the
# database (string value)
connection = mongodb://ceilometer:ceilometerdbpass@10.10.15.11:27017/ceilometer

 

7.     Ceilometer Token을 생성하기 위해 임의의 랜덤 문자열을 생성합니다.

$ openssl rand -hex 10
115ca7336ad88e5c64a8

 

8.     생성된 랜덤 문자열은 ceilometer.conf 파일의 meterin_secret 부분에 다음과 같이 입력하고, RabbitMQ 정보를 설정합니다.

$ sudo vi /etc/ceilometer/ceilometer.conf
[publisher]
# Secret value for signing metering messages (string value)
metering_secret = 3a82c1a617f1a797a90b #CEILOMETER_TOKEN
[DEFAULT]
log_dir = /var/log/ceilometer
rabbit_host = 10.10.15.11
rabbit_password = rabbitpass

 

9.     Keystone ceilometer 사용자 계정을 생성합니다.

$ keystone user-create --name=ceilometer --pass=ceilometerpass --email=ceilometer@email.com
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|  email   |       ceilometer@email.com       |
| enabled  |               True               |
|    id    | c93f2948014344d6908dd3ec40097d33 |
|   name   |            ceilometer            |
| username |            ceilometer            |
+----------+----------------------------------+

 

10.  생성된 사용자 계정은 서비스 테넌트에 추가하고 admin 롤을 할당합니다.

$ keystone user-role-add --user=ceilometer --tenant=service --role=admin

 

11.  사용자 계정 생성이 완료되면 ceilometer.conf 파일에 keystone 정보를 수정합니다.

$ sudo vi /etc/ceilometer/ceilometer.conf
[keystone_authtoken]
auth_host = 10.10.15.11
auth_port = 35357
auth_protocol = http
auth_uri = http://10.0.0.11:5000
admin_tenant_name = service
admin_user = ceilometer
admin_password = ceilometerpass
[service_credentials]
os_auth_url = http://10.10.15.11:5000/v2.0
os_username = ceilometer
os_tenant_name = service
os_password = ceilometerpass

 

12.  이번에는 Ceilometer 서비스를 생성합니다.

$ keystone service-create --name=ceilometer --type=metering \
--description="Telemetry"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |            Telemetry             |
|   enabled   |               True               |
|      id     | cfcc2fca4fa84ccebcdc8a1b57d51016 |
|     name    |            ceilometer            |
|     type    |             metering             |
+-------------+----------------------------------+

 

13.  생성한 서비스에 Public URL, Internal URL, Admin URL을 설정합니다.

$ keystone endpoint-create \
  --service-id=cfcc2fca4fa84ccebcdc8a1b57d51016 \
  --publicurl=http://10.10.15.11:8777 \
  --internalurl=http://10.10.15.11:8777 \
--adminurl=http://10.10.15.11:8777
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
|   adminurl  |     http://10.10.15.11:8777      |
|      id     | 64f7781ff5dd4ea69aa3c585778e09f0 |
| internalurl |     http://10.10.15.11:8777      |
|  publicurl  |     http://10.10.15.11:8777      |
|    region   |            regionOne             |
|  service_id | cfcc2fca4fa84ccebcdc8a1b57d51016 |
+-------------+----------------------------------+

 

14.  Ceilometer 서비스를 재시작합니다.

$ sudo service ceilometer-agent-central restart
$ sudo service ceilometer-api restart
$ sudo service ceilometer-collector restart
$ sudo service ceilometer-alarm-evaluator restart
$ sudo service ceilometer-alarm-notifier restart


** 일반적으로 모든 서비스는 여기까지 진행을 하면 서비스 설치가 완료됩니다. 그러나, Ceilometer는 다른 서비스와 다르게 텔레미터링 서비스이기 때문에 모니터링을 적용할 서비스들에 Ceilometer를 쓰겠다고 환경설정을 별도로 해 주어야 합니다. 그럼 지금부터 Glance, Cinder, Swift에 Ceilometer를 사용하겠다고 설정해 보도록 하겠습니다.


15.  Glance Ceilometer 적용하겠습니다. /etc/glance/glance-api.confnotification_driver messaging으로 수정합니다.

$ sudo vi /etc/glance/glance-api.conf
notification_driver = messaging

 

16.  Glance 서비스를 재시작합니다.

$ sudo service glance-registry restart
$ sudo service glance-api restart

 

17.  CinderCeilometer를 적용하겠습니다. /etc/cinder/cinder.conf 파일의 control_echangenotification_driver를 다음과 같은 값으로 설정합니다.

$ sudo vi /etc/cinder/cinder.conf
control_exchange = cinder
notification_driver = cinder.openstack.common.notifier.rpc_notifier

 

18.  Cinder 서비스를 재시작합니다.

$ sudo service cinder-api restart
$ sudo service cinder-scheduler restart

 

19.  SwiftCeilometer를 적용하겠습니다. KeystoneResellerAdmin 롤을 추가합니다.

$ keystone role-create --name=ResellerAdmin
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|    id    | dbd086a41ebe44eba03da9a57ce359c0 |
|   name   |          ResellerAdmin           |
+----------+----------------------------------+

 

20.  ceilometer 계정에 방금 생성한 ResellerAdmin ID를 설정합니다.

$ keystone user-role-add --tenant service --user ceilometer \
      --role dbd086a41ebe44eba03da9a57ce359c0

 

21.  /etc/swift/proxy-server.conf 파일에 ceilometer 서비스를 추가합니다.

$ sudo vi /etc/swift/proxy-server.conf
[pipeline:main]
pipeline = healthcheck cache authtoken keystoneauth ceilometer proxy-server
 
[filter:ceilometer]
use = egg:ceilometer#swift

 

22.  마지막으로 swift-proxy 서비스를 재시작합니다.

$ sudo service swift-proxy restart

 


이렇게해서 컨트롤러 노드에 설치되는 서비스들을 하나 하나씩 설치해 보았습니다. 다음 포스팅에서는 네트워크 노드에 설치될 서비스들을 설치해 볼 예정입니다. 그럼, 다음시간에 다시 만나요~!!

Posted by 나리 짱!!! naleejang