Computer >> 컴퓨터 >  >> 프로그램 작성 >> 데이터 베이스

소스에서 OpenStack 설치 - 2부

이 시리즈의 첫 번째 기사에서는 소스에서 OpenStack을 설치하기 시작했습니다. 우리는 keystone을 설치하고 새로운 OpenStack 설치를 위한 서비스 프로젝트 및 관리자 사용자를 포함한 몇 가지 기본 정보로 채웠습니다. 또한 초기 스크립트에서 이미지 서비스(glance), 네트워킹 서비스(neutron), 컴퓨팅 서비스(nova) 및 볼륨 서비스(cinder)의 향후 설치를 위한 사용자 및 디렉터리를 설정합니다. 이제 계속해서 컨트롤러 노드에 Glance 프로세스를 설치하고 시작하겠습니다.

첫 번째 기사에서는 bashrc 파일에 몇 가지 정보를 추가하여 나머지 세트에서 사용할 몇 가지 쉘 변수를 설정했습니다. 이러한 변수 중 하나 이상이 설정되었는지 확인합니다.

echo $MY_IP

이미지 서비스(glance) 설치를 시작하려면 몇 개의 추가lance 하위 디렉터리를 만들고 적절한 권한이 있는지 확인해야 합니다.

mkdir -p /var/lib/glance/images
mkdir -p /var/lib/glance/scrubber
mkdir -p /var/lib/glance/image-cache

그런 다음 다운로드(리포지토리 복제)하고 한눈에 보기를 설치합니다.

git clone https://github.com/openstack/glance.git -b stable/kilo

참고:위 명령에서 -b stable/kilo를 제거하여 트렁크에서 설치하도록 변경할 수 있음을 기억하십시오.

cp -R glance/etc/* /etc/glance/
cd glance
python setup.py install

데이터베이스 연결 정보, 메시지 대기열 정보 및 키스톤 연결 정보와 같은 몇 가지 기본 정보를 설정하여 한눈에 보기 구성:

sed -i "s|#connection = <None>|connection = mysql://glance:glance@$MY_PRIVATE_IP/glance|g" /etc/glance/glance-api.conf
sed -i "s/rabbit_host = localhost/rabbit_host = $MY_PRIVATE_IP/g" /etc/glance/glance-api.conf
sed -i "s/auth_host = 127.0.0.1/auth_host = $MY_PRIVATE_IP/g" /etc/glance/glance-api.conf
sed -i 's/%SERVICE_TENANT_NAME%/service/g' /etc/glance/glance-api.conf
sed -i 's/%SERVICE_USER%/glance/g' /etc/glance/glance-api.conf
sed -i 's/%SERVICE_PASSWORD%/glance/g' /etc/glance/glance-api.conf
sed -i 's/#flavor=/flavor = keystone/g' /etc/glance/glance-api.conf
sed -i 's/#show_image_direct_url = False/show_image_direct_url = True/g' /etc/glance/glance-api.conf

위와 동일한 정보로 Glance-Registry를 구성합니다.

sed -i "s|#connection = <None>|connection = mysql://glance:glance@$MY_PRIVATE_IP/glance|g" /etc/glance/glance-registry.conf
sed -i "s/auth_host = 127.0.0.1/auth_host = $MY_PRIVATE_IP/g" /etc/glance/glance-registry.conf
sed -i 's/%SERVICE_TENANT_NAME%/service/g' /etc/glance/glance-registry.conf
sed -i 's/%SERVICE_USER%/glance/g' /etc/glance/glance-registry.conf
sed -i 's/%SERVICE_PASSWORD%/glance/g' /etc/glance/glance-registry.conf
sed -i 's/#flavor=/flavor = keystone/g' /etc/glance/glance-registry.conf
sed -i 's|#connection = <None>|connection = mysql://glance:glance@$MY_IP|g' /etc/glance/glance-api.conf
sed -i 's|#connection = <None>|connection = mysql://glance:glance@$MY_IP|g' /etc/glance/glance-registry.conf

한눈에 볼 수 있는 MySQL 데이터베이스를 생성하고 새로 생성된 데이터베이스를 살펴보기 테이블로 채웁니다.

mysql -u root -pmysql -e 'CREATE DATABASE glance;'
mysql -u root -pmysql -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'glance';"
mysql -u root -pmysql -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glance';"
glance-manage db_sync

이 환경에서는 필요하지 않지만, Glance-image-sync를 설치하고 정기적으로 실행하도록 설정할 것입니다. 여러 Glance API 노드가 있는 경우 노드 간에 Glance 이미지가 동기화됩니다.

git clone https://github.com/rcbops/glance-image-sync
pushd glance-image-sync
mv glance-image-sync.py /usr/local/bin/glance-image-sync
chmod +x /usr/local/bin/glance-image-sync
popd

cat >> /etc/glance/glance-image-sync << EOF
[DEFAULT]
api_nodes = $MY_IP
rsync_user = glance
lock_file = /var/run/glance-image-sync
EOF

cat >>  /etc/cron.d/glance-image-syn << EOF
*/5 * * * * glance /usr/local/bin/glance-image-sync
EOF

한눈에 로그 파일을 회전하는 것을 기억해야 합니다.

cat >> /etc/logrotate.d/glance << EOF
/var/log/glance/*.log {
        daily
        missingok
        rotate 7
        compress
        notifempty
        nocreate
}
EOF

이미지 서비스에 대한 ID 서비스 서명 인증서를 받지 못하면 이미지 API 요청이 실패합니다. 키스톤 서명 인증서를 한눈에 확인하여 이를 방지하십시오.

cp /etc/keystone/ssl/certs/ca.pem /var/lib/glance/cacert.pem
cp /etc/keystone/ssl/certs/signing_cert.pem /var/lib/glance/
chown glance:glance /var/lib/glance/*
chmod 600 /var/lib/glance/cacert.pem
chmod 600 /var/lib/glance/signing_cert.pem

이제 간단히 살펴보기를 시작할 준비가 거의 끝났지만 먼저 먼저 살펴보기 시작 스크립트를 만들어야 합니다.

참고:이 스크립트는 Ubuntu 운영 체제 패키지 버전의 Glance가 설치하는 스크립트에서 복사한 것입니다.

cat >> /etc/init/glance-api.conf << EOF
description "Glance API server"
author "Soren Hansen <[email protected]>"

start on runlevel [2345]
stop on runlevel [!2345]

respawn

exec start-stop-daemon --start --chuid glance --exec /usr/local/bin/glance-api -- --config-file=/etc/glance/glance-api.conf --config-file=/etc/glance/glance-api-paste.ini
EOF

cat >> /etc/init/glance-registry.conf << EOF
description "Glance registry server"
author "Soren Hansen <[email protected]>"

start on runlevel [2345]
stop on runlevel [!2345]

respawn

exec start-stop-daemon --start --chuid glance --exec /usr/local/bin/glance-registry -- --config-file=/etc/glance/glance-registry.conf --config-file=/etc/glance/glance-registry-paste.ini

EOF

한눈에 보기 시작하고 실행 중인지 확인:

start glance
start glance-registry

약 15초 동안 기다렸다가 다음을 실행하여 Glance가 실행 중인지 확인합니다.

ps aux|grep glance

한눈에 보기가 시작되면 실행 중인 프로세스에 대한 정보를 보여주는 마지막 명령 행이 표시되어야 합니다. 이것이 발생하지 않고 Glance가 시작되지 않거나 계속 실행되는 경우 다음을 사용하여 문제 해결을 위해 수동으로 Glance를 시작하십시오.

sudo -u glance glance-api --config-file=/etc/glance/glance-api.conf --config-file=/etc/glance/glance-api-paste.ini > /dev/null 2>&1 &

sudo -u glance glance-registry --config-file=/etc/glance/glance-registry.conf --config-file=/etc/glance/glance-registry-paste.ini > /dev/null 2>&1 &

참고: debug = True 값 설정 /etc/glance/glance.conf 파일에서 오류 디버깅에 도움이 되도록 로깅 출력을 증가시킵니다.

다음으로, VM의 기반으로 OpenStack이 완전히 설치되면 사용하기 위해 이미지를 한눈에 설치합니다. 사용 가능한 Ubuntu 운영 체제를 기반으로 하는 cirros라는 작은 클라우드 이미지가 있습니다. 한눈에 보기를 실행하여 cirros 이미지를 다운로드하여 한 눈에 보기에 로드합니다.

wget https://cdn.download.cirros-cloud.net/0.3.3/cirros-0.3.3-x86_64-disk.img

glance image-create --name=cirros-qcow2 \
                    --disk-format=qcow2 \
                    --container-format=bare \
                    --is-public=true < cirros-0.3.3-x86_64-disk.img

이제 두 번째 프로세스가 실행 중이며 이제 네트워킹 서비스(neutron) 설치에 주의를 기울일 수 있습니다. 이것은 우리가 해야 할 세 가지 중성자 설치 중 첫 번째입니다. 컨트롤러 노드의 중성자 서버와 네트워크 및 컴퓨팅 노드의 중성자 에이전트입니다.

nova, neutron 및 Glance 프로세스는 다양한 작업을 수행하기 위해 루트 또는 sudo 권한이 필요하므로 이러한 프로세스 사용자를 위한 특별한 sudo 권한을 생성해야 합니다. OpenStack은 또한 rootwrap 구성을 사용하여 이러한 권한의 범위를 제한합니다. 다음 스크립트를 실행하여 sudo 권한을 설정하십시오.

for SERVICE in neutron nova cinder
do
echo $SERVICE
cat > '/etc/sudoers.d/'$SERVICE'_sudoers' << EOF
Defaults:$SERVICE !requiretty

$SERVICE ALL = (root) NOPASSWD: /usr/local/bin/$SERVICE-rootwrap  /etc/$SERVICE/rootwrap.conf *
EOF

chmod 440 /etc/sudoers.d/$SERVICE_sudoers
done
chmod 750 /etc/sudoers.d

일부 pip 전제 조건에는 자동으로 설치되지 않는 몇 가지 패키지 전제 조건이 있습니다. 지금 다음 패키지를 설치하십시오:

apt-get -y install git mysql-client python-dev libxml2-dev libffi-dev

중성자 반응 복제:

git clone https://github.com/openstack/neutron.git -b stable/kilo

제공된 구성 파일 복사:

cp neutron/etc/* /etc/neutron/

필요한 구성 하위 디렉터리를 복사합니다.

cp -R neutron/etc/neutron/plugins/ml2/* /etc/neutron/plugins/ml2
cp -R neutron/etc/neutron/rootwrap.d/* /etc/neutron/rootwrap.d

이제 중성자를 설치하십시오:

cd neutron
python setup.py install
cd ~

neutron용 MySQL 데이터베이스 생성:

mysql -u root -pmysql -e 'CREATE DATABASE neutron;'
mysql -u root -pmysql -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'neutron';"
mysql -u root -pmysql -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'neutron';"

이전 기사에서 실행된 샘플 데이터 스크립트는 중성자 서비스에 대한 데이터를 삽입하지 않습니다. keystone에서 Neutron 서비스 사용자 생성:

keystone user-create --tenant service --name neutron --pass neutron

새로 생성된 Neutron 서비스 사용자에게 '관리자' 역할 부여:

keystone user-role-add --user neutron --tenant service --role admin

그리고 사용자 생성이 제대로 되었는지 확인합니다. 서비스 사용자 및 역할을 나열하고 neutron 사용자가 존재하고 관리자 역할이 있는지 확인합니다.

keystone user-list --tenant Services
keystone user-role-list --tenant service --user neutron

이전 두 명령의 출력에서 ​​neutron 사용자가 생성되었고 적절한 권한이 있음을 확인해야 합니다. 이제 중성자 서비스를 keystone 서비스 카탈로그에 채우십시오.

keystone service-create --name=neutron --type=network --description="Neutron Network Service"

중성자 끝점 정보를 keystone 서비스 카탈로그에 배치합니다.

keystone endpoint-create --region RegionOne --service neutron --publicurl=https://$MY_PUBLIC_IP:9696 --internalurl=https://$MY_PRIVATE_IP:9696 --adminurl=https://$MY_PRIVATE_IP:9696

SERVICE_TENANT_ID=`keystone tenant-get service | awk '/ id / { print $4 }'`

마지막으로 중성자를 구성해야 합니다. 패키지 닫기 과정에서 기본 설정 파일이 제공된다면 매우 길고 편집하기 어렵기 때문에 제거한다. 다음으로, 다음 시퀀스는 그것을 더 간단한 것으로 대체합니다(원본은 미래에 볼 필요가 있는 경우 여전히 복제된 중성자 디렉토리에 있습니다):

rm /etc/neutron/neutron.conf

cat > /etc/neutron/neutron.conf << EOF
[DEFAULT]
verbose = True
debug = True
core_plugin = ml2
service_plugins = router
auth_strategy = keystone
allow_overlapping_ips = True
dhcp_agents_per_network = 1
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True
nova_url = https://$MY_PRIVATE_IP:8774/v2
nova_admin_username = nova
nova_admin_tenant_id = $SERVICE_TENANT_ID
#nova_admin_tenant_name = service
nova_admin_password = nova
nova_admin_auth_url = https://$MY_PRIVATE_IP:35357/v2.0

[agent]
root_helper=sudo /usr/local/bin/neutron-rootwrap /etc/neutron/rootwrap.conf
[keystone_authtoken]
auth_uri = https://$MY_PRIVATE_IP:35357/v2.0/
identity_uri = https://$MY_PRIVATE_IP:5000
admin_tenant_name = service
admin_user = neutron
admin_password = neutron
[database]
connection = mysql://neutron:neutron@$MY_PRIVATE_IP/neutron

[oslo_concurrency]
lock_path = /var/lock/neutron

[oslo_messaging_rabbit]
rabbit_host = $MY_PRIVATE_IP
EOF

중성자 로그 파일 회전:

cat >> /etc/logrotate.d/neutron << EOF
/var/log/neutron/*.log {
        daily
        missingok
        rotate 7
        compress
        notifempty
        nocreate
}
EOF

Neutron은 ML2 플러그인을 통해 여러 네트워킹 레이어 2 기술을 지원합니다. 프로젝트 네트워크 격리를 위해 GRE 터널을 사용하도록 neutron ML2 플러그인 에이전트를 구성합니다. 이 에이전트는 컨트롤러 노드에서 실행되지 않지만 neutron 서버는 플러그인에 대해 알아야 합니다.

rm /etc/neutron/plugins/ml2/ml2_conf.ini
cat > /etc/neutron/plugins/ml2/ml2_conf.ini  << EOF

[ml2]
type_drivers = gre
tenant_network_types = gre
mechanism_drivers = openvswitch

[ml2_type_gre]
tunnel_id_ranges = 1:1000

[securitygroup]
enable_security_group = True
enable_ipset = True
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
EOF

chown neutron:neutron /etc/neutron/*.{conf,json,ini}
chown -R neutron:neutron /etc/neutron/plugins

cat > /etc/default/neutron << EOF
--config-file=/etc/neutron/plugins/ml2/ml2_conf.ini
EOF

한눈에 살펴보았듯이 중성자 데이터베이스 테이블을 구축합니다.

neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head

중성자 프로세스를 시작하기 전에 ml2 구성 파일을 읽을 수 있도록 시작 스크립트에 몇 가지 옵션 정보를 제공해야 합니다.

cat > /etc/default/neutron-server << EOF
NEUTRON_PLUGIN_CONFIG="/etc/neutron/plugins/ml2/ml2_conf.ini"
EOF

그리고 마지막으로 neutron 서버 프로세스를 시작하는 데 사용되는 upstart 스크립트를 만듭니다.

cat > /etc/init/neutron-server.conf << EOF
# vim:set ft=upstart ts=2 et:

start on runlevel [2345]
stop on runlevel [!2345]

script
  [ -r /etc/default/neutron-server ] && . /etc/default/neutron-server
  [ -r "\$NEUTRON_PLUGIN_CONFIG" ] && CONF_ARG="--config-file \$NEUTRON_PLUGIN_CONFIG"
  exec start-stop-daemon --start --chuid neutron --exec /usr/local/bin/neutron-server -- \
    --config-file /etc/neutron/neutron.conf \
    --log-file /var/log/neutron/server.log \$CONF_ARG
end script

EOF

실행 중인 neutron 서버를 시작하고 계속 실행 중인지 확인합니다. 두 번째 줄은 실행 중인 중성자 프로세스에 대한 정보를 제공합니다(두 번째 명령을 실행하기 전에 다시 약 15초 동안 기다림):

start neutron
ps aux|grep neutron

중성자가 시작되지 않으면 다음 라인을 사용하여 수동으로 중성자를 시작합니다. 중성자 프로세스 시작 시 오류가 있는 경우 문제를 디버깅하는 데 도움이 되는 출력을 제공합니다.

sudo -u neutron neutron-server --config-file=/etc/neutron/neutron.conf --config-file=/etc/neutron/plugins/ml2/ml2_conf.ini --log-file /var/log/neutron/server.log

이 시리즈의 다음 기사에서는 여러 nova 프로세스를 컨트롤러 노드에 설치합니다.