ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 서비스가 가능한 오픈스택 설치8편 - 컨트롤러 노드 설치6
    openstack 2014. 12. 18. 11:59
    728x90

    안녕하세요~!!


    오늘 포스팅하는 내용이 컨트롤러 마지막 설치편이네요~!! 그동안 무슨일이 그렇게 바뻤는지 열심히 포스팅을 하자 해 놓고는 제가 많이 게을렀나봅니다. 오늘은 마지막으로 오케스트레이션 서비스인 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.     Keystone에 Heat 사용자 계정을 생성합니다.

    $ 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.     굵게 표시한 부분을 복사하고 실행해서 몽고 DB에 ceilometer 사용자 계정을 추가합니다.

    $ 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.conf에 notification_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.  Cinder에 Ceilometer를 적용하겠습니다. /etc/cinder/cinder.conf 파일의 control_echange와 notification_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.  Swift에 Ceilometer를 적용하겠습니다. Keystone에 ResellerAdmin 롤을 추가합니다.

    $ 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

     


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


    출처 - http://naleejang.tistory.com/139

Designed by Tistory.