4 오픈스택 구축


4.3 컴퓨트 노드(1/2) 설치

멀티노드 Neutron 네트워크 구성도


4.3.1 NTP 설치

컨트롤러 노드에 NTP 서버를 설치하였으므로 컴퓨트 노드에는 NTP 클라이언트를 설치한다. apt-get 명령어를 이용해 ntp 패키지를 설치하고 컨트롤러 노드의 NTP 서버와 시간 동기화 및 BISO 시간과 동기화한다.

 

# NTP 클라이언트 설치

$ sudo apt-get install ntp

$ sudo ntpdate -u 192.168.0.11

15 May 10:12:09 ntpdate[1942]: adjust time server 192.168.0.11 offset 0.008702 sec

$ sudo hwclock -w


4.3.2 데이터베이스 설치

컨트롤러 노드에서 이미 MySQL 서버를 설치하였으므로 컴퓨트 노드는 Python Mysql API만 설치하면 된다.


# Python Mysql API 설치

$ sudo apt-get install python-mysqldb


4.3.3 오픈스택 아이스하우스 패키지 설치

apt-get 명령어를 이용해 python-software-properties 패키지를 설치하고 repository에 icehouse를 추가한다. 그리고 시스템 업데이트를 한 후 재부팅한다.


# 아이스하우스 패키지 설치

$ sudo apt-get install python-software-properties

$ sudo add-apt-repository cloud-archive:icehouse

[ ENTER ] 누른다.

$ sudo apt-get update && sudo apt-get dist-upgrade && sudo reboot


4.3.4 Nova Compute 설치

하이퍼바이저와 nova 컴퓨트를 설치한다.


# 하이퍼바이저 및 nova 컴퓨트 설치

$ sudo apt-get install nova-compute-kvm python-guestfs qemu-kvm


root만 하이퍼바이저에 접근할 수 있도록 권한을 설정한다.


# 하이퍼바이저 접근 권한 설정

$ sudo dpkg-statoverride --update --add root root 0644 /boot/vmlinuz-$(uname -r)


커널 버전에서 사용자의 접근을 막기 위해 /etc/kernel/postinst.d/statoverride 파일을 생성해서 그림과 같이 설정한다.


# 커널 버전에서 사용자 접근 제한 설정

$ sudo vi /etc/kernel/postinst.d/statoverride

#!/bin/sh

version="$1"

# passing the kernel version is required

[ -z "${version}" ] && exit 0

dpkg-statoverride --update --add root root 0644 /boot/vmlinuz-${version}


/etc/nova/nova.conf 파일을 열어 RabbitMQ, Glance, VNC, Keystone 인증정보를 추가한다.


# nova.conf 파일 설정

$ sudo vi /etc/nova/nova.conf

[DEFAULT] # line : 1

auth_strategy=keystone # line : 17

rpc_backend=rabbit

rabbit_host=192.168.0.11 # controller eth0 IP

rabbit_password=rabbitpass

my_ip=192.168.0.31 # compute eth0 IP

vnc_enabled=True

vncserver_listen=0.0.0.0

vncserver_proxyclient_address=192.168.0.31 # compute eth0 IP

novncproxy_base_url=http://192.168.0.11:6080/vnc_auto.html

glance_host=192.168.0.11 # controller eth0 IP


[database]

connection=mysql://nova:novadbpass@192.168.0.11/nova


# nova.conf 파일 설정

[keystone_authtoken]

auth_uri=http://192.168.0.11:5000

auth_host=192.168.0.11

auth_port=35357

auth_protocol=http

admin_tenant_name=service

admin_user=nova

admin_password=novapass


egrep -c '(vmx|svm)' /proc/cpuinfo 값이 0인 경우 그림과 같이 kvm을 qemu로 변경한다.


# nova-compute.conf 파일 설정

$ sudo vi /etc/nova/nova-compute.conf

1 [DEFAULT]

2 compute_driver=libvirt.LibvirtDriver

3 [libvirt]

4 virt_type=qemu


불필요한 nova.sqlite 파일을 삭제 후 nova-compute 대몬을 재시작한다.


# nova-compute 대몬 재시작

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

$ sudo service nova-compute restart


4.3.5 Neutron Compute 설치

컴퓨트 노드에서 생성되는 인스턴스의 IP를 할당하고 다른 컴퓨트 노드간의 인스턴스들이 서로 통신할 수 있도록 Neutron 컴퓨트를 설치한다. 다음은 /etc/sysctl.conf 파일에 rp_filter값을 추가한다.


# sysctl.conf 파일 설정

$ sudo vi /etc/sysctl.conf

net.ipv4.conf.all.rp_filter=0

net.ipv4.conf.default.rp_filter=0


$ sudo sysctl -p

net.ipv4.conf.all.rp_filter = 0

net.ipv4.conf.default.rp_filter = 0


Neutron과 관련된 서비스를 설치한다.


# sysctl.conf 파일 설정

$ sudo apt-get install neutron-common neutron-plugin-ml2 neutron-plugin-openvswitch-agent openvswitch-datapath-dkms


/etc/neutron/neutron.conf 파일을 열어 RabbitMQ, Neutron, Keystone 정보를 수정한다.


# neutron.conf 파일 설정

$ sudo vi /etc/neutron/neutron.conf

1 [DEFAULT]

53 core_plugin = ml2

62 service_plugins = router

70 auth_strategy = keystone

98 allow_overlapping_ips = True

105 rpc_backend = neutron.openstack.common.rpc.impl_kombu

134 rabbit_host = 192.168.0.11 # controller eth0 IP

136 rabbit_password = rabbitpass


400 [keystone_authtoken]

401 auth_uri = http://192.168.0.11:5000

402 auth_host = 192.168.0.11

403 auth_protocol = http

404 auth_port = 35357

405 admin_tenant_name = service

406 admin_user = neutron

407 admin_password = neutronpass

408 signing_dir = $state_path/keystone-signing


/etc/neutron/plugins/ml2/ml2_conf.ini 파일에 네트워크 타입과 메커니즘 드라이버 정보를 추가한다.


# ml2_conf.ini 파일 설정

$ sudo vi /etc/neutron/plugins/ml2/ml2_conf.ini

1 [ml2]

5 type_drivers = gre

12 tenant_network_types = gre

17 mechanism_drivers = openvswitch


42 [ml2_type_gre]

44 tunnel_id_ranges = 1:1000


46 [ovs]

47 local_ip = 10.10.10.31 # compute node eth1 IP

48 tunnel_type = gre

49 enable_tunneling = True


64 [securitygroup]

67 firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver

68 enable_security_group = True


openvswitch 대몬을 재시작하고 컴퓨트 노드간 인스턴스 통신을 담당할 br-ini를 openvswitch에 추가한다.


# openvswitch 재시작

$ sudo service openvswitch-switch restart

$ sudo ovs-vsctl add-br br-int

ovs-vsctl: cannot create a bridge named br-int because a bridge named br-int already exists


/etc/nova/nova.conf 파일을 열어 [DEFAULT] 섹션 밑에 Neutron 정보를 추가한다.


# nova.conf 파일 설정

$ sudo vi /etc/nova/nova.conf

network_api_class=nova.network.neutronv2.api.API # line: 27

neutron_url=http://192.168.0.11:9696

neutron_auth_strategy=keystone

neutron_admin_tenant_name=service

neutron_admin_username=neutron

neutron_admin_password=neutronpass

neutron_admin_auth_url=http://192.168.0.11:35357/v2.0

linuxnet_interface_driver=nova.network.linux_net.LinuxOVSInterfaceDriver

firewall_driver=nova.virt.firewall.NoopFirewallDriver

security_group_api=neutron


nova-compute와 neutron-plugin 대몬을 재시작한다.


# nova/neutron 서비스 재시작

$ sudo service nova-compute restart

$ sudo service neutron-plugin-openvswitch-agent restart


4.3.6 Cinder Volume 설치

컨트롤러 노드에서 Cinder 서버를 설치하였으므로 컴퓨트 노드(스토리지 노드)에서는 Cinder 볼륨을 설치한다. 먼저 lvm2 패키지를 설치한다.


※ lvm2는 물리 볼륨을 생성하기 위해 필요한 패키지


# lvm2 설치

$ sudo apt-get install lvm2

$ sudo fdisk -l

… … ……………………………

Disk /dev/sdb: 17.2 GB, 17179869184 bytes


/dev/sdb 장치를 물리 볼륨으로 생성하고 생성된 물리 볼륨을 cinder-volumes라는 볼륨 그룹으로 생성한다.


# 물리 불륨 및 볼륨 그룹 생성

$ sudo pvcreate /dev/sdb

$ sudo vgcreate cinder-volumes /dev/sdb

Volume group "cinder-volumes" successfully created


/etc/lvm/lvm.conf 파일을 열어 LVM이 기존 장치에 접근할 수 없도록 filter를 설정한다.


# LVM 접근 제한 설정

$ sudo vi /etc/lvm/lvm.conf

53 #filter = [ "a/.*/" ]

54 filter = [ "a/sda1/", "a/sdb/", "r/.*/"]


cinder 볼륨을 설치한다.


# cinder 볼륨 설치

$ sudo apt-get install cinder-volume


/etc/cinder/cinder.conf 파일을 열어 RabbitMQ, keystone, Database 정보를 추가한다.


# cinder.conf 파일 설정

$ sudo vi /etc/cinder/cinder.conf

rpc_backend = cinder.openstack.common.rpc.impl_kombu # line: 12

rabbit_host = 192.168.0.11 # controller eth0 IP

rabbit_port = 5672

rabbit_userid = guest

rabbit_password = rabbitpass

glance_host = 192.168.0.11


[keystone_authtoken]

auth_uri = http://192.168.0.11:5000

auth_host = 192.168.0.11

auth_port = 35357

auth_protocol = http

admin_tenant_name = service

admin_user = cinder

admin_password = cinderpass


[database]

connection = mysql://cinder:cinderdbpass@192.168.0.11/cinder


cinder 볼륨과 tgt 대몬을 재시작한다.


# cinder 볼륨 및 tgt 대몬 재시작

$ sudo service cinder-volume restart; sudo service tgt restart


4.3.7 Swift Storage Server 설치

/etc/swift 디렉토리 생성 후 scp 명령어를 이용해 컨트롤러 노드에 있는 swift.conf 파일을 컴퓨트 노드(/etc/swift/)로 복사한다.


# swift.conf 파일 복사

$ sudo mkdir -p /etc/swift

$ sudo scp daze@192.168.0.11:/etc/swift/swift.conf /etc/swift/swift.conf

$ cat /etc/swift/swift.conf

[swift-hash]

# random unique string that can never change (DO NOT LOSE)

swift_hash_path_suffix = 15150d1b5be2d41b7d2d


Swift Account 서버, Container 서버, Object 서버, 파일 포맷을 위한 xfsprogs, swift 연결을 위한 swiftclient, Keystone 인증을 위한 keystoneclient를 설치한다.


# swift 설치

$ sudo apt-get install swift swift-account swift-container swift-object xfsprogs python-swiftclient python-keystoneclient


오픈스택의 swift 파일시스템은 기본적으로 XFS(eXtended File System)을 사용하므로 xfs 볼륨을 생성한다.


# xfs 볼륨 생성

$ sudo fdisk /dev/sdb

Command (m for help): n

p primary (0 primary, 0 extended, 4 free)

e extended

Select (default p): p

Partition number (1-4, default 1): 1

First sector (2048-33554431, default 2048): enter

Command (m for help): w


생성된 볼륨을 마운트한다. ※ /etc/fstab 작업 시 root 권한 필요하다.


# 마운트 작업

$ sudo mkfs.xfs /dev/sdb1

$ sudo echo "/dev/sdb1 /srv/node/sdb1 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0" >> /etc/fstab

$ sudo mkdir -p /srv/node/sdb1

$ sudo mount /srv/node/sdb1

$ sudo chown -R swift:swift /srv/node


/etc/rsyncd.conf 파일을 생성해서 그림과 같이 값들을 추가해준다.


# rsyncd.conf 파일 설정

$ sudo vi /etc/rsyncd.conf

uid = swift

gid = swift

log file = /var/log/rsyncd.log

pid file = /var/run/rsyncd.pid

address = 192.168.0.31 # compute eth0 IP

[account]

max connections = 2

path = /srv/node/

read only = false

lock file = /var/lock/account.lock

[container]

max connections = 2

path = /srv/node/

read only = false

lock file = /var/lock/container.lock

[object]

max connections = 2

path = /srv/node/

read only = false

lock file = /var/lock/object.lock


/etc/default/rsync 파일을 열서 false를 true로 변경 후 대몬을 재시작한다.


# rsync 파일 설정

$ sudo vi /etc/default/rsync

8 RSYNC_ENABLE=true

$ sudo service rsync start


/var/swift/recon 디렉토리를 생성 후 컨트롤러 노드에 있는 *.ring.gz 파일들을 컴퓨트 노드에 복사한다.


# ring.gz 파일 공유

$ sudo mkdir -p /var/swift/recon

$ sudo chown -R swift:swift /var/swift/recon

$ sudo scp daze@192.168.0.11:/etc/swift/*.ring.gz /etc/swift


swift의 모든 서비스를 재시작한다.


# swift 서비스 재시작

$ for service in swift-object swift-object-replicator swift-object-updater swift-object-auditor swift-container swift-container-replicator swift-container-updater swift-container-auditor swift-account swift-account-replicator swift-account-reaper swift-account-auditor; do service $service start; done


4.3.8 Ceilometer Compute Agent 설치

컨트롤러 노드에 Ceilometer 서버를 설치하였으므로 컴퓨트 노드에는 Ceilometer 컴퓨트 에이전트를 설치해야 한다.


# ceilometer 설치

$ sudo apt-get install ceilometer-agent-compute


/etc/nova/nova.conf 파일을 열어서 시간 단위로 인스턴스의 상태를 체크해서 상태값이 변경되면 알려줘야 된다고 설정해준다.


# 인스턴스 상태값 설정

$ sudo vi /etc/nova/nova.conf

1 [DEFAULT]

37 instance_usage_audit=True

38 instance_usage_audit_period=hour

39 notify_on_state_change=vm_and_task_state

40 notification_driver=nova.openstack.common.notifier.rpc_notifier

41 notification_driver=ceilometer.compute.nova_notifier

$ sudo service nova-compute restart


/etc/ceilometer/ceilometer.conf 파일을 열어 RabbitMQ, Keystone 정보를 수정한다.


※ metering_secret : 컨트롤러 노드의 /etc/ceilometer/ceilometer.conf 파일과 동일하게 설정


# ceilometer.conf 파일 설정

$ sudo vi /etc/ceilometer/ceilometer.conf

1 [DEFAULT]

244 log_dir=/var/log/ceilometer

374 rabbit_host=192.168.0.11

390 rabbit_password=rabbitpass

735 [keystone_authtoken]

747 auth_host=192.168.0.11 # controller eth0 IP

750 auth_port=35357

754 auth_protocol=http

788 admin_user=ceilometer

791 admin_password=ceilometerpass

795 admin_tenant_name=service

907 [publisher]

916 metering_secret=8765919e2d0677c9556f

940 [service_credentials]

948 os_username=ceilometer

951 os_password=ceilometerpass

959 os_tenant_name=service

965 os_auth_url=http://192.168.0.11:5000/v2.0


ceilometer 서비스를 재시작한다.


# ceilometer 서비스 재시작

$ sudo service ceilometer-agent-compute restart


▶ openstack 클라우드 기본개념

▶ openstack 클라우드 구축 (네트워크 설정)

▶ openstack 클라우드 구축 (컨트롤러 노드 설치)

▶ openstack 클라우드 구축 (네트워크 노드 설치)

▶ openstack 클라우드 구축 (Neutron 네트워크 생성)

▶ openstack 클라우드 구축 (클라우드 이미지 생성)

▶ openstack 클라우드 구축 (클라우드 이미지 등록)

▶ openstack 클라우드 구축 (그룹 및 사용자 생성)

▶ openstack 클라우드 구축 (인스턴스 생성)

▶ openstack 클라우드 구축 (스토리지 생성)

  • 카카오톡-공유
  • 네이버-블로그-공유
  • 네이버-밴드-공유
  • 페이스북-공유
  • 트위터-공유
  • 카카오스토리-공유