4 오픈스택 구축
4.3 컴퓨트 노드(1/2) 설치
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 클라우드 구축 (Neutron 네트워크 생성)
▶ openstack 클라우드 구축 (클라우드 이미지 생성)
▶ openstack 클라우드 구축 (클라우드 이미지 등록)